2013-08-17 23 views
4

當使用numpy.ndenumerate指數返回以下爲C-contiguous排列順序,例如:numpy.ndenumerate在Fortran命令中返回索引?

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 

沒有馬瑟如果aorder'F''C',這給:

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

有任何內置的迭代器numpyndenumerate給這個(以下數組order='F'):

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

回答

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 iterator,請看文檔中的Iterating Over Arrays

+0

糟糕!剛剛在循環內添加了'it.iternext()',以使迭代前進... – Jaime

+0

我認爲''item in it''也可以。我不清楚爲什麼文檔選擇這種奇特的方式來推進迭代器。你做? – unutbu

+0

不是一個線索。直到今天,我認爲我從來沒有嘗試過在Python中使用'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 

結果:

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

是的,這絕對是更好:) – unutbu

+0

@Aavarall很棒! –