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]
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With