2017-11-17 2 views
4

Ich habe ein Array w (Form (3000, 100, 100)), die ich mit einem anderen Array multiplizieren will e (Form (5, 3000)), so dass das Ergebnis k hat Form (5, 5, 100, 100) undnumpy linearer Algebra auf diagonale Arrays ohne explizite Duplizierung

k[:, :, i, j] = e @ np.diag(w[:, i, j]) @ e.T 

Da w so groß ist, ist es nicht praktisch, ein super_w Array mit der Form (3000, 3000, 100, 100) zu erstellen und die Hauptdiagonale explizit aufzufüllen. Es ist auch nicht sehr effizient, über i und j zu loopen. Gibt es eine speichereffiziente Möglichkeit, dies zu tun, außer w in Stücke zu zerlegen?

Antwort