2017-02-09 1 views
3

Gibt es eine Möglichkeit zu vermeiden, eine zweite for Schleife für einen Vorgang wie folgt zu verwenden? OderVermeiden Sie Numpy Index For Schleife

for x in range(Size_1): 
    for y in range(Size_2): 
     k[x,y] = np.sqrt(x+y) - y 

gibt es einen besseren Weg, dies zu optimieren? Im Moment ist es unglaublich langsam für große Größen.

+0

Mögliche Duplikat von [ Beschleunigen Sie die nupte verschachtelte Schleife] (http://stackoverflow.com/questions/23565573/speed-up-numpy-nested-loop) – pinkfloydx33

Antwort

2

Hier ist eine vektorisiert Lösung mit broadcasting -

X,Y = np.ogrid[:Size_1,:Size_2] 
k_out = np.sqrt(X+Y) - Y 
0

Ergänzung von Divakar Lösung: Wenn Y und X sind nicht neu Bereiche aber einige bereits existierende Vektoren von Zahlen, verwenden np.ix_:

Y, X = np.array([[1.3, 3.5, 2], [2.0, -1, 1]]) 
Y, X = np.ix_(Y, X) # does the same as Y = Y[:, None]; X = X[None, :] 
out = np.sqrt(Y+X) - X