numpy.tensordot

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
LowDepth
User
Beiträge: 4
Registriert: Mittwoch 19. September 2012, 08:15

Hallo, ich bin gerade dabei eines meiner Programme zu optimieren und ersetze for-Schleifen sukzessive durch numpy Arithmetik. Was ich gerade machen will ist zwei Arrays miteinander multiplizieren; und zwar ein Array M:

Code: Alles auswählen

import numpy as np
M = np.array([[np.mat(np.arange(6).reshape(2, 3)), np.mat(np.arange(6, 12, 1).reshape(2, 3))],  [np.mat(np.arange(12, 18, 1).reshape(2, 3)), np.mat(np.arange(18, 24, 1).reshape(2, 3))]])
mit np.shape(M)=(2, 2, 2, 2)

und ein Array v:

Code: Alles auswählen

v = np.array([[np.mat([5, 6, 7]).T,np.mat([0, 0, 0]).T], [np.mat([0, 0, 0]).T, np.mat([7, 8, 9]).T]])
Meine konkreten Arrays haben natürlich höhere Dimension...

Mein M ist also eine 2x2 Matrix mit 2x3 Matrizen als Einträgen. Mein v dagegen ist eine 2x2 Matrix mit 3x1 Matrizen als Einträgen... die Einträge sind also Vektoren.
Ich dachte nun, ich könnten die beiden Matrizen, die ja beide von der Dimension 2x2 sind als:

Code: Alles auswählen

numpy.dot(M, v) 
multiplizieren und weil ich ihre Einträge als numpy.mat gewählt habe würde mir dann eine 2x2 Matrix mit 3x1 Einträgen ausgespuckt.

Ich hoffe es ist verständlich, was ich will. Ich will folgendes:
E = M * v
mit E_11 = M_11 * v_11 + M_12 * v_21, E_12 = M_11 * v_12 + M_12 * v_22 usw.

Wie mache ich das am besten?
Antworten