我想计算两个numpy数组之间的点积。 例如,我的数组的形状为(3,)和(1,),所以从基本的数学理解我应该是一个形状的矢量(3,1)。但是使用numpy dot不会得到那样的结果。一般来说,我的输入大小为(x,n)和(n,x),如果x = 1,我想获得形状(x,x)或标量。
答案 0 :(得分:0)
这里唯一真正的问题是您使用的是(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)
的数组是一个维数组。单维数组对于它们的操作是必要的,其行为与您期望的一样。