我有一个矩阵
A = [[ 1. 1.]
[ 1. 1.]]
和两个数组(a
和b
),每个数组包含 20 个浮点数我如何乘以使用公式:
( x' = A * ( x )
y' ) y
它是否正确?m = A * [a, b]
我有一个矩阵
A = [[ 1. 1.]
[ 1. 1.]]
和两个数组(a
和b
),每个数组包含 20 个浮点数我如何乘以使用公式:
( x' = A * ( x )
y' ) y
它是否正确?m = A * [a, b]
NumPy 数组的矩阵乘法可以用np.dot完成。如果X
具有形状 (i,j) 且Y
具有形状 (j,k),np.dot(X,Y)
则将是矩阵乘积并具有形状 (i,k)。的最后一个轴X
和倒数第二个轴Y
相乘并相加。
现在,如果a
和b
有 shape (20,)
,则np.vstack([a,b])
有 shape (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
为a (而不是创建matrix
的plain ),则可以使用运算符完成矩阵乘法。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)