Python与Numpy / Scipy与纯C ++的大数据分析
在相对较小的项目上执行Python使我明白这种语言的动态类型性质(不需要声明代码来跟踪类型),这通常会使开发过程更快,更不痛苦。 不过,我觉得在更大的项目中,这可能实际上是一个障碍,因为代码运行速度比说C ++的速度慢。 但是,再次,使用Numpy和/或Python与Scipy可能会使您的代码运行速度与原生C ++程序(C ++中的代码有时需要更长的开发时间)一样快。
在阅读Justin Peel对线程“Python比C ++更快,更轻?”的评论后,我发表了这个问题。 在那里他说道:“另外,那些谈论Python对数据处理速度慢的人并没有使用Numpy和Scipy模块,Python现在真的在科学计算中起作用,当然,速度来自于使用写入的模块C或用Fortran编写的库,但在我看来,这就是脚本语言的美妙之处。“ 或者像S. Lott在关于Python的同一主题上写道:“...因为它为我管理内存,所以我不必进行任何内存管理,节省了追查核心泄漏的时间。” 我还检查了关于“Benchmarking(使用BLAS的python与c ++)和(numpy)”的JF Sebastian写道的“Python / Numpy / C ++相关的性能问题”......我的机器上C ++和numpy没有区别。
这两个线程让我想知道是否有任何真正的优势被赋予认识C ++的Python程序员使用Numpy / Scipy来生成软件来分析性能显然非常重要的“大数据”(但也包括代码可读性和开发速度是必须的)?
注意:我对处理大量文本文件特别感兴趣。 文本文件大小为100K-800K,包含多列,其中Python可能需要5分钟才能分析“仅”200K行文件。
首先,如果大部分“工作”来自处理大量文本文件,那么通常意味着无论编程语言如何,唯一有意义的速度瓶颈是您的磁盘I / O速度。
至于核心问题,“回答”可能过于富有意见,但我至少可以给你我自己的经验。 我一直在写Python来做大数据处理(天气和环境数据)多年。 由于语言,我从未遇到过重大的性能问题。
开发人员(包括我自己)往往忘记的是,一旦进程运行得足够快,浪费公司资源花时间让其运行得更快。 Python(使用像pandas
/ scipy
这样成熟的工具)的运行速度足以满足需求,并且开发速度很快,所以对于我的钱来说,它是“大数据”处理的完美接受语言。
简单的答案是,对于简单的问题,那么应该没有太大的区别。 如果你想做任何复杂的事情,那么你很快就会遇到明显的性能差异。
作为一个简单的例子,尝试添加三个向量
a = b + c + d
在Python中,据我所知,这通常会将b
添加到c
,将结果添加到d
,然后指出最终结果。 这些操作中的每一个操作都可以很快,因为它们只是被用于BLAS库。 但是,如果向量很大,则中间结果不能存储在缓存中。 将该中间结果移至主内存很慢。
您可以使用valarray在C ++中执行相同的操作,并且速度相当慢。 但是,您也可以做其他事情
for(int i=0; i<N; ++i)
a[i] = b[i] + c[i] + d[i]
这消除了中间结果,并使代码对主内存的速度不太敏感。
在python中做同样的事情是可能的,但python的循环结构不是那么高效。 他们执行界限检查等很好的事情,但有时在安全分离时运行速度更快。 例如,Java会执行大量的工作来删除边界检查。 所以如果你有一个足够聪明的编译器/ JIT,python的循环可能会很快。 实际上,这还没有解决。
Python肯定会节省你的开发时间,它为你提供了灵活性,如果你只是在这里比较两种语言,虽然它仍然无法与C / C ++的强大功能和性能相匹配,但是在这个高内存,集群,缓存和并行处理技术? C ++的另一个缺点可能是崩溃,然后用大数据进行调试和修复可能是一场噩梦。
但是,我说过我没有看到有一个地方适合所有的解决方案,没有一种编程语言包含对每个问题的解决方案(除非你是一个老的本地C开发人员,他也喜欢用C构建数据库: )必须首先确定所有问题,要求,数据类型,是否是结构化或非结构化的,需要以何种方式和顺序操作的文本文件类型,是否安排问题等......然后您需要使用一些工具集和脚本语言构建完整的应用程序堆栈。 就像你总是可以在硬件上投入更多资金,甚至购买一些昂贵的工具,如Ab Initio,它可以让你加载和解析这些大型文本文件,并处理数据,除非你真的不需要真正的高端模式匹配功能数据文件,python会与其他工具的结合就好了。 但是我没有看到一个肯定/否定的答案,在某些情况下,python可能不是最好的解决方案。
链接地址: http://www.djcxy.com/p/31527.html上一篇: Python with Numpy/Scipy vs. Pure C++ for Big Data Analysis