在
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]
这里的技巧是遍历所有的轴,并且对于每个轴将阵列重新形成二维数组,其中的行是所需的一维子阵列.