我想创建一个名为jaccard的函数,它可以像这样工作
def jaccard(doc1, doc2):
inter = len(np.intersect1d(doc1, doc2))
union = len(np.union1d(doc1, doc2))
jaccard = float(inter)/union
return jaccard
除了我只希望它采用一个参数并将其他参数硬编码到函数中。
我想编写一个使用硬编码参数生成此函数的函数,因为我需要将它与数千个参数一起使用。
def jaccard(doc2):
inter = len(np.intersect1d(['Work with us --- The Missing Slate Magazine'], doc2))
union = len(np.union1d(['Work with us --- The Missing Slate Magazine'], doc2))
jaccard = float(inter)/union
return jaccard
所以我想生成这样的函数。
我想要这个的原因是因为我想将它应用于Pandas DataFrame的列。数据框包含字符串列表。我想找到函数中硬编码参数的每个jaccard距离。
提前谢谢!
答案 0 :(得分:1)
您可以在python中创建闭包。例如
def jacard(doc1):
def _jacard(doc2):
inter = len(np.intersect1d(doc1, doc2))
union = len(np.union1d(doc1, doc2))
return float(inter)/union
return _jacard
然后:
prepared_func = jacard(doc1)
算账:
results = map(prepared_func, some_array_of_doc2s)
在这种情况下,使用functools进行部分参数绑定是创建绑定参数doc2的闭包的简写。
prepared_func = functools.partial(jaccard, doc1)