python – 通过多维数组的所有1维子阵列进行迭代


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]

这里的技巧是遍历所有的轴,并且对于每个轴将阵列重新形成二维数组,其中的行是所需的一维子阵列.

dawei

【声明】:淮南站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。