寻找遍历差异 numpy 数组切片

Looking to loop over difference numpy array slicings

我有一个多维 numpy 数组,我希望从中获取不同的切片:

A=Array[1,:,:,:,:]
B=Array[:,1,:,:,:]
C=Array[:,:,1,:,:]
D=Array[:,:,:,1,:]
E=Array[:,:,:,:,1]

然后我需要以完全相同的方式处理这些,所以我考虑在一个简单的循环中进行处理。 但是我不知道该怎么做。

我认为列表理解是这样的:

for i in range(5):
   Sliced=Array[1 if x==i else : for x in range(5)]

但这显然行不通

当你写 Array[x,y,z] 时,你实际上是将元组 (x,y,z) 传递到方括号 [...] 中,而 a:b:c 结构中有 [=15= 的语法糖] 用 None 代替未指定的值(例如 ::2slice(None, None, 2))。所以你的意思应该是这样获得的:

for i in range(5):
    Sliced = Array[tuple(1 if x==i else slice(None) for x in range(5))]

IIUC,一种方法是旋转数组的轴而不是索引:

arr = np.random.random((2,3,4,5,6))

arrays = []
for i in range(arr.ndim):
    print(arr.shape)
    arrays.append(arr[1, ...])
    arr = np.moveaxis(arr, 0, -1)

形状的输出:

(2, 3, 4, 5, 6)
(3, 4, 5, 6, 2)
(4, 5, 6, 2, 3)
(5, 6, 2, 3, 4)
(6, 2, 3, 4, 5)