首页 > 解决方案 > 在python中用lambda替换嵌套的'for循环'

问题描述

我正在做一项任务,我需要检查两个数据框列之间的余弦相似度。我正在使用两个 for 循环分别遍历 data1 和 data2 的两列。

for i in range(0,len(input_df)): 
    for j in range(0,len(data1)):
        ##check similarity ratio
        similarity_score= cosine_sim(input_df['Summary'].iloc[i],data1['Summary'].iloc[j])
        print(similarity_score)

###cosine_sim() is my function that gave similarity score.

我如何使用Lambda而不是for loop嵌套循环来做到这一点需要很多时间。在检查余弦相似度后,我还在做其他操作。

标签: pythonpython-3.xpandas

解决方案


要计算两个向量(您的两列)之间的余弦相似度,您可以使用 NumPy:

import numpy as np

def cosine_similarity(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

cosine_similarity(input_df['Summary'], data1['Summary'])

但是,根据您的代码示例,您似乎想要计算列的每个元素之间的余弦相似度。所以我不完全确定以上是否是您正在寻找的。


推荐阅读