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

计算numpy数组(3,)和(1,)的点积,numpy,dot-product,Numpy,Dot Product,我想计算两个numpy数组之间的点积。 例如,我的数组的形状是3和1,所以从基本的数学理解来看,我应该是一个形状为3,1的向量。然而,使用numpy点不会得到这样的结果。一般来说,我的输入的大小是x,n和n,x,如果x=1,我希望得到形状x,x或标量。这里唯一的问题是,您使用的是大小为3和1的数组,但您应该使用3,1和1,1。因此,它的行为完全符合您的期望: >>> np.dot([3, 2, 1], [1]) Traceback (most recent call last)

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

这里唯一的问题是,您使用的是大小为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]])
再一次,完全如你所愿。请注意,在numpy中,形状为n的数组是零维数组,而形状为n的数组1是一维数组。一维数组对于它们上的操作来说是必要的,以使它们的行为符合您的预期

>>> 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)