3

在 J 中,要找到可以使用 # 的元素数对吗?

例如

# 2 3 4 5 6
5

好的。那么多维数组呢

b=: 2 3 4 $ i.2

   b
0 1 0 1
0 1 0 1
0 1 0 1

0 1 0 1
0 1 0 1
0 1 0 1

这里#b 是2。我猜是因为第一个维度的长度为2。即数组的框架。

所以如果我稍微改变一下:

b=:3 2 4 $ i.2
   b
0 1 0 1
0 1 0 1

0 1 0 1
0 1 0 1

0 1 0 1
0 1 0 1

这有 3,因为前导维度的长度为 3,对吗?

但我无法解释这一点:

#\b
1 2 3

我通过 b 的元素进行计数。所以我认为每个 2x4 子数组都会被使用,我希望 #\b 给

2 2 2

因为:

c=:2 4 $i.2
   c
0 1 0 1
0 1 0 1
   #c
2

所以我的问题是,为什么#\b = 1 2 3?我认为这与动词等级有关,对吗?我正在努力理解这个话题......

4

2 回答 2

6

查看发生了什么的最简单方法是将<您的\b

   <\b
┌───────┬───────┬───────┐
│0 1 0 1│0 1 0 1│0 1 0 1│
│0 1 0 1│0 1 0 1│0 1 0 1│
│       │       │       │
│       │0 1 0 1│0 1 0 1│
│       │0 1 0 1│0 1 0 1│
│       │       │       │
│       │       │0 1 0 1│
│       │       │0 1 0 1│
└───────┴───────┴───────┘

u\y适用uy的前缀:

<\1 2 3
┌─┬───┬─────┐
│1│1 2│1 2 3│
└─┴───┴─────┘
#\1 2 3
1 2 3
*/\1 2 3
1 2 6

因此,#\b为您提供每个b' 前缀的项目数。

你可能认为你会得到的是 b 的 2 秩项数:

#"2 b
2 2 2
<"2 b
┌───────┬───────┬───────┐
│0 1 0 1│0 1 0 1│0 1 0 1│
│0 1 0 1│0 1 0 1│0 1 0 1│
└───────┴───────┴───────┘
于 2012-08-21T15:52:32.673 回答
1

要获取多维数组中 rank-0 项的计数,请执行以下操作:

   rank_0s =: */&$
   wild1 =: 2 3 4 $ 'abcdefghijklmnopqrstuvwxyz'

   rank_0s wild1
24
于 2012-08-23T18:54:23.293 回答