首先是一些代码:
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
用于拆分数组的基础算法是什么?我已经抽出几张表来看看我是否可以为它建立直觉,但是我无法在我看过的文档中找到这些信息。
答案 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
所述。