C++或Python用于广泛的数学程序?

bvpmtnay  于 2023-04-01  发布在  Python
关注(0)|答案(7)|浏览(126)

我正在讨论是否使用C++或Python来编写一个主要基于数学的程序。
两者都有很棒的数学库,但哪种语言通常更快地处理复杂的数学?

kmynzznz

kmynzznz1#

你也可以考虑一种混合的方法。Python通常更容易和更快地开发,特别是对于用户界面,输入/输出等。
对于某些数学运算,C当然应该更快(尽管如果你的问题可以用向量运算或线性代数来表述,那么numpy提供了一个非常有效的向量操作的python接口)。
Python很容易用Cython,Swig,Boost Python等扩展,所以一个策略是用Python编写程序的所有簿记类型部分,只用C
编写计算代码。

zzwlnbp8

zzwlnbp82#

我想可以肯定地说C更快,因为它是一种编译语言,这意味着只有你的代码在运行,而不是像Python那样是一个解释器。
用python写非常快的代码,用C
写非常慢的代码是可能的。所以你必须明智地用任何语言编程!
另一个优点是C是类型安全的,这将帮助你编写你真正想要的程序。
在某些情况下,C
的缺点是类型安全,这将导致设计开销。例如,你必须考虑(可能是漫长而艰难的)函数和类接口。
我喜欢python有很多原因,所以不要把这理解为反对python。

ghhaqwfi

ghhaqwfi3#

这完全取决于更快是“执行速度更快”还是“开发速度更快”。总体而言,python的开发速度更快,c++的执行速度更快。(算术),它有全精度整数,它有很多外部工具(numpy,pylab...)我的建议是先用python,如果你有性能问题,再切换到cpp(或者使用混合方法,从Python使用cpp编写的外部库)
没有好的答案,这完全取决于你在研究/微积分方面想做什么

gijlo24d

gijlo24d4#

不用说C对于密集的数值计算会更快。然而,有很多预先存在的库(用C/C/Haskell等编写的),带有Python Package 器-利用Python的便利性并让现有的库承载负载会更方便。
一个综合系统是http://www.sagemath.org,一个相当有趣的链接是它在http://sagemath.org/links-components.html上使用的组件。
根据我的经验,一个具有numpy/scipypandas的系统通常足以满足大多数情况。

h9a6wy2h

h9a6wy2h5#

使用你更喜欢的一个(你应该更喜欢python:))。
在这两种情况下,任何数学密集型计算都应该由现有的库执行-这些库与语言无关(通常使用BLAS / LAPACK来执行实际的数学)。如果您选择使用python,请使用numpy进行计算。
编辑:从你的评论来看,似乎你非常关心你的程序的速度,要确定高级Python代码浪费了多少时间,唯一的方法就是对你的程序进行剖析(例如,使用带有run -p的ipython)。
在大多数情况下,你会发现高层次的东西占用了总运行时间的10%,因此从python切换到C++只会提高10%的时间,总的运行时间可能会增加5%。

n8ghc7c1

n8ghc7c16#

我真的怀疑Google和斯坦福大学不懂C++。
“一般来说更快”不仅仅是语言。算法可以建立或破坏一个解决方案,无论它是用什么语言编写的。用C++编写的一个糟糕的选择,如果Java或Python做出更好的算法选择,就会被击败。
例如,一个内存中的单CPU线性代数库将被一个正确完成的并行化版本打开。
隐式算法实际上可能比显式算法慢,尽管有时间步长稳定性的限制,因为后者不必求逆矩阵。这对于双曲型偏微分方程通常是正确的。
你不应该关心“一般更快”。你应该深入研究你试图解决的问题和解决它的算法。这样你会比盲目的语言选择做得更好。

v6ylcynt

v6ylcynt7#

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

相关问题