2个向量的numpy.vdot返回矩阵而不是标量?

2个向量的numpy.vdot返回矩阵而不是标量?,numpy,matrix,Numpy,Matrix,给出: v1=np.matrix([[-0.40824829], [-0.81649658], [-0.40824829]]) v2=np.matrix([[ 8.94427191e-01], [ -4.47213595e-01], [ 2.77555756e-16]]) np.vdot(v2, v1) 为什么它不返回标量?您可以使用np.einsum()作为输入np.ndarray或np.matrix来获取标量: matrix([[-0.36514837]]) 如果v1和v2具

给出:

v1=np.matrix([[-0.40824829],
 [-0.81649658],
 [-0.40824829]])
v2=np.matrix([[  8.94427191e-01],
 [ -4.47213595e-01],
 [  2.77555756e-16]])
np.vdot(v2, v1)

为什么它不返回标量?

您可以使用
np.einsum()
作为输入
np.ndarray
np.matrix
来获取标量:

matrix([[-0.36514837]])

如果
v1
v2
具有相同的
形状

我看到您使用的是
np.matrix
。这是我不这么做的原因之一。抱歉,但我始终无法理解爱因斯坦的求和约定:(为什么定义为返回标量的简单点积需要如此复杂?@ihadanny我明白你的意思了……对于数组,你也可以做
(v1*v2).sum()
,我只是想给你一个既快速又适用的解决方案,也适用于
np.matrix
。在你的caso中,通过使用
result[0,0]
提取结果矩阵的第一个元素,可以很容易地检索标量
np.einsum('ij, ij', v1, v2)