2

我正在争论是否将 C++ 或 Python 用于主要基于数学的程序。

两者都有很棒的数学库,但是对于复杂的数学,哪种语言通常更快?

4

7 回答 7

8

您还可以考虑混合方法。Python 通常更容易和更快地开发,特别是对于用户界面、输入/输出等。

对于某些数学运算,C++ 肯定会更快(尽管如果您的问题可以用向量运算或线性代数来表述,那么 numpy 提供了一个非常有效的向量运算的 Python 接口)。

Python 很容易用 Cython、Swig、Boost Python 等进行扩展,因此一种策略是用 Python 编写程序的所有簿记类型部分,并用 C++ 编写计算代码。

于 2012-07-24T06:47:32.403 回答
7

我想可以肯定地说 C++ 更快。仅仅因为它是一种编译语言,这意味着只有您的代码在运行,而不是像 python 那样的解释器。

不过,可以使用 python 编写非常快的代码,而使用 C++ 编写非常慢的代码。所以你必须用任何语言明智地编程!

另一个优点是 C++ 是类型安全的,这将帮助你编写你真正想要的东西。

在某些情况下,一个缺点是 C++ 是类型安全的,这将导致设计开销。例如,您必须考虑(可能是漫长而艰难的)函数和类接口。

我喜欢 python 有很多原因。所以不要理解这是对python的请求。

于 2012-07-24T06:42:50.180 回答
4

这完全取决于更快是“更快地执行”还是“更快地开发”。总体而言,python 的开发速度更快,c++ 的执行速度更快。对于使用整数(算术),它具有全精度整数,它有很多外部工具(numpy,pylab ...)我的建议是先去 python,如果你有性能问题,然后切换到 cpp(或使用以混合方法从 python 中用 cpp 编写的外部库)

没有好的答案,这完全取决于你想在研究/微积分方面做什么

于 2012-07-24T06:59:24.100 回答
2

毫无疑问,C++ 将更快地进行密集的数值计算。但是,那里有很多预先存在的库(用 C/C++/Haskell 等编写),带有 Python 包装器——利用 Python 的便利性并让现有的库承担负载会更方便。

一个综合系统是http://www.sagemath.org,一个相当有趣的链接是它在http://sagemath.org/links-components.html上使用的组件。

根据我的经验,numpy一个系统通常足以应付大多数事情。scipypandas

于 2012-07-24T06:58:51.543 回答
1

使用你更喜欢的那个(你应该更喜欢 python :))。

在任何一种情况下,任何数学密集型计算都应由现有库执行 - 这些库不依赖于语言(通常 BLAS / LAPACK 用于执行实际数学)。如果您选择使用 python,请使用numpy 进行计算。

编辑:从您的评论来看,您似乎非常关心程序的速度。确定高级 pythonic 代码浪费了多少时间的唯一方法是分析您的程序(例如,将 ipython 与 run -p 一起使用)。

在大多数情况下,你会发现高级的东西大约占用了总运行时间的 10%,因此从 python 切换到 C++ 只会将这 10% 提高一些因素,总运行时间可能会增加 5% .

于 2012-07-24T06:51:41.027 回答
0

我真诚地怀疑 Google 和斯坦福不知道 C++。

“通常更快”不仅仅是语言。算法可以决定解决方案的成败,无论它是用什么语言编写的。用 C++ 编写的一个糟糕的选择,如果选择更好的算法,就会被 Java 或 Python 击败。

例如,内存中的单 CPU 线性代数库将通过正确完成的并行化版本打开大门。

尽管有时间步稳定性限制,隐式算法实际上可能比显式算法慢,因为后者不必反转矩阵。这通常适用于双曲偏微分方程。

你不应该关心“通常更快”。你应该深入研究你试图解决的问题以及用于解决它的算法。这样你会比盲目的语言选择做得更好。

于 2012-07-24T11:38:01.567 回答
0

我会选择在 Java 平台上运行的 Python。这种方法在DataMelt 程序中实现。从 Python 调用 Java 库的算法会更快,因为 JVM 会为您优化代码。

于 2015-08-16T02:10:52.197 回答