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

前端之家收集整理的这篇文章主要介绍了python – 通过多维数组的所有1维子阵列进行迭代前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
python中迭代遍历n维数组的所有一维子数组的最快方法是什么?

例如考虑3-D数组:

  1. import numpy as np
  2. a = np.arange(24)
  3. a = a.reshape(2,3,4)

迭代器的期望产量序列是:

  1. a[:,0]
  2. a[:,1]
  3. ..
  4. a[:,2,3]
  5. a[0,:,0]
  6. ..
  7. a[1,:]
  8. ..
  9. a[1,:]

解决方法

这是一个这样一个迭代器的紧凑实现:
  1. def iter1d(a):
  2. return itertools.chain.from_iterable(
  3. numpy.rollaxis(a,axis,a.ndim).reshape(-1,dim)
  4. for axis,dim in enumerate(a.shape))

这将按照你在帖子中给出的顺序生成子数组:

  1. for x in iter1d(a):
  2. print x

版画

  1. [ 0 12]
  2. [ 1 13]
  3. [ 2 14]
  4. [ 3 15]
  5. [ 4 16]
  6. [ 5 17]
  7. [ 6 18]
  8. [ 7 19]
  9. [ 8 20]
  10. [ 9 21]
  11. [10 22]
  12. [11 23]
  13. [0 4 8]
  14. [1 5 9]
  15. [ 2 6 10]
  16. [ 3 7 11]
  17. [12 16 20]
  18. [13 17 21]
  19. [14 18 22]
  20. [15 19 23]
  21. [0 1 2 3]
  22. [4 5 6 7]
  23. [ 8 9 10 11]
  24. [12 13 14 15]
  25. [16 17 18 19]
  26. [20 21 22 23]

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

猜你在找的Python相关文章