numpy.tensordot
Verfasst: Donnerstag 18. Oktober 2012, 13:36
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:
mit np.shape(M)=(2, 2, 2, 2)
und ein Array v:
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:
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?
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))]])
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]])
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) 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?