我正在讨论是否将C ++或Python用于基于数学的程序。
两者都有很棒的数学库,但对于复杂的数学,哪种语言通常更快?
答案 0 :(得分:8)
您还可以考虑采用混合方法。 Python通常更容易,更快速地开发,特别是用户界面,输入/输出等等。
对于某些数学运算来说,C ++肯定会更快(尽管如果你的问题可以用向量运算或线性代数表示,而不是numpy为非常有效的向量处理提供了一个python接口)。Python很容易用Cython,Swig,Boost Python等扩展。因此,一种策略是用Python编写程序的所有簿记类型部分,然后用C ++编写计算代码。
答案 1 :(得分:6)
我想可以说C ++更快。仅仅因为它是一种编译语言,这意味着只有你的代码在运行,而不是像python那样的解释器。
可以使用python编写速度非常快的代码,而使用C ++编写速度非常慢的代码。所以你必须用任何语言明智地编程!
另一个优点是C ++是类型安全的,它可以帮助您编写实际需要的内容。
在某些情况下的缺点是C ++是类型安全的,这将导致设计开销。例如,你必须考虑(可能很长很难)关于函数和类接口。
我喜欢python有很多原因。所以不要理解这是对python的请求。
答案 2 :(得分:4)
这一切都取决于更快“执行速度更快”还是“开发速度更快”。总的来说,python的开发速度更快,c ++的执行速度更快。对于使用整数(算术),它有完整的精度整数,它有很多外部工具(numpy,pylab ...)我的建议是先python,如果你有性能问题,然后切换到cpp(或使用用python编写的cpp外部库,采用混合方法)
没有好的答案,这完全取决于你想要在研究/微积分方面做什么
答案 3 :(得分:2)
毫无疑问,对于密集的数值计算,C ++会更快。但是,有很多预先存在的库(使用C / C ++ / Haskell等编写),使用Python包装器 - 利用Python的便利性并让现有的库承载负载会更方便。
一个综合系统是http://www.sagemath.org,一个相当有趣的链接是它在http://sagemath.org/links-components.html使用的组件。
根据我的经验,numpy
/ scipy
和pandas
的系统通常足以满足大多数需求。
答案 4 :(得分:1)
使用你更喜欢的那个(你应该更喜欢python :)。
在任何一种情况下,任何数学密集型计算都应该由现有的库执行 - 这些库不依赖于语言(通常使用BLAS / LAPACK来执行实际的数学运算)。 如果你选择使用python,请使用numpy 用于计算。
编辑:从您的评论中,您似乎非常关心程序的速度。确定高级pythonic代码浪费了多少时间的唯一方法是分析您的程序(例如,使用运行-p的ipython)。
在大多数情况下,您会发现高级别的东西大约占总运行时间的10%,因此从python切换到C ++只能将某个因素提高10%,总增益可能达到5%在运行时间。
答案 5 :(得分:0)
我真诚地怀疑谷歌和斯坦福不懂C ++。
“通常更快”不仅仅是语言。无论编写什么语言,算法都可以创建或解决一个解决方案。用C ++编写的糟糕选择如果有更好的算法选择,可以被Java或Python打败。
例如,一个内存中的单CPU线性代数库将通过正确完成的并行版本进入其中。
隐式算法实际上可能比显式算法慢,尽管时间步长稳定性限制,因为后者不必反转矩阵。对于双曲型偏微分方程,这通常是正确的。
你不应该关心“通常更快”。您应该深入研究您尝试解决的问题以及用于解决问题的算法。你会比盲目的语言选择做得更好。