【发布时间】:2014-09-22 20:00:32
【问题描述】:
在相对较小的项目中使用 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 可能需要 5 分钟的时间来分析“仅”200K 行长的文件。
【问题讨论】:
-
如果您真的关心这些文本文件的速度,那么值得对花费时间的地方进行基准测试 - 正如@HenryKeiter 建议的那样,可能主要用于磁盘访问,但如果文本处理正在添加重要的是,您可以通过巧妙地使用 python 内置函数(这将比 python 循环等快得多)和/或使用 Cython 处理文本(使用适当的 c_types - 那里有更多的学习曲线,但可能比C++)。
标签: python c++ numpy scipy benchmarking