4

使用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

如果orderina'F'or 'C',则没有,这给出:

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

是否有任何内置迭代器numpy可以ndenumerate给出这个(在数组之后order='F'):

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

2 回答 2

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 迭代器,请查看文档中的迭代数组

于 2013-08-17T13:19:06.310 回答
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
于 2013-08-17T13:05:51.077 回答