numpy数组每个元素乘以矩阵

时间:2013-09-18 20:26:48

标签: python arrays numpy matrix matrix-multiplication

我有一个矩阵

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

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

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

这是对的吗? m = A * [a, b]

1 个答案:

答案 0 :(得分:3)

使用np.dot可以使用NumPy数组进行矩阵乘法。 如果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还有一个matrix子类ndarray(一种特殊的NumPy数组),它具有方便的语法,可以用2D数组进行矩阵乘法。如果我们将A定义为matrix(而不是ndarray创建的np.array(...)),则可以使用*进行矩阵乘法操作

我在下方展示了两种方式(A为普通ndarrayA2matrix):

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)