在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一样干净的方式。
答案 0 :(得分:5)
请注意,在Python中,只有在切割数组的第一个维度时才会保留形状。在Julia中,您可以使用slicedim(A, d, i)
对索引d
处的数组A
的维度i
进行切片。