【发布时间】:2019-04-26 13:39:54
【问题描述】:
我已经看了好几遍,但仍然无法理解这里似乎有什么问题。这是下面写的余弦相似度函数,也是用 2 个向量调用的地方。
def cosine_sim(v1, v2):
return (lambda x,y,z: x / sqrt(y * z))(reduce(lambda x,y: (x[0] + y[0] * y[1], x[1] + y[0]**2, x[2] + y[1]**2), izip(v1,v2),(0,0,0)))
cosine_sim(first_vector,second_vector)
错误:
TypeError Traceback(最近一次调用最后一次) 在 () ----> 1 cosine_sim(firstvector,secondvector)
in cosine_sim(v1, v2) 1 def cosine_sim(v1, v2): ----> 2 return (lambda x,y,z: x / sqrt(y * z))(reduce(lambda x,y: (x[0] + y[0] * y[1], x[ 1] + y[0]**2, x[2] + y[1]**2), izip(v1,v2),(0,0,0)))
TypeError: () 缺少 2 个必需的位置参数:'y' 和 'z'
【问题讨论】:
-
您在单个元组
(reduce(lambda x,y: (x[0] + y[0] * y[1], x[1] + y[0]**2, x[2] + y[1]**2), izip(v1,v2),(0,0,0))上调用第一个 lambda 函数lambda x,y,z: x / sqrt(y * z),因此 x 是一个 3 元素元组,y 和 z 未定义。而且,为什么这需要是一个具有多个匿名函数的单行代码??
标签: python