寻找快速加速我的代码的方法

 幼儿之家燕郊_880 发布于 2023-02-08 20:15

我正在寻找一种加速我的代码的方法.我设法加快了代码的大部分时间,将运行时间减少到大约10个小时,但它仍然不够快,因为我已经没时间了,我正在寻找一种快速优化代码的方法.

一个例子:

text = pd.read_csv(os.path.join(dir,"text.csv"),chunksize = 5000)
new_text = [np.array(chunk)[:,2] for chunk in text]
new_text = list(itertools.chain.from_iterable(new_text))

在上面的代码中,我以大块的形式阅读了大约600万行文本文档并将它们展平.此代码大约需要3-4个小时才能执行.这是我的计划的主要瓶颈.编辑:我意识到我不太清楚主要问题是什么,扁平化是占用大部分时间的部分.

我程序的这部分也需要很长时间:

    train_dict = dict(izip(text,labels))
    result = [train_dict[test[sample]] if test[sample] in train_dict else predictions[sample] for sample in xrange(len(predictions))]

上面的代码首先使用相应的标签来压缩文本文档(这是一个机器学习任务,train_dict是训练集).在程序的早期,我在测试集上生成了预测.我的火车和测试装置之间有重复,所以我需要找到那些重复的.因此,我需要逐行迭代我的测试集(总共200万行),当我发现重复时我实际上不想使用预测标签,而是来自train_dict中副本的标签.我将此迭代的结果分配给上面代码中的变量result.

我听说python中有各种库可以加速部分代码,但我不知道哪些可以完成这项工作并且知道我没有时间去研究这个,这就是为什么我需要有人来指出我正确的方向.有没有办法可以加快上面的代码片段?

EDIT2

我再次调查过.这肯定是一个记忆问题.我尝试逐行读取文件,一段时间后速度急剧下降,此外我的ram使用率接近100%,而python的磁盘使用量急剧增加.如何减少内存占用?或者我应该找到一种方法来确保我不把所有东西都记在内存中?

edit3 由于记忆是我的问题的主要问题,我将概述我的程序的一部分.我暂时放弃了预测,这大大降低了程序的复杂性,而是在我的测试集中为每个非重复插入标准样本.

import numpy as np
import pandas as pd
import itertools
import os

train = pd.read_csv(os.path.join(dir,"Train.csv"),chunksize = 5000)
train_2 = pd.read_csv(os.path.join(dir,"Train.csv"),chunksize = 5000)
test = pd.read_csv(os.path.join(dir,"Test.csv"), chunksize = 80000)
sample = list(np.array(pd.read_csv(os.path.join(dir,"Samples.csv"))[:,2]))#this file is only 70mb
sample = sample[1]
test_set = [np.array(chunk)[:,2] for chunk in test]
test_set = list(itertools.chain.from_iterable(test_set))

train_set = [np.array(chunk)[:,2] for chunk in train]
train_set = list(itertools.chain.from_iterable(train_set))
labels = [np.array(chunk)[:,3] for chunk in train_2]
labels = list(itertools.chain.from_iterable(labels))

"""zipping train and labels"""
train_dict = dict(izip(train,labels))
"""finding duplicates"""
results = [train_dict[test[item]] if test[item] in train_dict else sample for item in xrange(len(test))]

虽然这不是我的整个程序,但这是我的代码中需要优化的部分.正如你所看到的,我只使用了这个部分中的三个重要模块,pandas,numpy和itertools.展平train_set和test_set时会出现内存问题.我唯一要做的就是读取文件,获取必要的部分,用字典中的相应标签压缩列车文档.然后搜索重复项.

编辑4 根据要求,我将解释我的数据集.我的Train.csv包含4列.第一列包含每个样本的ID,第二列包含标题,第三列包含文本正文样本(从100-700个单词变化).第四列包含类别标签.Test.csv仅包含ID和文本正文和标题.列以逗号分隔.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有