2016-08-29 1 views
0

Ich habe ein 1D-Array A = [a, b, c ...] (Länge N_A) und ein 3D-Array T Form (N_A, N_B, N_A). A soll eine diagonale Matrix von N_A nach N_A darstellen.Multiplizieren Array mit Diagonalmatrix als Vektor gespeichert

Ich möchte Kontraktionen von A mit T durchführen, ohne A zu dichten Speicher zu fördern. Insbesondere würde Ich mag

np.einsum('ij, ikl', A, T) 

und

np.einsum('ikl, lm', T, A) 

ist es möglich, zu tun, solche Dinge zu tun, während eine spärliche halten?

Hinweis Diese Frage ist ähnlich wie

dot product with diagonal matrix, without creating it full matrix

aber nicht identisch, da es mir nicht klar ist, wie ein Indexmuster zu komplizierteren verallgemeinert.

Antwort

2

np.einsum('ij, ikl', np.diag(a), t) entspricht (a * t.T).T.

np.einsum('ikl, lm', t, np.diag(a)) entspricht a * t.

(durch Versuch und Irrtum gefunden)

+0

Ein bisschen wie schwarze Magie, aber hey, es funktioniert! Vielen Dank! – AGML

Verwandte Themen