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

前端之家收集整理的这篇文章主要介绍了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]

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

原文链接:https://www.f2er.com/python/186761.html

猜你在找的Python相关文章