计算numpy数组(3,)和(1,)的点积

时间:2017-10-02 14:13:06

标签: numpy dot-product

我想计算两个numpy数组之间的点积。 例如,我的数组的形状为(3,)和(1,),所以从基本的数学理解我应该是一个形状的矢量(3,1)。但是使用numpy dot不会得到那样的结果。一般来说,我的输入大小为(x,n)和(n,x),如果x = 1,我想获得形状(x,x)或标量。

1 个答案:

答案 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)的数组是一个维数组。单维数组对于它们的操作是必要的,其行为与您期望的一样。