2016-05-24 4 views
0

Ich möchte N 2x2 Arrays mit einem 2xN Array multiplizieren (Matrixmultiplikation).numpy dot oder einsum zum Multiplizieren von N 2x2 Arrays mit einem 2xn Array

n = np.array([1,2,3]) 
m = np.array([[n,0*n],[0*n,0*n+1]]).T 
# shape: (3, 2, 2) 
# [[[1 0] 
# [0 1]] 

# [[2 0] 
# [0 1]] 

# [[3 0] 
# [0 1]]] 

x = np.array([[1,2,3],[4,5,6]]) 
# shape: (2, 3) 
# [[1 2 3] 
# [4 5 6]] 

So sollte das Ergebnis

sein
[[1 4 9] 
[4 5 6]] 

Dieses mit einsum oder Punkt möglich sein sollte, aber ich nicht beide mit. Nach dem, was ich gelesen habe, wäre eine Lösung mit Punkt möglicherweise schneller.

bearbeiten: Um etwas mehr Kontext zu geben: Dies ist wirklich nur eine (2x2) Matrix Multiplikation auf einem 2xn Vektor. Aber es gibt n verschiedene Matrizen: Eine für jedes der n Vektorelemente.

Antwort

2

Sie können np.einsum wie folgt verwendet werden:

import numpy as np 

n = np.array([1,2,3]) 
m = np.array([[n,0*n],[0*n,0*n+1]]).T 

x = np.array([[1,2,3],[4,5,6]]) 

result = np.einsum('nij, jn->in', m, x) 

Im einsum, n ist der Index, in den drei Dimensionen liegen, i und j sind die Indizes für die Summen zwischen 2x2 Matrizen und 2-dimensionale Arrays .

result ist:

array([[1, 4, 9], 
     [4, 5, 6]]) 
+0

Dies ist 'Art' richtig. Das richtige Ergebnis ist zumindest innerhalb davon verborgen. Aber du musst es immer noch rauskriegen. Und mehr Sorge: Das macht viel mehr Multiplikationen als nötig. edit: Die erwartete Ausgabe ist in der Frage – Basti

+0

Können Sie Ihre erwartete Ausgabe schreiben? –

+0

Es ist direkt unter "So sollte das Ergebnis sein" – Basti

Verwandte Themen