2013-08-17 1 views
4

예를 들어, 인덱스가 C-contiguous 배열 순서에 대해 다음 반환 numpy.ndenumerate 사용 :numpy.ndenumerate는 포트란 순서로 인덱스를 반환합니까?

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 

아니오 메이 a에서 order'F' 또는 '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

:

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

np.nditer 내부의 일부를 드러내는 매우 강력한 짐승입니다. 파이썬의 C 반복자는 문서에서 Iterating Over Arrays을 살펴보기 바란다.

+0

죄송합니다. 루프 안에 it.iternext()를 추가하면 반복이 진행됩니다 ... – Jaime

+0

'item for it'도 효과가 있다고 생각합니다. 왜 문서가 반복자를 향상시키는이 독특한 방법을 선택했는지 분명하지 않습니다. 너? – unutbu

+0

단서가 아닙니다. 오늘까지 파이썬에서'nditer'를 사용하려고 시도한 적이 없다고 생각합니다 ... – Jaime

3

은 그냥 전치 당신이 원하는 당신을 줄 것이다 복용 :

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

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

결과 :

다음과 같이 np.nditer와 함께 할 수
0 0 11 
1 0 21 
2 0 31 
0 1 12 
1 1 22 
2 1 32 
+1

예, 이것은 확실히 좋습니다 :) – unutbu

+0

@Akavall Great catch! –

관련 문제