2012-03-30 13 views
6

La multiplicación de dos vectores por elementos no es problema si ambas tienen la misma forma, por ejemplo, tanto (n, 1) como ambas (n,). Sin embargo, si un vector tiene forma (n, 1) y el otro (n), el operador * devuelve algo gracioso.Numpy: ¿Cómo se multiplican por elementos dos vectores, la forma (n, 1) y (n,)?

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

El nxn-matriz resultante contiene A_ {i, j} = a_i * b_j.

¿Cómo puedo hacer la multiplicación por elementos para a y b?

Respuesta

15

Slice los vectores en una manera que hace que su partido forma:

a[:, 0] * b 

o

a * b[:, None] 
+2

'a.reshape (-1) * b' o' un b.reshape * ((- 1 , 1)) 'es otra forma de hacer básicamente lo mismo. ('-1 'significa" tantos como que se ajuste a esta forma. ") – Dougal

4

Añadir un segundo eje para b a que a y b tener las mismas dimensiones:

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

Alternativamente, transponer a por lo que la difusión de obras:

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

(Usted probablemente querrá para transponer el resultado.)

+0

Creo que la solución' .T' es la más bonita. Requiere el menor tipeo y el menor pensamiento. –

Cuestiones relacionadas