python - numpy.dot(a, b) 在具有相似维度的矩阵相乘时给出错误的结果

标签 python numpy matrix matrix-multiplication

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

最佳答案

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 从不自动转置坐标轴。

关于python - numpy.dot(a, b) 在具有相似维度的矩阵相乘时给出错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28983423/

相关文章:

python - 在 google app engine 上使用 python [xmlrpc frontend] 模块连接到 WordPress 博客

python - 在 Python 中创建大型随机内容文件

python - Python 中的容器列表 : standard list vs numpy array

python - 如何更改numpy数组中的像素值

python - 如何在 numpy.linalg.solve 中使用稀疏矩阵

java - 将动态二维数组插入 TableView

python - 如何在Python中去除字符串中数字和句点的组合?

python - 如何在函数之间解析 pandas 数据帧

java - 使用变换矩阵旋转多边形。图形变形

algorithm - 检查矩阵是否奇异的快速方法? (不可逆,det = 0)