在Python中计算两个numpy行数组(向量)的点积给出了一个形状向量

时间:2016-02-05 07:54:31

标签: python numpy matrix

当你试图调用两个行向量的点积时,我试图理解numpy是如何工作的。

我有这段代码:

X = np.array([[1,2,3]])
THETA = np.array([[1,2,3]])
print X.dot(THETA)

这给了我错误:

ValueError: shapes (1,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)

我认为你可以把两行向量的点积得到:

x1*theta1 + x2*theta2 + x3*theta3

这也将转移到两个列向量的点积。

奇怪的是,我必须采用第二个矩阵的转置才能实际使用点积:

print X.dot(THETA.T)
array([[14]])

然而,我并不认为这实际上会起作用,为什么它会起作用而不是仅仅进行行点行操作。任何人都可以帮助我理解发生了什么吗?在很久以前我忘记了线性代数中的一些规则吗?

2 个答案:

答案 0 :(得分:1)

对于2D输入,

dot是矩阵乘法,而不是点积。您所看到的只是矩阵乘法的正常规则的结果。如果你想要一个矢量点积,最简单的方法是使用1D向量,没有多余的第二维:

X = np.array([1, 2, 3])
THETA = np.array([1, 2, 3])
print X.dot(THETA)

dot - 两个1D数组采用点积并产生标量结果。

如果你想使用行和列向量,那么按照矩阵乘法的标准规则,你需要将1乘N的数组(行向量)乘以N×1数组(列向量) )得到一个1比1的结果,NumPy会给你一个1比1的数组而不是标量。

答案 1 :(得分:0)

您看到的对齐错误是因为您试图将1D向量表示为2D数组。

In [1]: import numpy as np

In [2]: X = np.array([1,2,3])

In [3]: THETA = np.array([1,2,3])

In [4]: print X.dot(THETA)
14

In [5]: print X.dot(THETA.T)
14

x1*theta1 + x2*theta2 + x3*theta3 =
1*1 + 2*2 + 3*3 =
14