朱莉娅那种像Numpy一样的切片

时间:2018-05-27 16:05:36

标签: python arrays julia

在Python / Numpy中,我可以用这种形式对数组进行切片:

arr = np.ones((3,4,5))
arr[2]

并保持形状:

(arr[2]).shape # prints (4, 5)

这意味着,如果我想保持数组的形状,以下代码适用于N维数组

arr = np.ones((3,4,5,2,2))
(arr[2]).shape # prints (4, 5, 2, 2)

如果我想编写适用于保留其输出的N-dim数组的函数,那就太棒了。

然而,在朱莉娅,同样的行动并没有保留结构:

arr = ones(3,4,5)
size(arr[3]) # prints () (0-dimensinoal)
size(arr[3,:]) # prints (20,)

因为部分线性索引。因此,如果想要保留原始尺寸,我需要编写arr[3,:,:],这仅适用于3D数组。如果我想要一个4D阵列,我将不得不使用arr[3,:,:,:]等等。代码不是通用的。

此外,当你到达5维或更多维度的数组时(我现在正在使用这种情况),这种表示法非常麻烦。

有没有什么方法可以像在Python中一样编写代码并使其一般化?我甚至想不到一个很好的简洁方式,更像是一种像Python一样干净的方式。

1 个答案:

答案 0 :(得分:5)

请注意,在Python中,只有在切割数组的第一个维度时才会保留形状。在Julia中,您可以使用slicedim(A, d, i)对索引d处的数组A的维度i进行切片。