如何减少多个嵌套循环的处理时间

2024-09-28 01:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有大约40000行的文本(如tweets),我们正在根据文档项(DF-IDF)矩阵进行比较。我们的目标是建立一个简单的网络,其中两行之间有连接,如果它们之间有共同的单词/标记,至少说“k”。在

下面给出了一个非常简单的代码,通过使用twitterID读取TF-IDF的tweets:

import os
import time
import numpy as np
import csv

k = 3 # two tuples have at least three common keywords
t = []
with open('file1.csv', 'r', encoding='utf-8') as f:
    csv_reader = csv.reader(f, delimiter=',')
    for fields in csv_reader:
        t.append(fields)

for i in range(len(t)):  # Loop 1
    j = i + 1 
    while(j<len(t)):     # Loop 2   
        commonkw = 0
        for kw in range(1, 246): # Loop 3  (column 1 is ID)
            if(int(t[i][kw]) != 0 and int(t[j][kw]) != 0):  # If both have a common keyword in the Document term matrix
                commonkw += 1
        if(commonkw >=k):
            with open("file2.csv", "a", encoding='utf-8') as outputfile:
                outputwriter = csv.writer(outputfile, delimiter= ',', lineterminator='\n')
                record = [t[i][0], t[j][0],commonkw]
                outputwriter.writerow(record)
                outputfile.close()
        j += 1

问题是,假设400000;总的成对比较是n(n-1)/2
=800亿。此外,它还必须检查术语矩阵(大约300个单词/列矩阵)

加工过程有什么改进吗?在

我们尝试过熊猫分块阅读、写作和操作,但直接列表似乎效果更好。我们读过关于读元组比读字典快,但是列表呢? 另外,可以通过一些R类型的apply或iterator函数来减少循环吗?这将是一个伟大的学习。谢谢!在

数据集如下:https://github.com/kartucson/pyspark_ipython/blob/master/sample_input_loops.csv

^{pr2}$

Tags: csvinimportloopforhaveas矩阵

热门问题