了解 J 从

Understanding J From

在 J:

a =: 2 3 $ 1 2 3 4 5 6

给出:

1 2 3
4 5 6

这是一个 2 3 形数组。

如果我这样做:

0 1 { a

我(注意 0 1 是一个 2 形列表)预计会返回:

1 2 3 4 5 6

但得到的却是以下内容:

1 2 3
4 5 6

阅读文档时我希望索引的形状能够控制答案的形状。

有人可以澄清我在这里遗漏了什么吗?

From ({) 选择名词的项目。对于 2 3 $ 1 2 3 4 5 6,项目是两行,因为项目是构成名词的组件。

   [ a=. 2 3 $ 1 2 3 4 5
1 2 3
4 5 1
   0 { a
1 2 3

如果您只有 1 2 3,那么这些项目就是单个原子。

   [ b=. 1 2 3
1 2 3
   0 { b
1

如果您使用 1 3 $ 1 2 3 则只有一项,结果将是

   [ c=. 1 3 $ 1 2 3
1 2 3
   0 { c
1 2 3

项数可以用Tally(#)查到,是名词Shape($)的前导维度。

   $ a
2 3
   $ b
3
   $ c
1 3

   # a
2
   # b
3
   # c
1

高维数组可能有助于阐明这一点。 n 维的数组有 n-1 维。当您 select 来自 ({) 一个三维数组的 item 时,您的结果是一个二维数组:

   1 { i. 5 3 4
12 13 14 15
16 17 18 19
20 21 22 23

当您 select 来自一个数组的多个 时, 被组装成一个新数组,使用每个 atom of x to select a item of y.您可能就是从这里了解到 x 的形状会影响结果的形状。

   2 1 0 2 { 'set'
test
   $ 2 1 0 2
4
   $ 'test'
4

结果的维度等于 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

最后一点:单子 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