来源:新智元

本文约2600字,建议阅读8分钟

本文介绍了仅需3行代码,将Python数据处理速度提升2~6倍的简单方法。

Python是所有机器学习的首选编程语言。它易于使用,并拥有许多很棒的库,可以轻松地处理数据。但是当我们需要处理大量数据时,事情就变得棘手了......

“大数据”这个词通常指的是数据集,一个数据集里的数据点如果没有数百万个,也有数十万。在这样的规模上,每个小的计算加起来,而且我们需要在编码过程的每个步骤保持效率。在考虑机器学习系统的效率时,经常被忽视的一个关键步骤就是预处理阶段,我们必须对所有数据点进行某种预处理操作。

默认情况下,Python程序使用单个CPU作为单个进程执行。大多数用于机器学习的计算机至少有2个CPU核心。这意味着,对于2个CPU内核的示例,在运行预处理时,50%或更多的计算机处理能力在默认情况下不会做任何事情!当你使用4核( Intel i5)或6核( Intel i7)时,就更浪费了。

但幸运的是,内置的Python库中有一些隐藏的功能,可以让我们充分利用所有CPU内核!感谢Python的concurrent.futures模块,只需3行代码就可以将一个普通程序转换为一个可以跨CPU核心并行处理数据的程序。

标准方法

让我们举一个简单的例子,我们在一个文件夹中有一个图像数据集; 或者我们甚至有成千上万的图像!为了节省处理时间,我们在这里使用1000张图像。我们希望在将所有图像在传输到深度神经网络之前将其大小调整为600x600。下面就是你经常在GitHub上看到的一些非常标准的Python代码。

这个程序遵循在数据处理脚本中经常看到的简单模式:

  • 首先是要处理的文件(或其他数据)列表;

  • 你可以使用for循环逐个处理每个数据片段,然后在每个循环迭代上运行预处理

让我们在一个包含1000个jpeg文件的文件夹上测试这个程序,看看运行需要多长时间:

在我的具有6个CPU核心的i7-8700k上,这个程序的运行时间是7.9864秒!对于这样的高端CPU来说,似乎有点慢。让我们看看我们可以做些什么来加快速度。

快速方式

为了理解我们希望Python如何并行处理事物,直观地思考并行处理本身是有帮助的。假设我们必须执行相同的任务,例如将钉子钉入一块木头,我们的桶中有1000个钉子。如果钉每个钉子需要1秒钟,那么1个人的话需要花1000秒完成工作。但是如果有4个人,我们会将整桶钉子平均分成4堆,然后每个人处理自己的一堆钉子。这样,只需250秒即可完成任务!

在这个包含1000张图像的任务中,也可以这样处理:

  • 将jpg文件列表分为4个较小的组。

  • 运行Python解释器的4个独立实例。

  • 让每个Python实例处理4个较小数据组中的一个。

  • 结合4个过程的结果,得到最终的结果列表。

这里最重要的部分是Python为我们处理了所有艰苦的工作。我们只是告诉它我们想要运行哪个函数,以及使用多少Python实例,然后它完成了所有其他操作!我们只需修改3行代码。

上面的代码中的:

你有多少CPU核心就启动多少Python进程,在我的例子中是6个。实际的处理代码是这样的:

executor.map()将你想要运行的函数和一个列表作为输入,列表中的每个元素都是函数的单个输入。由于我们有6个核心,我们将同时处理列表中的6个项!

再次运行程序看看:

运行时间是1.14265秒,几乎加速了6倍!

注意:产生更多Python进程并在它们之间移动数据时,会产生一些开销,因此不会总是得到这么大的速度提升。 但总的来说,加速相当显著。

是否总能大幅加速?

当你有要处理的数据列表并且要对每个数据点执行类似的计算时,使用Python并行池是一个很好的解决方案。但是,它并不总是完美的。并行池处理的数据不会以任何可预测的顺序处理。如果你需要处理的结果按特定顺序排列,那么这种方法可能不适合。

你处理的数据还必须是Python知道如何“pickle”的类型。幸运的是,这些类型很常见。以下来自Python官方文档:

  • None, True, 及 False

  • 整数,浮点数,复数

  • 字符串,字节,字节数组

  • 仅包含可选对象的元组,列表,集合和词典

  • 在模块的顶层定义的函数(使用def,而不是lambda)

  • 在模块顶层定义的内置函数

  • 在模块顶层定义的类

  • 这些类的实例,__dict__或调用__getstate __()的结果是可选择的

原文链接:

https://towardsdatascience.com/heres-how-you-can-get-a-2-6x-speed-up-on-your-data-pre-processing-with-python-847887e63be5

3行代码,Python数据预处理提速6倍!(附链接)相关推荐

  1. 3行代码,Python数据预处理提速6倍

    在 Python 中,我们可以找到原生的并行化运算指令.本文可以教你仅使用 3 行代码,大大加快数据预处理的速度. Python 是机器学习领域内的首选编程语言,它易于使用,也有很多出色的库来帮助你更 ...

  2. [Python] 数据预处理(缺失值、异常值、重复值) [相关方法参数说明、代码示例、相关概念]

    前言 系列文章目录 [Python]目录 视频及资料和课件 链接:https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234 提取码:1234 文 ...

  3. python数据处理实例-Python数据预处理实例详解

    Python----数据预处理代码实例 本文实例为大家分享了Python数据预处理的具体代码,供大家参考,具体内容如下 1.导入标准库 import numpy as np import matplo ...

  4. Python数据预处理——格式转换及抽取数据文本信息

    课程地址:https://www.imooc.com/learn/1105 1. 数据预处理简介 1.1 什么是数据预处理 数据预处理简单来说就是:将原始数据装进一个预处理的黑匣子之后,产生出高质量数 ...

  5. Python数据预处理:机器学习、人工智能通用技术(1)

    1 什么是数据预处理 数据预处理简而言之就是将原始数据装进一个预处理的黑匣子之后,产生出高质量数据用来适应相关技术或者算法模型.为了大家更明确的了解数据预处理,我们举个新闻分类的例子: 将原始的数据直 ...

  6. python数据预处理代码_Python中数据预处理(代码)

    本篇文章给大家带来的内容是关于Python中数据预处理(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助.1.导入标准库import numpy as np import matp ...

  7. python用excel数据做热力图_7行代码 Python热力图可视化分析缺失数据处理-Python 实用宝典...

    Python热力图寻找缺失数据 你有没有遇到一种情况,处理一张很大的csv表格的时候很难找到表格中每一列的缺失数据,或者说处理速度非常慢 ?当然如果你的Excel水平非常高,这个可能不会成为你的问题, ...

  8. python数据预处理的代码_【Python基础系列】常见的数据预处理方法(附代码)

    ↑↑↑点击上方蓝字,回复资料,嘿嘿,10个G的惊喜 本文简单介绍python中一些常见的数据预处理,包括数据加载.缺失值处理.异常值处理.描述性变量转换为数值型.训练集测试集划分.数据规范化. 1. ...

  9. python数据预处理 重复行统计_Python数据分析之数据预处理(数据清洗、数据合并、数据重塑、数据转换)学习笔记...

    1. 数据清洗 1.1 空值和缺失值的处理 ​空值一般表示数据未知.不适用或将在以后添加数据.缺失值是指数据集中某个或某些属性的值是不完整的. ​一般空值使用None表示,缺失值使用NaN表示 1.1 ...

最新文章

  1. Bullmind在线读书笔记软件
  2. qt插件元数据不包含一个有效的元数据_Qt5个人软件插件使用(低级API)
  3. python中home定义是什么_第48p,什么是函数?,Python中函数的定义
  4. 产品运行所需的信息检索失败_为服务业注入新活力,华北工控推出服务机器人专用计算机产品方案...
  5. linux mpeg4ip 编译,CentOS6.2下编译mpeg4ip
  6. SAP打印出库单需求
  7. Mongoose多数据库连接及实用样例
  8. 对勾函数_这16个Excel函数,帮你完成80%的数据统计工作
  9. 互联网从此没有 BAT
  10. HTML实现倒计时插件
  11. 网页播放器的使用(ckplayer)
  12. Java截取视频第一帧
  13. Vue3中如何进行页面局部刷新,组件刷新
  14. 怎么在线压缩PDF文件?常见途径说明
  15. 回归年、恒星年、太阳日、恒星日和闰秒相关知识
  16. Virtual-Network--—DHCP协议学习以及对应报文分析
  17. Indian English(印度英语)
  18. SpringBoot集成TkMapper
  19. 公式编辑器mathpix下载及使用简介
  20. [周更]4.unity3D_Roll_a_Ball

热门文章

  1. etcd数据库备份与还原
  2. 首页列表显示全部问答,完成问答详情页布局。
  3. centos安装emqtt_benchmark
  4. 深入实践Spring Boot2.3.2 文档建模
  5. 华为实习日记——第二十二天
  6. WebService相关
  7. 转载:《TypeScript 中文入门教程》 4、类
  8. C#获取当前日期时间(转)
  9. oracle logminer全解析
  10. HDUOJ-------单词数