在J中,要查找可以使用的元素数量#right?
e.g。
# 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?我认为这与动词排名有关,对吧?我很难理解这个话题......
答案 0 :(得分: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
u
将y
应用于<\1 2 3
┌─┬───┬─────┐
│1│1 2│1 2 3│
└─┴───┴─────┘
#\1 2 3
1 2 3
*/\1 2 3
1 2 6
的前缀:
#\b
因此,b
会为您提供每个#"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│
└───────┴───────┴───────┘
前缀的项目数。
你可能认为你会得到的是b的项目的2级数:
{{1}}
答案 1 :(得分:0)
要获取多维数组中rank-0项的计数,请执行以下操作:
rank_0s =: */&$
wild1 =: 2 3 4 $ 'abcdefghijklmnopqrstuvwxyz'
rank_0s wild1
24