2012-03-30 13 views
6

La moltiplicazione elementare di due vettori non è un problema se entrambi hanno la stessa forma, ad esempio entrambi (n, 1) o entrambi (n,). Se un vettore ha forma (n, 1) e l'altro (n,), tuttavia, l'operatore * restituisce qualcosa di divertente.Numpy: come moltiplicare in modo elementare due vettori, forma (n, 1) e (n,)?

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

Il risultante nxn matrice contiene A_ {i, j} = a_i * b_j.

Come posso eseguire la moltiplicazione elementare per a e b?

risposta

15

Fetta i vettori in modo da rendere la loro corrispondenza forma:

a[:, 0] * b 

o

a * b[:, None] 
+2

'a.reshape (-1) * b' o' un * b.reshape ((- 1 , 1)) 'è un altro modo di fare praticamente la stessa cosa. ('-1' significa" quanti ne fanno in forma con questa forma. ") – Dougal

4

Aggiungere un secondo asse di b a quella a e b avere le stesse dimensioni:

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

In alternativa, trasporre a in modo che la trasmissione funziona:

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

(si sarebbe probabilmente desidera trasporre il risultato.)

+0

Penso che la soluzione' .T' sia la più bella. Richiede il minimo di battitura e il minimo pensiero. –

Problemi correlati