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

时间:2015-03-11 09:58:04

标签: python numpy matrix matrix-multiplication

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

1 个答案:

答案 0 :(得分:5)

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