【发布时间】:2019-01-04 08:32:33
【问题描述】:
我们都知道向量之间的点积必须返回一个标量:
import numpy as np
a = np.array([1,2,3])
b = np.array([3,4,5])
print(a.shape) # (3,)
print(b.shape) # (3,)
a.dot(b) # 26
b.dot(a) # 26
完美。但是为什么如果我们使用“真实”(看看Difference between numpy.array shape (R, 1) and (R,))行向量或列向量,numpy 点积会在维度上返回错误?
arow = np.array([[1,2,3]])
brow = np.array([[3,4,5]])
print(arow.shape) # (1,3)
print(brow.shape) # (1,3)
arow.dot(brow) # ERROR
brow.dot(arow) # ERROR
acol = np.array([[1,2,3]]).reshape(3,1)
bcol = np.array([[3,4,5]]).reshape(3,1)
print(acol.shape) # (3,1)
print(bcol.shape) # (3,1)
acol.dot(bcol) # ERROR
bcol.dot(acol) # ERROR
【问题讨论】:
-
您忘记发布(或阅读?)整个错误消息。它会告诉您它尝试匹配的维度。
dot尽管名称是矩阵产品。文档清楚地表明,一维数组的处理是一种特殊情况。 -
如果
a和b不是1d,则dot是:“a的最后一个轴和b的倒数第二个轴的和积”。 (3,1) 可以与 (1,3) 一起使用,但不能与 (3,1) 一起使用。
标签: python numpy dot-product