理解J From

时间:2017-04-22 09:46:41

标签: j

在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

阅读文档我期待索引的形状有点决定答案的形状。

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

2 个答案:

答案 0 :(得分:5)

高维数组可能有助于明确这一点。维度为n的数组的的维度为n-1。从({)三维数组中选择时,结果是二维数组:

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

当您从数组中选择多个时,将使用{{1}的每个原子组合成一个新数组}选择x。这可能是您认为y的形状会影响结果形状的想法。

x

结果的尺寸等于 2 1 0 2 { 'set' test $ 2 1 0 2 4 $ 'test' 4 的尺寸加上x的尺寸。因此,如果你有一个二维y从三维x获取二维,你将得到一个四维结果:

y

最后一点说明:monadic Ravel( (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 )会将结果缩减为一个列表(一维数组)。

,

答案 1 :(得分:2)

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