【问题标题】:numpy array each element multiplication with matrixnumpy数组每个元素与矩阵相乘
【发布时间】:2013-09-18 20:26:48
【问题描述】:

我有一个矩阵

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

还有两个数组(ab),每个数组都包含 20 个浮点数如何使用公式相乘:

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

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

【问题讨论】:

  • a,b和(大概)xy是什么关系?例如,a 中的每个值是否都代表 xb 中的每个值都代表 y
  • a 和 b 之间没有关系。只是统一生成的数字数组。
  • 是的,a的每个值都代表x,b的每个值都代表y

标签: python arrays numpy matrix matrix-multiplication


【解决方案1】:

可以使用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 数组),它具有用于与二维数组进行矩阵乘法的便捷语法。如果我们将A 定义为matrix(而不是np.array(...) 创建的普通ndarray),则可以使用* 运算符完成矩阵乘法。

我在下面展示了两种方式(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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多