You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python版IDF计算远慢于PySpark?求性能优化方案

IDF计算性能优化问题与解决方案

我在计算IDF值时,发现自行编写的Python代码运行速度远慢于PySpark实现——我的代码需2小时以上,PySpark仅需数秒。我知道PySpark基于Java,但性能差异似乎远超Python与Java的语言本身差距。

我的实现函数如下:

import math
from tqdm import tqdm

def calc_idf(data, terms):
    # data is a list of lists filled with tokenized data
    # terms is a list of the tokens to calculate IDF values
    num_docs = len(data)

    idf_values = []
    for term in tqdm(terms, desc="IDF", position=0, leave=True):
        idf_val = 0
        for doc in data:
            if term in doc:
                idf_val += 1
        idf_values.append(math.log2((num_docs+1)/(idf_val+1))) # Using base 2 as original paper did

    return idf_values

我使用的IDF定义来自Spark官方文档,现寻求提升该IDF计算代码速度的建议。

编辑1:正如Jerome评论中提到的,data中的每个doc确实是列表。将doc转换为set后,速度提升了约68倍!感谢建议!

编辑2:我意识到将列表转为set不可行,因为set无法存储重复值,因此必须使用multiset包中的Multiset。


内容的提问来源于stack exchange,提问作者Caden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 03:59:55