numpy.ndenumerate以Fortran顺序返回索引?

时间:2013-08-17 12:31:07

标签: python arrays numpy iterator iteration

使用numpy.ndenumerate时,会为C-contiguous数组顺序返回索引,例如:

import numpy as np
a = np.array([[11, 12],
              [21, 22],
              [31, 32]])

for (i,j),v in np.ndenumerate(a):
    print i, j, v

如果order中的a'F''C',则无效:

0 0 11
0 1 12
1 0 21
1 1 22
2 0 31
2 1 32

numpy {@ 1}}中是否有任何内置迭代器可以提供此功能(在数组ndenumerate之后):

order='F'

2 个答案:

答案 0 :(得分:4)

您可以使用np.nditer执行以下操作:

it = np.nditer(a, flags=['multi_index'], order='F')
while not it.finished:
    print it.multi_index, it[0]
    it.iternext()

np.nditer是一个非常强大的野兽,它暴露了Python中的一些内部C迭代器,请查看文档中的Iterating Over Arrays

答案 1 :(得分:3)

只要进行转置会给你你想要的东西:

a = np.array([[11, 12],
              [21, 22],
              [31, 32]])

for (i,j),v in np.ndenumerate(a.T):
    print j, i, v

结果:

0 0 11
1 0 21
2 0 31
0 1 12
1 1 22
2 1 32