1

我了解可以通过以下方式找到点积:

>>> vector1 = (2,3,5)
>>> vector2 = (3,4,6)
>>> sum(p*q for p,q in zip(vector1, vector2))
48

但我试图找到一个元组的点积说:

>>> vector3 = ((2,2),(3,3),(5,5))
>>> vector4 = ((3,3),(4,4),(6,6))

如何在不使用 numpy.

我不能只使用一些语句sum(p*q for p,q in zip(vector3, vector4))吗?

因为当我尝试相同时,我收到如下错误:

>>> vector3 = ((2,2),(3,3),(5,5))
>>> vector4 = ((3,3),(4,4),(6,6))
>>> sum(p*q for p,q in zip(vector3, vector4))

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    sum(p*q for p,q in zip(vector1, vector2))
  File "<pyshell#5>", line 1, in <genexpr>
    sum(p*q for p,q in zip(vector3, vector4))
TypeError: can't multiply sequence by non-int of type 'tuple'
>>> 

如何解决这个问题?

4

2 回答 2

3

我认为这里的问题是您尝试做的事情在数学上没有明确定义。你希望这如何工作?正确的输出应该是什么?

vector3vector4真的是 form 矩阵2 by 3。这些不是坐标向量。您不能对它们应用点积。您可以将点积运算应用于vector1并且vector2因为它们的形式是1 by n:它们是列向量。您不能将点积应用于不是列向量的任何内容。

于 2014-10-21T20:31:00.407 回答
1

如果您正在考虑vector3并且vector4本质上是向量列表,您可以这样做:

(sum(p * q for p, q in zip(a, b)) for a, b in zip(vector3, vector4))

如果您想要一个点积值列表,您可以强制将上述生成器对象评估到一个列表中,或者使用列表推导来代替:

# Evaluate into list
list(sum(p * q for p, q in zip(a, b)) for a, b in zip(vector3, vector4))

# List comprehension
[sum(p * q for p, q in zip(a, b)) for a, b in zip(vector3, vector4)]

您收到该错误是因为您试图将*运算符应用于两个未定义的元组。

于 2014-10-21T20:31:21.083 回答