加入收藏 | 设为首页 | 会员中心 | 我要投稿 大庆站长网 (https://www.0459zz.com/)- 科技、智能边缘云、事件网格、云计算、站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-09-25 23:17:29 所属栏目:Python 来源:互联网
导读:在 python中迭代遍历n维数组的所有一维子数组的最快方法是什么? 例如考虑3-D数组: import numpy as np a = np.arange(24)a = a.reshape(2,3,4) 迭代器的期望产量序列是: a[:,0,0]a[:,0,1]..a[:,2,3]a[0,:,0]..a[1,:,3]a[0,0,:]..a[1,2,:] 这是一个这样一个

在 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]

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

(编辑:大庆站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读