numpy数组中每个元素与矩阵相乘

4
我有一个矩阵。
A = [[ 1.  1.]
    [ 1.  1.]]

给定两个包含20个浮点数的数组(ab),如何使用以下公式进行乘法:

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

这句话是否正确?m = A * [a, b]


ab和(可能)xy之间有什么关系?例如,a中的每个值都代表一个xb中的每个值都代表一个y吗? - unutbu
a和b之间没有关系,它们只是由均匀生成的数字数组。 - Bob
是的,a 的每个值都代表 x,b 的每个值都代表 y。 - Bob
1个回答

4
使用NumPy数组进行矩阵乘法可以使用np.dot完成。如果X的形状为(i,j),而Y的形状为(j,k),那么np.dot(X,Y)将是矩阵乘积,并且具有形状(i,k)。将对X的最后一个轴和Y的倒数第二个轴进行乘法和求和。
现在,如果ab的形状为(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还有一个名为matrixndarray子类(一种特殊的NumPy数组),它具有方便的语法,可用于使用2D数组进行矩阵乘法。如果我们定义Amatrix(而不是np.array(...)创建的普通ndarray),则可以使用*运算符执行矩阵乘法。
下面我将展示两种方式(其中A是普通的ndarray,而A2matrix):
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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接