寻找遍历差异 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
代替未指定的值(例如 ::2
是 slice(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)
我有一个多维 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
代替未指定的值(例如 ::2
是 slice(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)