在J中,要查找可以使用的元素数量#right?
例如
# 2 3 4 5 6
5
Run Code Online (Sandbox Code Playgroud)
好.那么多维数组呢?
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
Run Code Online (Sandbox Code Playgroud)
这里#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
Run Code Online (Sandbox Code Playgroud)
这有3个,因为领先尺寸长度为3,对吧?
但我无法解释这个:
#\b
1 2 3
Run Code Online (Sandbox Code Playgroud)
我通过b的元素计算.所以我认为每个2x4子阵列都会被使用,我希望#\ b能够给出
2 2 2
Run Code Online (Sandbox Code Playgroud)
因为:
c=:2 4 $i.2
c
0 1 0 1
0 1 0 1
#c
2
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,为什么#\ b = 1 2 3?我认为这与动词排名有关,对吧?我很难理解这个话题......
看看发生了什么事情最简单的方法是框<您\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?
?????????????????????????
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
因此,#\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?
?????????????????????????
Run Code Online (Sandbox Code Playgroud)