【问题标题】:Is numpy slower than c++ linear algebra libraries like eigen?numpy 比 eigen 之类的 c++ 线性代数库慢吗?
【发布时间】:2016-05-03 02:13:27
【问题描述】:

我用它来实现神经网络。我更喜欢 NumPy,因为用 Python 准备数据更方便;但是,我担心 NumPy 不如 c++ 库快。

【问题讨论】:

  • 经验法则:Python 比 C++ 慢。
  • Buf numpy 是用 C 实现的,正如 Mike muler 下面所说的那样?
  • 真的吗?伙计,我认为这不是一个好点。
  • 视情况而定。如果你有一个经过良好调整的 BLAS 实现,numpy 会调用它,这可能比 Eigen 更快。例如,在我的机器上,使用 numpy 的矩阵乘法运算速度为 200 G ops/sec,而使用 Eigen 的速度仅为 160 G ops/sec,原因是我的 BLAS 得到了更好的优化(使用使用 openmp 的 OpenBLAS,而不是使用 Eigen依赖于线程池的张量库)
  • @erip 对不起,但我认为在这个问题的背景下,您的 cmets 非常具有误导性。 Pure-Python 的性能几乎与实际数值工作无关。

标签: c++ numpy machine-learning neural-network linear-algebra


【解决方案1】:

NumPy 是用 C 实现的。所以大多数时候你只需要调用 C 和一些功能优化的 Fortran 函数或子例程。因此,使用 NumPy 完成许多任务,您将获得不错的速度。您需要矢量化您的操作。不要在 NumPy 数组上编写 for 循环。当然,手动优化的 C 代码可以更快。另一方面,NumPy 包含许多已经优化的算法,这些算法可能比经验不足的 C 程序员编写的非最优 C 代码更快。

您可以使用 Cython 和/或使用 Numba 从 Python 逐步迁移到 C 用于 jit 编译到机器或 gpu 代码。

【讨论】:

    【解决方案2】:

    我不得不说,我认为这里的其他答案都缺少一些东西。

    首先,正如@Mike Muller 正确指出的那样,Python 的数值库具有 C 或 Fortran(或两者)后端,因此纯 Python 的性能几乎无关紧要(与后端的性能相反,这可能很重要)。在这方面,无论您是通过 Python 还是 C++ 操作 MKL 之类的东西 - 几乎没有什么区别。

    不过有两个区别:

    • Python 的优点是它是交互式的。这意味着,尤其是与IPython Notebook 之类的东西结合使用时,您可以执行一个操作并绘制结果,执行另一个操作并绘制结果等。使用像 C++ 这样的编译语言进行探索性分析很难获得这种效果或 Java。

    • 在 Python 的不利方面 - 它及其科学生态系统至少可以不完美地处理多核。这是语言本身的一个基本问题(阅读GIL)。

    【讨论】:

    • 你的观点对我来说很合理。另外我想知道使用 tensorflow、cntk 等更深入学习的特定工具包是否会提高效率?
    • 关于交互点:C++ 现在有一个 Jupyter 内核:github.com/jupyter-xeus/xeus
    猜你喜欢
    • 2018-02-22
    • 2011-03-16
    • 2022-07-06
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 2011-07-16
    • 2013-08-05
    相关资源
    最近更新 更多