我有一个4-D数组,我需要沿着给定的维度处理该数组中的所有1-D向量。这很好用:
def myfun(arr4d,selected_dim):#selected_dim只能是2或3
打印arr4d.shape#(2,5,10,10)
对于我在xrange(arr4d.shape [0]):
对于xrange(arr4d.shape [1])中的j:
对于xrange(arr4d.shape [selected_dim])中的k:
如果selected_dim == 2:
arr = arr4d [i,j,k ,:]
elif selected_dim == 3:
arr = arr4d [i,j,:,k]
do_something(arr)#arr为一维,有10个项目
...但是我相信有某种方法可以避免嵌套的“ if”部分,也许还可以提高效率?像在循环之前创建此数组的其他视图,然后遍历这些视图一样吗?
最佳答案
一种常见的处理方法是使用np.rollaxis
:
def myfun(arr4d, selected_dim): # selected_dim can only be 2 or 3
arr4d = np.rollaxis(arr4d, selected_dim)
print arr4d.shape # (10, 2, 5, 10)
for i in xrange(arr4d.shape[1]):
for j in xrange(arr4d.shape[2]):
for k in xrange(arr4d.shape[0]):
arr=arr4d[k, i, j, :]
do_something(arr) # arr is 1-D and has 10 items
请注意,
np.rollaxis
应该返回一个视图,因此它实际上不会复制该数组。