先写一些代码:
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
的解释。