Ich möchte eine Funktion gleichzeitig auf zwei entsprechende Elemente anwenden, ohne eine for-Schleife zu verwenden. Nehmen wir an, ich habe die folgenden zwei ndarrays x
und y
und eine Funktion foo
, die in zwei 1d-Arrays einnimmt und die beta
berechnet. Das Endergebnis ich will, ist beta00 = foo(x[0, 0],y[0])
zu berechnen, beta01 = foo(x[0, 1], y[1])
, beta10 = foo(x[1, 0],y[0])
, beta11 = foo(x[1, 1], y[1])
und ergeben ein erwartetes Ergebnis vonWenden Sie eine Funktion auf die entsprechenden Zeilen von zwei Arrays gleichzeitig an (ohne for-Schleife)
[[beta00, beta01],
[beta10, beta11]]
Ich habe in vectorize Funktion suchen und anwenden Funktion, aber immer noch keine Lösung. Könnte mir jemand dabei helfen? Vielen Dank im Voraus.
import numpy as np
x = np.array([[[0, 1, 2, 3], [0, 1, 2, 3]],
[[2,3,4,5], [2,3,4,5]]])
y = np.array([[-1, 0.2, 0.9, 2.1], [-1, 0.2, 0.9, 2.1]])
def foo(x,y):
A = np.vstack([x, np.ones(x.shape)]).T
return np.linalg.lstsq(A, y)[0][0]
Sie können Ihre foo als def foo neu definieren (x), wobei x wird ein Tupel und dann verwenden Sie map (foo, zip (x, y)) – Aquiles
Ihr Code wird klarer, wenn Sie die gemeinsame 2d Numpy Indizierung verwenden, 'a [0,0]' anstelle von 'a [0] [ 0] '. Und 'x.shape [0]' anstatt 'len (x)'. Mit anderen Worten, machen Sie es sehr klar, wo Sie 1d, 2d, etc Arrays haben. Das heißt, der Schlüssel zur echten Vektorisierung ist das Schreiben von 'foo', so dass mehrdimensionale Arrays akzeptiert werden. – hpaulj