在
python中迭代遍历n维数组的所有一维子数组的最快方法是什么?
例如考虑3-D数组:
import numpy as np a = np.arange(24) a = a.reshape(2,3,4)
迭代器的期望产量序列是:
a[:,0] a[:,1] .. a[:,2,3] a[0,:,0] .. a[1,:] .. a[1,:]
解决方法
这是一个这样一个迭代器的紧凑实现:
def iter1d(a): return itertools.chain.from_iterable( numpy.rollaxis(a,axis,a.ndim).reshape(-1,dim) for axis,dim in enumerate(a.shape))
这将按照你在帖子中给出的顺序生成子数组:
for x in iter1d(a): print x
版画
[ 0 12] [ 1 13] [ 2 14] [ 3 15] [ 4 16] [ 5 17] [ 6 18] [ 7 19] [ 8 20] [ 9 21] [10 22] [11 23] [0 4 8] [1 5 9] [ 2 6 10] [ 3 7 11] [12 16 20] [13 17 21] [14 18 22] [15 19 23] [0 1 2 3] [4 5 6 7] [ 8 9 10 11] [12 13 14 15] [16 17 18 19] [20 21 22 23]
这里的技巧是遍历所有的轴,并且对于每个轴将阵列重新形成二维数组,其中的行是所需的一维子阵列.