据我所知,点积可以通过以下方式找到:
>>> 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'
>>>
如何解决这个问题?
答案 0 :(得分:3)
我认为这里的问题是你要做的事情在数学上没有明确定义。你觉得这个怎么样?正确的输出应该是什么?
您的vector3
和vector4
实际上是2 by 3
格式的矩阵。这些不是坐标向量。您不能将点积应用于它们。您可以将点积运算应用于vector1
和vector2
,因为它们的格式为1 by n
:它们是列向量。您不能将点积应用于任何不是列向量的东西。
答案 1 :(得分: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)]
您收到该错误是因为您尝试将*
运算符应用于两个未定义的元组。