理解J From

jim*_*ima 3 j

在J:

a =: 2 3 $ 1 2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)

得到:

1 2 3
4 5 6
Run Code Online (Sandbox Code Playgroud)

这是一个2 3异形阵列.

如果我做:

0 1 { a
Run Code Online (Sandbox Code Playgroud)

我(注意到这0 1是一个2形状列表)预计会回来:

1 2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)

但得到以下代码:

1 2 3
4 5 6
Run Code Online (Sandbox Code Playgroud)

阅读文档我期待索引的形状有点控制答案的形状.

有人可以澄清我在这里缺少的东西吗?

Dan*_*ane 5

高维数组可能有助于清楚这一点.以与阵列n尺寸具有n-1尺寸.当您从()三维数组中选择一个项目时{,您的结果是一个二维数组:

   1 { i. 5 3 4
12 13 14 15
16 17 18 19
20 21 22 23
Run Code Online (Sandbox Code Playgroud)

当选择多个项目从一个数组,该项目被组装成一个新的数组,使用每个原子x选择项目y.这可能是您认为形状x影响结果形状的想法.

   2 1 0 2 { 'set'
test
   $ 2 1 0 2
4
   $ 'test'
4
Run Code Online (Sandbox Code Playgroud)

结果的尺寸相等的尺寸x加上尺寸的物品y.因此,如果您从二维中x获取二维项目y,您将得到一个四维结果:

   (2 2 $ 1 1 0 1) { i. 5 3 4
12 13 14 15
16 17 18 19
20 21 22 23

12 13 14 15
16 17 18 19
20 21 22 23


 0  1  2  3
 4  5  6  7
 8  9 10 11

12 13 14 15
16 17 18 19
20 21 22 23
   $ (2 2 $ 1 1 0 1) { i. 5 3 4
2 2 3 4
Run Code Online (Sandbox Code Playgroud)

最后一点注意:monadic Ravel(,)会将结果减少到一个列表(一维数组).

   , 0 1 { 2 3 $ 1 2 3 4 5 6
1 2 3 4 5 6
   , i. 2 2 2 2
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Run Code Online (Sandbox Code Playgroud)