Python 从多维数组中选择一些维度
我有一个4-D数组,我需要处理这个数组中沿着给定维度的所有1-D向量。这很有效: def myfun(arr4d,选定尺寸):#选定尺寸只能为2或3 打印arr4d.shape#(2,5,10,10) 对于x范围内的i(arr4d.形状[0]): 对于X范围内的j(arr4d.形状[1]): 对于X范围内的k(arr4d.形状[选定尺寸]: 如果选择_dim==2: arr=arr4d[i,j,k,:] elif selected_dim==3: arr=arr4d[i,j,:,k] dou_something(arr)#arr是一维的,有10个项目Python 从多维数组中选择一些维度,python,arrays,multidimensional-array,matrix,numpy,Python,Arrays,Multidimensional Array,Matrix,Numpy,我有一个4-D数组,我需要处理这个数组中沿着给定维度的所有1-D向量。这很有效: def myfun(arr4d,选定尺寸):#选定尺寸只能为2或3 打印arr4d.shape#(2,5,10,10) 对于x范围内的i(arr4d.形状[0]): 对于X范围内的j(arr4d.形状[1]): 对于X范围内的k(arr4d.形状[选定尺寸]: 如果选择_dim==2: arr=arr4d[i,j,k,:] elif selected_dim==3: arr=arr4d[i,j,:,k] dou_s
…但我相信有一些方法可以避免嵌套的“如果”部分,并且可能更有效?就像在循环之前创建此数组的其他视图,然后在这些视图中迭代一样?处理此问题的一种常见方法是使用
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
应该返回一个视图,这样它就不会实际复制数组。您是说嵌套的for循环是您想要避免的吗?我只看到一个简单的if…elif构造。我的意思是避免嵌套的if
,或者,避免三个for
。根据@BiRico的回答,numpy.rollaxis
是摆脱困扰我的“可变维度”问题的一种方法。谢谢!是否可以使用np.take
和适当的轴
,以及可能的其他参数来达到类似的效果?我没能做到,但看起来take
也很有用。