Array elementweise Operationen
Ich habe zwei Eingabe-arrays x und y die gleiche Form. Ich muss jedes Ihrer Elemente mit passenden Indizes über eine Funktion, dann speichern Sie das Ergebnis auf diese Indizes in einem Dritten array z. Was ist die pythonic Weg, dies zu erreichen? Jetzt habe ich vier vier-Schleifen - ich bin sicher, es gibt einen einfacheren Weg.
x = [[2, 2, 2],
[2, 2, 2],
[2, 2, 2]]
y = [[3, 3, 3],
[3, 3, 3],
[3, 3, 1]]
def elementwise_function(element_1,element_2):
return (element_1 + element_2)
z = [[5, 5, 5],
[5, 5, 5],
[5, 5, 3]]
Ich bin immer verwirrt, da meine Funktion funktioniert nur auf einzelnen Daten-Paaren. Ich kann nicht einfach gehen und die x-und y-arrays an die Funktion.
- numpy-arrays element-wise standardmäßig. Das heißt, x+y=z
- Gibt es irgendeine Hoffnung, dass man die operation auf der matrix-Ebene? Zum Beispiel
z = x + y
funktioniert in deinem Beispiel oben. Vielleicht könnten Sie zeigen uns, was Ihre Funktion ist und wir Ihnen helfen können, um es arbeiten auf Matrizen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen "einfacheren Weg" zu schaffen, ist ein NumPy-aware-Funktion mit
numpy.Vektorisieren
. Ein "ufunc" ist NumPy Terminologie für eine Funktion elementweise an (siehe Dokumentation hier). Mitnumpy.vectorize
kannst du mit deiner element-by-element-Funktion erstellen Sie Ihre eigenen, ufunc, die funktioniert auf die gleiche Weise wie andere NumPy ufuncs (wie standard, neben, usw.): die ufunc akzeptieren arrays und es gelten Ihre Funktion auf jedes paar von Elementen, wird es tun-array-Form broadcasting genauso wie standard-NumPy-Funktionen, etc. Die Dokumentation Seite hat einige Beispiele, die hilfreich sein könnten.(Ich vermute, Ihr redet einfaches python -
list
, nichtnumpy.array
)Rekursion immer unser Leben leichter machen:
Verwendung:
Es funktioniert in jeder anderen Art von eindimensionalen Arrays:
Folgende Abschrift aus einem python-2.7.3-interpreter-Sitzung veranschaulicht die Verwendung von builtin-Funktion
map
um eine elementweise operation zu 2D-matrix-Elemente. (Hinweis:operator.add
entspricht derelementwise_function
angegeben in Frage, und auch das entspricht dem lambda-Ausdruck in die zweite Verwendung desapplier
.)Beachten Sie, das obige x, y wie folgt:
Wie gesagt, die Abschrift oben ist von einem python-2.7.3-interpreter-Sitzung. Wenn dieser code in python 3, es wird stattdessen die return-map-Objekten. Man kann eine Funktion wie die folgende, die zahlen sehen:
Mit dieser Funktion in Ort, ist die Aussage
gibt