Ich habe zwei Numpy-Arrays x
mit Form (m, i)
und y
mit Form (m, j)
(also die Anzahl der Zeilen ist die gleiche). Ich möchte jede Spalte von x
mit jeder Spalte von y
elementweise so multiplizieren, dass das Ergebnis die Form (m, i*j)
hat.Multiplizieren Sie jede Spalte von 2D-Array mit jeder Spalte von einem anderen 2D-Array
Beispiel:
import numpy as np
np.random.seed(1)
x = np.random.randint(0, 2, (10, 3))
y = np.random.randint(0, 2, (10, 2))
Dies erstellt die folgenden zwei Arrays x
:
array([[1, 1, 0],
[0, 1, 1],
[1, 1, 1],
[0, 0, 1],
[0, 1, 1],
[0, 0, 1],
[0, 0, 0],
[1, 0, 0],
[1, 0, 0],
[0, 1, 0]])
und y
:
array([[0, 0],
[1, 1],
[1, 1],
[1, 0],
[0, 0],
[1, 1],
[1, 1],
[1, 1],
[0, 1],
[1, 0]])
Jetzt sollte das Ergebnis sein:
array([[0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1],
[0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 1],
[0, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0]])
Derzeit ich diesen Vorgang mit zwei verschachtelten Schleifen über den Spalten von x
und y
implementiert haben:
def _mult(x, y):
r = []
for xc in x.T:
for yc in y.T:
r.append(xc * yc)
return np.array(r).T
Aber ich bin ziemlich sicher, dass es eine elegantere Lösung sein, dass ich Es scheint nicht so zu sein.
"komplizierter" Hack aber sehr prägnant! +1 –
können Sie hier eine Erklärung hinzufügen? es ist knapp aber nicht erklärend. – kmario23
@ kmario23 Eine Erklärung hinzugefügt, schau es dir an! – Divakar