【发布时间】:2018-03-13 15:04:55
【问题描述】:
我想计算两个 numpy 数组之间的点积。 例如,我的数组的形状为 (3,) 和 (1,),所以从基本的数学理解来看,我应该是一个形状为 (3,1) 的向量。但是使用 numpy dot 不会得到这样的结果。一般来说,我的输入将具有 (x,n) 和 (n,x) 的大小,如果 x=1,我想获得形状 (x,x) 或标量。
【问题讨论】:
标签: numpy dot-product
我想计算两个 numpy 数组之间的点积。 例如,我的数组的形状为 (3,) 和 (1,),所以从基本的数学理解来看,我应该是一个形状为 (3,1) 的向量。但是使用 numpy dot 不会得到这样的结果。一般来说,我的输入将具有 (x,n) 和 (n,x) 的大小,如果 x=1,我想获得形状 (x,x) 或标量。
【问题讨论】:
标签: numpy dot-product
这里唯一真正的问题是您使用大小为(3,) 和(1,) 的数组,但您应该使用(3,1) 和(1,1)。有了它,它的行为就完全按照你的意愿/期望:
>>> np.dot([3, 2, 1], [1])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: shapes (3,) and (1,) not aligned: 3 (dim 0) != 1 (dim 0)
>>> np.dot([[3], [2], [1]], [[1]])
array([[3],
[2],
[1]])
对于(x, n) 和(n, x) 形状:
>>> x = 5
>>> n = 4
>>> A = np.ones((x, n))
>>> B = np.ones((n, x))
>>> A.dot(B)
array([[ 4., 4., 4., 4., 4.],
[ 4., 4., 4., 4., 4.],
[ 4., 4., 4., 4., 4.],
[ 4., 4., 4., 4., 4.],
[ 4., 4., 4., 4., 4.]])
>>> A.dot(B).shape
(5, 5)
再次,完全如您所愿/期望。请注意,在 numpy 中,形状为 (n,) 的数组是 零 维数组,而形状为 (n,1) 的数组是 一 维数组。一维数组对于它们的操作是必要的。
【讨论】: