带有Numpy / Scipy和纯C++的Python进行大数据分析 - python

Improve this question

在相对较小的项目上使用Python,使我很欣赏这种语言的动态类型化性质(无需声明代码来跟踪类型),这通常使开发过程更快捷,更轻松。但是,我觉得在更大的项目中这实际上可能是一个障碍,因为代码的运行速度要比C++中的等效代码慢。但是话又说回来,将Numpy和/或Scipy与Python结合使用可使您的代码运行速度与本地C++程序一样快(在C++中,有时开发时间会更长)。

在阅读Justin Peel对线程“Is Python faster and lighter than C++?”的评论后,我发表了这个问题,他说:
“此外,那些说Python在进行严重数字运算时速度很慢的人还没有使用过Numpy和Scipy模块。如今,Python确实在科学计算中脱颖而出。当然,速度来自使用C编写的模块或编写的库在Fortran中,但是我认为这就是脚本语言的美。”就像S. Lott在Python的同一线程中写道:“...由于它为我管理内存,因此我无需进行任何内存管理,从而节省了追查核心泄漏的时间。”
我还检查了有关“Benchmarking (python vs. c++ using BLAS) and (numpy)”的Python / Numpy / C++性能问题,J.F。Sebastian在其中写道:“...在我的计算机上C++和numpy之间没有区别。”

这两个线程都让我想知道,对于使用Numpy / Scipy来生产软件来分析“大数据”的Python程序员来说,了解C++是否具有真正的优势,而性能显然非常重要(但是代码的可读性和开发能力也是如此)速度是必须的吗?

注意:我对处理大型文本文件特别感兴趣。带有多列的文本文件大约为100K-800K行,其中Python可能需要五分钟的时间来分析“仅” 200K行的文件。

参考方案

首先,如果您的“工作”大部分来自处理庞大的文本文件,则通常意味着您唯一有意义的速度瓶颈是磁盘I / O速度,而与编程语言无关。

关于核心问题,它可能太有见识而无法“回答”,但是我至少可以给您我自己的经验。多年来,我一直在编写Python来进行大数据处理(天气和环境数据)。由于该语言,我从未遇到过重大的性能问题。

开发人员(包括我自己)往往会忘记的一点是,一旦流程运行得足够快,就浪费了公司的资源,浪费时间使流程更快地运行。 Python(使用成熟的工具如 pandas / scipy )运行速度足以满足要求,并且开发速度很快,因此,以我的钱,这是“大数据”处理的一种完全可接受的语言。

在Python和C++之间传输数据而无需写入Windows和Unix文件 - python

我有预先存在的python和C ++文件,其中python文件定义了许多点,而C ++代码利用其现有库进行了所需的计算。最终产品是C ++代码写入的文件。我正在寻找一种在python中获取2000点列表的方法,将其传递给函数,然后执行所有C ++代码并输出我需要的文件。其他注意事项。这必须是可以在Linux或Windows机器上工作的东西,并且最少安装新插件…

扩展Python时可以使用C++功能吗? - c++

Python手册说您可以在C和C++中为Python创建模块。使用C++时可以利用类和模板之类的东西吗?它不会与其他库和解释器产生不兼容吗? 参考方案 挂钩函数的实现是用C还是用C++实现都没有关系。实际上,我已经看过一些Python扩展,这些扩展有效利用C++模板甚至Boost库。没问题。 :-)

将Python嵌入C++应用程序 - c++

上下文:我们一直面临的一个持续问题是对我们的市场数据应用程序进行单元测试。这些应用程序坐下来观察从提要中检索到的数据并执行某些操作。一些很难触发的关键事件很少发生,并且测试人员很难在所有情况下验证我们的应用程序是否正常运行,因此我们必须依靠单元测试。这些系统通常通过在事件发生时发出回调(进入我们的应用程序)来工作,然后由我们负责处理此事件。 我设想的解决方案…

从C++调用Python函数 - c++

我正在尝试从C++实现调用Python函数。我以为可以通过函数指针来实现,但是似乎不可能。我一直在使用boost.python完成此操作。假设在Python中定义了一个函数:def callback(arg1, arg2): #do something return something 现在,我需要将此函数传递给C++,以便可以从那里调用它。如何使用boos…

如何锁定终端运行的perl,obj c,c++,python和ruby等脚本的源代码? - python

我想出售我在perl,obj c,c ++,python,ruby,bash,php等中制作的脚本等它们都在终端中运行。 (Linux)如何锁定源代码,以便无需人们访问源代码即可分发我的脚本..?换句话说,如何将在Terminal中运行的程序的源代码锁定,以便人们可以使用该程序(如果该代码已下载到他们的Linux机器上,但他们无法访问实际的源代码)?例:ex…