2012-03-30 7 views
6

Mnożenie elementów w dwóch wektorach nie stanowi problemu, jeśli oba mają ten sam kształt, powiedzmy oba (n, 1) lub oba (n,). Jeśli jeden wektor ma kształt (n, 1) i drugi (n,), to jednak operator zwraca coś śmiesznego.Numpy: Jak elementowo mnożyć dwa wektory, kształt (n, 1) i (n)?

a = np.ones((3,1)) 
b = np.ones((3,)) 
print a * b 

Powstała macierz nxn zawiera A_ {i, j} = a_i * b_j.

Jak mogę zatem wykonać mnożenie elementowe dla a i b?

Odpowiedz

15

Pokrój wektory w sposób, który sprawia, że ​​ich kształt dopasowanie:

a[:, 0] * b 

lub

a * b[:, None] 
+2

'a.reshape (-1) * B' lub' a * b.reshape ((- 1 , 1)) 'to inny sposób na zrobienie tego samego. ("-1" oznacza "tyle, ile pasuje do tego kształtu"). – Dougal

4

dodać drugą oś do b do a i b mają takie same wymiary:

>>> a * b[:,np.newaxis] 
array([[ 1.], 
     [ 1.], 
     [ 1.]]) 

Ewentualnie przetransferuj a tak że transmisja działa:

>>> a.T * b 
array([[ 1., 1., 1.]]) 

(Wy pewnie chcą transpozycji wynik.)

+0

Myślę, że rozwiązanie '.T' jest najmilsze. Wymaga najmniejszego pisania i najmniejszego myślenia. –