热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何提升Python处理约1GB数据集时的运行效率?

如何提升Python处理约1GB数据集时的运行效率?本文探讨了在后端开发中使用Python处理大规模数据集的优化方法。通过分析常见的性能瓶颈,介绍了多种提高数据处理速度的技术,包括使用高效的数据结构、并行计算、内存管理和代码优化策略。此外,文章还提供了在Ubuntu环境下配置和测试这些优化方案的具体步骤,适用于从事推荐系统等领域的开发者。

后端开发|Python教程用python处理一个1G左右的数据集,运行速度非常慢,怎样优化?
python,delicious,precision,Ubuntu,recall
后端开发-Python教程
研究方向为推荐系统,最近用python在delicious数据集上实现一种简单的基于标签的推荐算法,然后计算recall和precision。在几M的小型数据集上运行时间还可以(十几秒左右),但是在较大(几百兆,1g)的数据集上运行非常慢,我等了4个小时还没有算出结果。请问一下在不对算法进行优化的基础上,采用什么样的方法可以提升程序的运行速度?
实验环境:Ubuntu 13.10, 4G, intel i3-2310M, python 2.75.回复内容:
这里面有两个原因吧:
百度指数 源码,vscode安装包打不开,ubuntu 的login,tomcat安装使用教程,PAGE生成爬虫,php面试题汇总,百度推广软件seo教程,网站蜘蛛记录器lzw
首先, 是算法的问题。复杂度不一样的算法, 在数据规模大的情况下, 运行速度差别会越来越大。你没有描述具体算法, 所以我们也不知道能怎样提升算法。不过根据我的经验, 机器学习算法慢很正常, 因为计算量非常大。很多步骤如果你参照现成一些方法的话, 基本就已经是已知的在算法复杂度和代码复杂度上做了非常好的平衡而且算法复杂度已经很不错的方法。 要想再提高的话要么就要投入大量时间做学术研究,或者大量时间编写复杂的代码。
android访问网络源码,ubuntu中pscp命令,tomcat哪个版本最好用,蚂蚁森林爬虫,php网站电视代码下载,月影seolzw
解决方法是你要自己分析你的程序, 确定每一个部分的复杂度大概是多少,找出算法的瓶颈, 然后花精力优化瓶颈上的算法。
android程序锁源码,vscode编译成功,ubuntu装monkey,tomcat设置堆栈内存,爬虫壁纸代码,php怎么学会,百度seo推广长沙,个人流量网站源码,wordpree修改模板代码lzw
第二个问题是众所周知的 python 本身速度慢的问题,python作为完全建立在解释器上的支持OO支持FP且类型dynamic的语言, 能使用的机器指令优化非常有限,一般认为比native程序慢10-100倍是正常的。

解决方法:一个快速的 work-around 是使用 JIT 编译器例如 PyPy, 速度可以提高大概几倍到10倍左右。 另外,使用一个 profile 技术找到运行时间的瓶颈, 可以把瓶颈部分用 C 重写,即可几乎达到native速度。

最后, 在这个多核和云时代, 你应该考虑多核甚至多机器了。 Python 本身又 GIL, 一个进程内不支持计算意义上的多线程, 把你的程序各个部件好好划分一下, 分解成多进程。 然后用一台机器的多个CPU同时跑, 或者仍给多台机器跑。

题主,让我来给你一些实用建议吧!
考虑拿C或C++重写.考虑并行搞,找个hadoop集群,写成mapreduce程序跑 放在hadoop上跑,更多数据都不怕.考虑升级机器,多搞点内存,然后东西尽量放在内存里搞.考虑程序优化.你得看看你程序慢在什么地方,可以按照以下步骤:首先,确信你真的需要把全部数据过一遍,如果可以通过一些糙快猛方式过滤掉无用数据,这样最好了. (比如有些明显无用的东西可以直接通过grep过滤掉,grep这种程序写的一般比你写的python程序要快好多好多好多好多)top一下,看CPU跑满了吗?单线程单进程实现?你能不能搞成多进程的?然后top看每个核都跑满了吗?没跑满的话,那你你要努力充分利用你的CPU,要让CPU跑满!看看程序,没跑满是因为IO吗?是的话IO能搞成异步的么?或IO次数太多?能不能减少IO次数?甚至只搞一次IO,比如你那1G的东西,能不能一次全搞到内存里,然后所有东西在内存里处理(这样的话貌似写成C的更方便一点)如果每个核心都跑满了,那就看看你的计算都花在什么地方,可以用hotshot等工具测一把. 可以粗略比较一下在 1/16 数据、1/8数据、1/4数据、1/2数据的情况下,hotshot的结果,看你的函数花的时间是怎么涨的.找出花时间最多的一个或几个东西(所谓瓶颈),有针对性的优化,可以事半功倍.找到问题所在之后,寻求解决方案. 如果是python带的数据结构不不合适,能不能用numpy之类的东西解决,能不能用一些数据库解决(比如需要多个进程一起往一个大字典里写,可以考虑全往一个redis里写).能不能有的地方用cython包装一个C实现. 如果是算法不够好,能不能优化算法. (这就说来话长了)试试一些奇怪的东西,比如PyPy.
单机情况下,总结起来,就是:首先减少输入数据,然后不要浪费机器资源,要让所有CPU核心跑满(多进程 & 减少/不等待IO),内存只要还够用的话,就可劲用!然后找程序最慢的地方,针对其做各种优化.

如果有多机,弄到hadoop里搞,数据再多也不怕不怕啦!

用delicious数据集即使是最naive的count(u,t)*(t,i)顺加inverse frequency都很慢吧。。。毕竟tag 和item都太多了。。。慢是正常的。。。

首先你应该确认一下你的算法复杂度,比如数据翻倍后运行时间增加多少?

正好看到这个 numfocus/python-benchmarks 路 GitHub

profile + cython

一般来说最省力且最容易大幅度提升的反而是优化算法/使用profile优化实现。
其次是使用pypy/cython。
再其次使用numpy。
最后是改用其他语言。

python 数组遍历特别慢,可以结合 cython加速

i3-2310M?实验环境居然是在入门级笔记本上,你们实验室(公司)到底是有多困难?

numpy是比较慢,矩阵运算量大可以试一下Matlab。另外可以profile一下你的程序,看看哪个环节运算时间比较长。


推荐阅读
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 随着生活节奏的加快和压力的增加,越来越多的人感到不快乐。本文探讨了现代社会中导致人们幸福感下降的各种因素,并提供了一些改善建议。 ... [详细]
  • Python中HOG图像特征提取与应用
    本文介绍如何在Python中使用HOG(Histogram of Oriented Gradients)算法进行图像特征提取,探讨其在目标检测中的应用,并详细解释实现步骤。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • 如何使用Ping命令来测试网络连接?当网卡安装和有关参数配置完成后,可以使用ping命令来测试一下网络是否连接成功。以winXP为例1、打开XP下DOS窗口具体操作是点击“开始”菜 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 解决PyCharm中安装PyTorch深度学习d2l包的问题
    本文详细介绍了如何在PyCharm中成功安装用于PyTorch深度学习的d2l包,包括环境配置、安装步骤及常见问题的解决方案。 ... [详细]
  • 2017年苹果全球开发者大会即将开幕,预计iOS将迎来重大更新,同时Siri智能音箱有望首次亮相,AI技术成为大会焦点。 ... [详细]
  • LambdaMART算法详解
    本文详细介绍了LambdaMART算法的背景、原理及其在信息检索中的应用。首先回顾了LambdaMART的发展历程,包括其前身RankNet和LambdaRank,然后深入探讨了LambdaMART如何结合梯度提升决策树(GBDT)和LambdaRank来优化排序问题。 ... [详细]
  • 在互联网信息爆炸的时代,当用户需求模糊或难以通过精确查询表达时,推荐系统成为解决信息过载的有效手段。美团作为国内领先的O2O平台,通过深入分析用户行为,运用先进的机器学习技术优化推荐算法,提升用户体验。 ... [详细]
  • 机器学习公开课备忘录(三)机器学习算法的应用与大数据集
    机器学习公开课备忘录(三)机器学习算法的应用与大数据集对应机器学习公开课第六周和第10周机器学习算法模型的选择与评价1、对于一个data,可以将data划分为trainingset、t ... [详细]
  • 支持向量机(SVM)是一种基于统计学习理论的模型,主要在VC维和结构风险最小化的理论基础上发展而来。本文将探讨几种不同的SVM方法及其优化策略,旨在提高模型的效率和适用性。 ... [详细]
  • 前端开发中的代码注释实践与规范
    本文探讨了前端开发过程中代码注释的重要性,不仅有助于个人清晰地回顾自己的编程思路,还能促进团队成员之间的有效沟通。文章将详细介绍HTML、CSS及JavaScript中的注释使用方法,并提出一套实用的注释规范。 ... [详细]
author-avatar
鱼mm不会游泳456
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有