NumPy和SciPy在C中有多少?

18 python performance numpy scientific-computing scipy

NumPy和/或SciPy的部分是用C/C++编写的吗?

从Python调用C的开销与从Java和/或C#调用C的开销相比如何呢?

我只是想知道对于科学应用来说,Python是比Java还是C#更好的选择.

如果我看看枪战,Python会大幅度减少.但我想这是因为他们不在这些基准测试中使用第三方库.

Jon*_*age 17

  1. 我会质疑任何没有显示每个实现的源代码的基准测试(或者我错过了什么)?完全有可能这些解决方案中的任何一个或两个都编码严重,这将导致对一种或两种语言的性能进行不公平的评估. [编辑]哎呀,现在我看到了来源.正如其他人指出的那样,它没有使用NumPy/SciPy库,因此这些基准测试无法帮助您做出决定.
  2. 我相信绝大多数NumPy和SciPy都是用C语言编写的,并且用Python包装以方便使用.
  3. 它可能取决于您在任何一种语言中所做的事情,即特定应用程序的开销有多少.

我已经使用Python进行了几年的数据处理和分析,所以我认为它肯定适用于目的.

你想在一天结束时做些什么?如果你想要一种快速开发可读代码的方法,那么Python是一个很好的选择,当然也足够快,无论你想要解决什么问题,它都是第一次尝试.

为什么不对每个问题的一小部分进行bash,并根据开发时间和运行时间对结果进行基准测试?然后你可以根据一些相关的数据做出客观的决定......或者至少那是我要做的事情:-)


rob*_*nce 6

有一个更好的比较,在这里(不是基准,但显示了加快Python的方式).NumPy主要用C编写.Python的主要优点是有很多方法可以容易地使用C扩展代码(ctypes,swig,f2py)/ C++(boost.python,weave.inline,weave.blitz)/Fortran(f2py) - 甚至只是通过向Python添加类型注释,因此可以将其处理为C(cython).我不认为C#或Java有很多比较容易的东西 - 至少那些无法处理不同类型的数字数组(尽管我认为支持者会争辩,因为他们没有Python的性能损失,所以需要的更少至).


wis*_*sty 5

很多都是用C或fortran编写的.你可以在C中重新编写热循环(或使用其中一种方法来加速python,提升/编织是我最喜欢的),但这真的很重要吗?

您的科学应用程序将运行一次.其余的只是调试和开发,而这些在Python上可以更快.

  • "你的科学应用程序将运行一次.其余的只是调试和开发,这些在Python上可以更快." - 通常我同意.但是这个应用程序可以运行数天甚至数周,因此只需缩短一点处理时间就可以节省大量的实时时间.它将不止一次运行. (2认同)

Dav*_*eau 5

大多数NumPy都在C语言中,但C代码的很大一部分是"样板"来处理Python/C接口的所有脏细节.我认为NumPy的C与Python之比约为50/50 ATM.

我不太熟悉基于vm的低级细节,但我认为由于对jvm和.clr的限制,接口成本会更高.numpy通常比类似环境更快的原因之一是内存表示以及如何在函数之间共享/传递数组.虽然大多数环境(我相信Matlab和R)使用Copy-On-Write在函数之间传递数组,但NumPy使用引用.但是在例如JVM中这样做会很困难(因为限制了如何使用指针等等).它是可行的(Jython的早期NumPy端口存在),但我不知道他们如何解决这个问题.也许C++/Cli会让这更容易,但我没有这种环境的经验.