3

我有一个矩阵

A = [[ 1.  1.]
    [ 1.  1.]]

和两个数组(ab),每个数组包含 20 个浮点数我如何乘以使用公式:

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

它是否正确?m = A * [a, b]

4

1 回答 1

4

NumPy 数组的矩阵乘法可以用np.dot完成。如果X具有形状 (i,j) 且Y具有形状 (j,k),np.dot(X,Y)则将是矩阵乘积并具有形状 (i,k)。的最后一个轴X和倒数第二个轴Y相乘并相加。

现在,如果ab有 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 ),则可以使用运算符完成矩阵乘法。ndarraynp.array(...)*

我在下面展示了两种方式(A作为一个普通的ndarrayA2作为一个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)
于 2013-09-18T20:45:42.143 回答