【问题标题】:numpy.dot(a, b) gives wrong result on multiplication of matrices with similar dimenstionsnumpy.dot(a, b) 在具有相似维度的矩阵相乘时给出错误的结果
【发布时间】:2015-03-11 09:58:04
【问题描述】:

令矩阵 a, b 为 [ 1, 2, 3, 4 ],即 (1 x 4) 维。
应用 numpy.dot(a, b) 结果是 30 而不是引发两个矩阵形状未对齐的异常。
(m x n) 矩阵如何与 (m x n) 矩阵相乘? numpy 会自动转置一个矩阵以对齐它们的形状然后相乘吗?

【问题讨论】:

  • dot product 与矩阵乘法不同。
  • 检查ab的形状属性,它们很可能是一维的((4,)而不是(1,4))。在这种情况下,dot 计算两个向量之间的点积,得到一个标量输出 30。
  • 问题解决了,开始学习 numpy 和混淆 python 列表与 numpy 数组。使用 numpy 数组按预期工作。

标签: python numpy matrix matrix-multiplication


【解决方案1】:
In [59]: a = b = np.matrix([1,2,3,4])

In [60]: np.dot(a.T, b)      # 1
Out[60]: 
matrix([[ 1,  2,  3,  4],
        [ 2,  4,  6,  8],
        [ 3,  6,  9, 12],
        [ 4,  8, 12, 16]])

In [63]: np.dot(a, b.T)      # 2
Out[63]: matrix([[30]])

In [64]: np.dot(a, b)        # 3
ValueError: shapes (1,4) and (1,4) not aligned: 4 (dim 1) != 1 (dim 0)

更一般地,如果X 的形状为(m, n) 并且Y 的形状为(n, p),那么np.dot(X,Y) 返回一个形状为(m, p) 的数组,它是矩阵的结果 乘法。

  1. 由于a.T的形状为(4, 1)b的形状为(1, 4),矩阵相乘的结果是一个形状为(4, 4)的数组。

  2. 由于a的形状为(1, 4),而b.T的形状为(4, 1),矩阵相乘的结果是一个形状为(1, 1)的数组。

  3. np.dot(a, b) 引发 ValueError,因为形状为 (1, 4)(1, 4) 的数组不能进行矩阵相乘。 NumPy 不会自动转置坐标轴。

【讨论】:

  • 刚开始学习 numpy,对 python 列表和 numpy 数组感到困惑,两者有很大的不同。使用 numpy 数组按预期工作。
猜你喜欢
  • 2014-11-29
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多