我有一个矩阵
A = [[ 1. 1.]
[ 1. 1.]]
和两个数组(a
和b
),每个数组包含20个浮点数我如何乘以使用公式:
( x' = A * ( x )
y' ) y
这是对的吗? m = A * [a, b]
答案 0 :(得分:3)
使用np.dot可以使用NumPy数组进行矩阵乘法。
如果X
具有形状(i,j)并且Y
具有形状(j,k),则np.dot(X,Y)
将是矩阵乘积并且具有形状(i,k)。最后一个X
轴和倒数第二个轴Y
相乘并相加。
现在,如果a
和b
的形状为(20,)
,那么np.vstack([a,b])
的形状为(2, 20)
:
In [66]: np.vstack([a,b]).shape
Out[66]: (2, 20)
您可以将np.vstack([a, b])
视为2x20矩阵,第一行的值为a
,第二行的值为b
。
由于A
具有形状(2,2),我们可以执行矩阵乘法
m = np.dot(A, np.vstack([a,b]))
到达一个形状的阵列(2,20)。
m
的第一行包含x'
值,第二行包含y'
值。
NumPy还有一个matrix
子类ndarray
(一种特殊的NumPy数组),它具有方便的语法,可以用2D数组进行矩阵乘法。如果我们将A
定义为matrix
(而不是ndarray
创建的np.array(...)
),则可以使用*
进行矩阵乘法操作
我在下方展示了两种方式(A
为普通ndarray
而A2
为matrix
):
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)