0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

将Python数据处理速度提升2~6倍的简单方法

DPVg_AI_era 来源:未知 作者:李倩 2018-10-08 10:56 次阅读

CPU核心物尽其用!本文介绍了仅需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 __()的结果是可选择的

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据处理
    +关注

    关注

    0

    文章

    595

    浏览量

    28554
  • 机器学习
    +关注

    关注

    66

    文章

    8408

    浏览量

    132567
  • python
    +关注

    关注

    56

    文章

    4792

    浏览量

    84630

原文标题:3行代码,Python数据预处理提速6倍!

文章出处:【微信号:AI_era,微信公众号:新智元】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    格式化数据存储到char数组的最简单方法是什么?

    os_printf文本格式化为 UART 输出的函数。 格式化数据存储到 char 数组的最简单方法是什么?
    发表于 07-11 08:01

    基于LabVIEW的数据处理方法

    基于LabVIEW的数据处理方法
    发表于 04-26 17:28

    Python存储数据详解

    人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。2. csv文件Python可以数据存储为CSV文件格式,我们可以用ex
    发表于 03-29 15:47

    请问连续多包数据数据传输速度超过DSP的数据处理速度怎么解决?

    RT目前在做一个项目,可能会出现连续多包数据数据传输速度超过DSP的数据处理速度,请问这种情况怎么解决?是否有现成的解决思路可以参考?
    发表于 09-30 08:05

    新库添加到Petalinux rootfs的最简单方法是什么

    嗨,新库添加到Petalinux rootfs的最简单方法是什么?1>如何预编译的库添加到rootfs,这将在petalinux-config -c rootfs中检测到2>如何
    发表于 05-22 08:32

    如何利用nodemcu及Python数据处理进行wifi的局域网远程温度测量呢

    如何利用nodemcu及Python数据处理进行wifi的局域网远程温度测量呢?
    发表于 02-15 06:58

    学习PLC的2简单方法

    学习PLC的2简单方法 有的初学者在理论上花了很多功夫,结果半年下来还是没有把PLC搞懂,其实他们只是缺少了一些PLC的实践经验,
    发表于 04-02 13:58 1628次阅读

    Python6个必备软件功能及下载方式详解

    如果你需要更快的 Python 应用程序,最简单的实现的方法就是通过 PyPy ,Python 运行时与实时(JIT)编译器。与使用普通的 Pyth
    的头像 发表于 12-01 15:48 3715次阅读

    Python数据处理代码合集免费下载

    本文档的主要内容详细介绍的是Python数据处理代码合集免费下载。
    发表于 09-20 08:00 7次下载

    测试IGBT的简单方法

    一些测试IGBT的简单方法
    的头像 发表于 06-19 10:19 1.5w次阅读

    微软推更快地安装win10的方法速度提升6

    对于那些想要快速安装Windows 10的用户来说,微软现在给出了更快捷的方法,直接让速度提升6
    的头像 发表于 02-19 14:36 1574次阅读
    微软推更快地安装win10的<b class='flag-5'>方法</b>,<b class='flag-5'>速度</b><b class='flag-5'>提升</b><b class='flag-5'>6</b><b class='flag-5'>倍</b>

    数据海量数据处理方法总结

    数据海量数据处理方法总结。
    发表于 04-26 09:16 13次下载

    LCD屏幕连接到Arduino mega的最简单方法

    电子发烧友网站提供《LCD屏幕连接到Arduino mega的最简单方法.zip》资料免费下载
    发表于 10-19 09:49 1次下载
    <b class='flag-5'>将</b>LCD屏幕连接到Arduino mega的最<b class='flag-5'>简单方法</b>

    使用Bolt构建闹钟的最简单方法

    电子发烧友网站提供《使用Bolt构建闹钟的最简单方法.zip》资料免费下载
    发表于 12-09 16:17 0次下载
    使用Bolt构建闹钟的最<b class='flag-5'>简单方法</b>

    使用蜂鸣器创建警报的最简单方法

    电子发烧友网站提供《使用蜂鸣器创建警报的最简单方法.zip》资料免费下载
    发表于 12-15 11:05 0次下载
    使用蜂鸣器创建警报的最<b class='flag-5'>简单方法</b>