我试图执行以下python notebook:
他们来到了我必须使用函数' compute_cluster_similarities'。
def compute_cluster_similarities(kwds, kwd2id, vectors, lbl2centroid):
kwd2cluster_sims = dict()
for kwd in kwds:
ix = kwd2id[kwd]
nvec = vectors[ix]
sims = []
for lbl, centroid in lbl2centroid.items():
cosine_sim = np.inner(nvec, centroid)
sims.append((lbl,cosine_sim))
sims = sorted(sims, key = lambda lbl,sim: -sim)
kwd2cluster_sims[kwd] = sims
if len(kwd2cluster_sims) % 1000 == 0:
print("%i computed out of %i" % (len(kwd2cluster_sims), len(all_kwds)))
return kwd2cluster_sims
它返回错误:
TypeError :()缺少1个必需的位置参数:' sim'
首先,我仍然试图理解lambda代码的这一部分。我了解了lambda指令的目标是什么,但无法理解这行代码的重点是什么,比如..它是否(隐含)返回2个值(sims,key)?什么是排序?
我认为这个错误是由于Python 3引起的,但即使这是在Python 2上执行的,它对我来说也没有意义。 这对我来说很困惑......我怎么能解决这个错误?并且,请给我一些关于它发生了什么的解释,而不仅仅是修复。
编辑: 我使用pdb库来调试代码,我意识到这个错误是由&sorted;(' sorted()'功能。原始错误是:
*** TypeError:'功能'对象不可迭代
我做了什么:
cosine_sim = np.inner(nvec, centroid)
sims.append((lbl,cosine_sim))
import pdb ; pdb.set_trace();
sims = sorted(sims, key = lambda lbl,sim: -sim)
他们在Pdb模式下:
(Pdb) sims, key = lambda lbl,sim: -sim
*** TypeError: 'function' object is not iterable
答案 0 :(得分:1)
key
sorted
参数中的函数是使用列表的元素获取的,因此它只接受一个参数。
如果替换:
key = lambda lbl,sim: -sim
使用:
key=lambda x: -x[1]
它应该按预期工作。
有关如何使用sorted
和key
参数的详细说明,请参阅documentation。