首页 > 解决方案 > 为什么python中的以下简单赋值语句需要花费大量时间来执行?

问题描述

下面的代码片段需要太多时间来执行。它只包含一个简单的 for 循环和 if 循环。我很确定这不是任何性能问题,因为我的系统功能强大。有人可以告诉我为什么以及任何可能的解决方案吗?

new_dict= {}
for cnt,xx in enumerate(data):
    w = som.winner(xx)

    if w not in cluster_centers.keys():
        new_dict[w]=count
        count+=1

    dataframe['Values'].iloc[cnt]= new_dict[w]

标签: pythonpandas

解决方案


没有样本数据很难确定。我们无法确定“”需要多少时间som.winner,您需要分析(参见docs.python.org/3/library/profile.html示例)代码。我猜最贵的是

" w not in cluster_centers.keys()" 循环的一部分。

new_dict= {}
for cnt,xx in enumerate(data):
    w = som.winner(xx)

    if w not in cluster_centers:
        new_dict[w]=count
        count+=1

    dataframe['Values'].iloc[cnt]= new_dict[w]

注意,我假设 cluster_center 是一个字典。如果它是另一个任意数据结构,我建议为 O(1) 查找创建一个集合。

话虽如此,这看起来确实像是无需循环即可完成的事情。data因此,如果您可以为和提供一些相同的数据dataframe,我们可能会为您提供帮助。


推荐阅读