APL附带轴:⊂[n] A如何工作?

时间:2015-09-21 18:37:59

标签: multidimensional-array apl

首先是一些代码:

A ← 2 2 2 ⍴ ⍳8
A
 0 1
 2 3

 4 5
 6 7

⊂[0]A
 0 4  1 5
 2 6  3 7

我可以想象封闭在第一个轴上意味着在其深度上对数组进行子切片,产生[[0 1][2 3]]& [[4 5][6 7]]或者我可以看到它意味着对列进行子切片,产生[[0 2][4 6]]& [[1 3][5 7]]。但当然它也没有。 (⊂[1]A做第二个,第一个操作会做什么?)

⊂[axis]array用于拆分数组的基础算法是什么?我已经抽出几张表来看看我是否可以为它建立直觉,但是我无法在我看过的文档中找到这些信息。

1 个答案:

答案 0 :(得分:3)

我会使用基于单一的索引 - 如果要输入,可以设置⎕IO。

轴规格中给出的尺寸是受影响的尺寸。也就是说,如果您将 n 维度包含在内,则排名会降低,因为结果的形状将是没有 n 维度的原始形状。

      ⍴a ← 2 3 4⍴⍬
2 3 4
      ⍴⊂[1]a
3 4
      ⍴⊂[2]a
2 4
      ⍴⊂[3]a
2 3

现在, n 维度上的数组将保留其在保留维度上的位置,但是作为包含(即包含)它们的标量,产生嵌套数组:

      a ← 2 2 2⍴⍳8
      a
1 2
3 4

5 6
7 8
      ⊂[1]a
┌→──┐ ┌→──┐
│1 5│ │2 6│
└───┘ └───┘
┌→──┐ ┌→──┐
│3 7│ │4 8│
└───┘ └───┘
  

⊂[axis]array正在使用的基础算法是什么   分裂数组?我已经抽出几张桌子来看看我是否可以建造   对它的直觉,但我无法做到,而且我无法做到   在我看过的文档中找到这些信息。

对于你的例子,一个简单的直觉可能是想象两个半透明的纸张上印有表格。你把它们放在一起,略微倾斜。然后,想象一下,如果你把光源放在它们前面,它们会投射到它们后面的墙上。这个投影的平面表是每个单元格中有两个值的结果。

  

我可以想象,在第一个轴上包围意味着对阵列的深度进行子切片,产生[[0 1] [2 3]]& [[4 5] [6 7]]或者我可以   看到它意味着对列进行子切片,产生[[0 2] [4 6]]& [[1   3] [5 7]]。但当然它也没有做到。 (⊂[1]A做到了   第二,

它不仅仅是子切片 - 封闭返回一个嵌套数组(简单的标量除外)。我要么误解你的符号,要么以下不清楚:

      1 2 3
1 2 3
      ⍴1 2 3
3               ⍝ rank 1, i.e. a vector

      ≡⍴1 2 3
1               ⍝ depth 1, i.e. a non-nested array

      ⊂1 2 3
┌→────┐
│1 2 3│
└─────┘
      ⍴⊂1 2 3   ⍝ rank 0, i.e. a scalar
      ≡⊂1 2 3
2               ⍝ depth >1, i.e. a nested array
  

第一次做什么操作?)

您可以沿着一组维度包围:

    ⊂[2 3]a
┌→──┐ ┌→──┐
↓1 2│ ↓5 6│
│3 4│ │7 8│
└───┘ └───┘

但是,如上文针对Z ← ⊂[X]R⍴⍴Z ←→ (⍴⍴R)-⍴⍴X所述。