Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

numpy array each element multiplication with matrix

I have a matrix

A = [[ 1.  1.]
    [ 1.  1.]]

and two arrays (a and b), every array contains 20 float numbers How can I multiply the using formula:

( x'    = A * ( x )
  y' )          y   

Is this correct? m = A * [a, b]

like image 233
Bob Avatar asked Sep 06 '25 03:09

Bob


1 Answers

Matrix multiplication with NumPy arrays can be done with np.dot. If X has shape (i,j) and Y has shape (j,k) then np.dot(X,Y) will be the matrix product and have shape (i,k). The last axis of X and the second-to-last axis of Y is multiplied and summed over.

Now, if a and b have shape (20,), then np.vstack([a,b]) has shape (2, 20):

In [66]: np.vstack([a,b]).shape
Out[66]: (2, 20)

You can think of np.vstack([a, b]) as a 2x20 matrix with the values of a on the first row, and the values of b on the second row.

Since A has shape (2,2), we can perform the matrix multiplication

m = np.dot(A, np.vstack([a,b]))

to arrive at an array of shape (2, 20). The first row of m contains the x' values, the second row contains the y' values.


NumPy also has a matrix subclass of ndarray (a special kind of NumPy array) which has convenient syntax for doing matrix multiplication with 2D arrays. If we define A to be a matrix (rather than a plain ndarray which is what np.array(...) creates), then matrix multiplication can be done with the * operator.

I show both ways (with A being a plain ndarray and A2 being a matrix) below:

import numpy as np

A = np.array([[1.,1.],[1.,1.]])
A2 = np.matrix([[1.,1.],[1.,1.]])
a = np.random.random(20)
b = np.random.random(20)
c = np.vstack([a,b])

m = np.dot(A, c)
m2 = A2 * c

assert np.allclose(m, m2)
like image 172
unutbu Avatar answered Sep 07 '25 21:09

unutbu