Oroshimaru
Oroshimaru

Reputation: 338

Numpy Matrix Multiplication with Vectors

i wanna do a simple matrix multiplication with 2 Vectors: so that A * B.T = 3x3Matrix.

But somehow numpy returns a scalar or vector.

i already tried:

np.dot(a, b.transpose())
np.matmul(a, b.transpose())
a * b.transpose()

But nothins works, it seems like a simple operation to me, but i just cannot solve it

Upvotes: 0

Views: 2960

Answers (2)

rulisastra
rulisastra

Reputation: 391

Using numpy.reshape works for me all the time. Maybe you're stumbling on it because of your matrix's size.

A should be (3,1) dan B.transpose should be (1,3).

When using numpy.dot, both matrix should have the same inner size. In your case is (1). The inner should be 1 because the inner of AxA_transpose is (3,1)x(1,3). Result will be 3x3 matrix.

Do:

A_ = np.reshape(A,(1,-1)) # array (3,1)
B_ = np.reshape(B,(1,-1))
C = np.dot(A_,B_.T) # T for transpose

Upvotes: 0

Bolat
Bolat

Reputation: 379

The reason why you are getting a scalar because you are multiplying two 1D vectors in numpy, which produces the inner product of 2 vectors. You need to reshape your vector to the shape (3,1), which turns them into a 2D shape and then you get the expected result upon performing the vector multiplication. Check the snippet below

>>> import numpy as np
>>> A = np.array([1,2,3])
>>> B = np.array([4,5,6])
>>> A.shape
(3,)
>>> B.shape
(3,)
>>> AA = A.reshape(3, 1)
>>> BB = B.reshape(3, 1)
>>> AA.shape
(3, 1)
>>> BB.shape
(3, 1)
>>> np.matmul(AA, np.transpose(BB))
array([[ 4,  5,  6],
       [ 8, 10, 12],
       [12, 15, 18]])

Upvotes: 4

Related Questions