使用NumPy数组进行矩阵乘法可以使用
np.dot完成。如果
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
(而不是
np.array(...)
创建的普通
ndarray
),则可以使用
*
运算符执行矩阵乘法。
下面我将展示两种方式(其中
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)
a
、b
和(可能)x
和y
之间有什么关系?例如,a
中的每个值都代表一个x
,b
中的每个值都代表一个y
吗? - unutbu