2016-04-13 7 views
1

ich mich, wenn es mit einem ohne Iterieren for-Schleife möglich ist, so etwas zu tun:Unterschiedliche Ausgangsindizes für Scheiben in NumPy

a = np.array([[1, 2, 5, 3, 4], 
       [4, 5, 6, 7, 8]]) 

cleaver = np.argmax(a == 5, axis=1) # np.array([2, 1]) 

foo(a, cleaver) 

>>> np.array([False, False, True, True, True], 
      [False, True, True, True, True]) 

Gibt es eine Möglichkeit, dies durch Aufschneiden zu erreichen oder eine andere nicht- iterative Funktion? Die Arrays, die ich verwende, sind ziemlich groß, und das Iterieren über sie ist Zeile für Zeile unerschwinglich teuer.

cleaver[:,None] <= np.arange(a.shape[1]) 

Probelauf - -

Antwort

2

können Sie einige broadcastingMagie verwenden

In [60]: a 
Out[60]: 
array([[1, 2, 5, 3, 4], 
     [4, 5, 6, 7, 8]]) 

In [61]: cleaver 
Out[61]: array([2, 1]) 

In [62]: cleaver[:,None] <= np.arange(a.shape[1]) 
Out[62]: 
array([[False, False, True, True, True], 
     [False, True, True, True, True]], dtype=bool) 
Verwandte Themen