Angenommen, ich habe ein numpy-Array:
data = np.array([[1,1,1],[2,2,2],[3,3,3]])
und ich habe einen entsprechenden "Vektor":
vector = np.array([1,2,3])
Wie arbeite ich data
entlang jeder Zeile, um entweder zu subtrahieren oder zu dividieren, so dass das Ergebnis ist:
sub_result = [[0,0,0], [0,0,0], [0,0,0]]
div_result = [[1,1,1], [1,1,1], [1,1,1]]
Lange Rede, kurzer Sinn: Wie führe ich eine Operation für jede Zeile eines 2D-Arrays mit einem 1D-Array von Skalaren durch, die jeder Zeile entsprechen?
None
funktioniert immer noch gleichwertig mitnp.newaxis
. Ich bin nicht sicher, was Ihr Setup ist oder welches Problem Sie genau haben, aber die Antwort ist immer noch gültig.Wie bereits erwähnt, ist das Schneiden mit
None
oder mitnp.newaxes
eine großartige Möglichkeit, dies zu tun. Eine andere Alternative ist die Verwendung von Transponierungen und Rundfunk wie inund
Für höherdimensionale Arrays können Sie die
swapaxes
Methode der NumPy-Arrays oder die NumPy-rollaxis
Funktion verwenden. Es gibt wirklich viele Möglichkeiten, dies zu tun.Eine ausführlichere Erklärung des Rundfunks finden Sie unter http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
quelle
Die Lösung von JoshAdel verwendet np.newaxis, um eine Dimension hinzuzufügen. Eine Alternative besteht darin, reshape () zu verwenden, um die Dimensionen zur Vorbereitung der Übertragung auszurichten .
Durch Ausführen der Umformung () können die Dimensionen für die Übertragung ausgerichtet werden:
Beachten Sie, dass dies
data/vector
in Ordnung ist, aber Sie nicht die gewünschte Antwort erhalten. Es teilt jede Spalte vonarray
(anstelle jeder Zeile ) durch jedes entsprechende Element vonvector
. Es ist das, was Sie bekommen würden, wenn Sie explizit umgestalten würdenvector
,1x3
anstatt zu sein3x1
.quelle
Der pythonische Weg, dies zu tun, ist ...
Dies sorgt für die Umformung und auch die Ergebnisse sind im Gleitkommaformat. In anderen Antworten liegen die Ergebnisse im gerundeten Ganzzahlformat vor.
#HINWEIS: Die Anzahl der Spalten in Daten und Vektor sollte übereinstimmen
quelle
Hinzufügen zur Antwort von stackoverflowuser2010, im allgemeinen Fall können Sie nur verwenden
Dies verwandelt Ihren Vektor in einen
column matrix/vector
. So können Sie die elementweisen Operationen nach Ihren Wünschen ausführen. Zumindest für mich ist dies der intuitivste Weg, und da (in den meisten Fällen) numpy nur eine Ansicht desselben internen Speichers für die Umformung verwendet, ist dies auch effizient.quelle
.reshape(-1,1)
ist die intuitivste Methode zur Verwendung von Broadcasting.