【问题标题】:Calculating dot product of two numpy row arrays (vectors) in Python gives a shape vector在 Python 中计算两个 numpy 行数组(向量)的点积会给出一个形状向量
【发布时间】:2016-05-15 02:54:55
【问题描述】:

当您尝试调用两个行向量的点积时,我试图了解 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]])

但是,我不认为这实际上会起作用,以及为什么它会起作用,而不是仅仅进行行点行操作。谁能帮我理解发生了什么?是不是我很久以前就忘记了的线性代数规则?

【问题讨论】:

  • 为什么将向量表示为二维数组?向量是一维的。去掉多余的括号。
  • @Will 这是为机器学习任务计算感知器决策边界的公式的一部分。我的猜测是我们必须有一个正确的形状才能进行以后的计算。然而,我看到他使用代码X.dot(THETA.T) 来计算线性响应,我很难理解他为什么要转置它。

标签: python numpy matrix


【解决方案1】:

您所看到的对齐错误是因为您尝试将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

【讨论】:

    【解决方案2】:

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

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

    dot-ting 两个一维数组采用点积并产生一个标量结果。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 2020-11-27
      • 2015-08-06
      • 1970-01-01
      相关资源
      最近更新 更多