2014-01-08 22 views
7

我想要一個類似於enumerate的函數,但是在numpy數組上。Python通過numpy中的二維數組枚舉

>>> list(enumerate("hello")) 
[(0, "h"), (1, "e"), (2, "l"), (3, "l"), (4, "o")] 

>>> for x, y, element in enumerate2(numpy.array([[i for i in "egg"] for j in range(3)])): 
     print(x, y, element) 

0 0 e 
1 0 g 
2 0 g 
0 1 e 
1 1 g 
2 1 g 
0 2 e 
1 2 g 
2 2 g 

目前我使用這個功能:

def enumerate2(np_array): 
    for y, row in enumerate(np_array): 
     for x, element in enumerate(row): 
      yield (x, y, element) 

有沒有什麼更好的方法來做到這一點?例如。一個內置函數(我找不到任何),或者以某種方式更快的不同定義。

+3

可能重複(http://stackoverflow.com/questions/6967463/iterating-over-a-numpy-array),或者如果您不關心訂購:http://stackoverflow.com/questions/971678/iterating-through-a-multidimensional-array-in-python/971774#971774 – tom10

回答

13

你想np.ndenumerate

>>> for (x, y), element in np.ndenumerate(np.array([[i for i in "egg"] for j in range(3)])): 
...  print(x, y, element) 
... 
(0L, 0L, 'e') 
(0L, 1L, 'g') 
(0L, 2L, 'g') 
(1L, 0L, 'e') 
(1L, 1L, 'g') 
(1L, 2L, 'g') 
(2L, 0L, 'e') 
(2L, 1L, 'g') 
(2L, 2L, 'g') 
的[迭代一個numpy的陣列]
+0

謝謝,我會接受這一點,當n分鐘是向上。猜測我應該看看庫的其他部分,而不是數組方法,我想這更有意義。 – rlms