APL用轴包围:∧[n]A是如何工作的?



先写一些代码:

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用来分割数组的底层算法是什么?我已经绘制了几个表,看看我是否可以建立一个直觉,但我没有能够,我也没有能够在我看过的文档中找到这些信息。

我将使用基于一个的索引-如果您想键入,您可以设置` ` IO `。

轴规格中给出的尺寸为受影响的尺寸。也就是说,如果在n维度上加上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]]&[[13][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的解释。

相关内容

  • 没有找到相关文章

最新更新