2011-05-10 5 views
2

J'ai un problème avec la multiplication de la matrice:Python Matrix multiplication; tableau numpy

Je veux multiplicate par exemple a et b:

a=array([1,3])      # a is random and is array!!! (I have no impact on that) 
            # there is a just for example what I want to do... 

b=[[[1], [2]],      #b is also random but always size(b)= even 
    [[3], [2]], 
    [[4], [6]], 
    [[2], [3]]] 

donc ce que je veux est multiplicate de cette façon

[1,3]*[1;2]=7 
[1,3]*[3;2]=9 
[1,3]*[4;6]=22 
[1,3]*[2;3]=11 

Alors résulter ce que j'ai besoin de regarder:

x1=[7,9] 
x2=[22,8] 

Je sais est très compliqué, mais je tente 2 heures pour mettre en œuvre cela, mais sans succès :(

+2

qui ne ressemble pas beaucoup à la multiplication de la matrice pour me –

+0

Je ne suis pas très bon en anglais, désolé pour une mauvaise utilisation, mais je pense c'est clair ce que je veux faire ... Merci beaucoup – thaking

+0

Il y a une erreur dans votre exemple - la dernière entrée ne devrait-elle pas être [1,3] * [2,3] = 11? – talonmies

Répondre

3

Que diriez-vous ceci:

In [16]: a 
Out[16]: array([1, 3]) 

In [17]: b 
Out[17]: 
array([[1, 2], 
     [3, 2], 
     [4, 6], 
     [2, 3]]) 

In [18]: np.array([np.dot(a,row) for row in b]).reshape(-1,2) 
Out[18]: 
array([[ 7, 9], 
     [22, 11]]) 
+5

Solution compliquée inutile, pourquoi ne pas simplement 'point (b, a)' ?. Merci – eat

-1
result = \ 
[[sum(reduce(lambda x,y:x[0]*y[0]+x[1]*y[1],(a,[b1 for b1 in row]))) \ 
    for row in b][i:i+2] \ 
    for i in range(0, len(b),2)] 
7

Votre b semblent avoir une dimension inutile.

Avec une bonne b vous pouvez simplement utiliser dot(.), comme:

In []: a 
Out[]: array([1, 3]) 
In []: b 
Out[]: 
array([[1, 2], 
     [3, 2], 
     [4, 6], 
     [2, 3]]) 
In []: dot(b, a).reshape((2, -1)) 
Out[]: 
array([[ 7, 9], 
     [22, 11]]) 
Questions connexes