NumPy和/或SciPy的部分代码是用C/C++编写的吗?
从Python调用C函数的开销与从Java和/或C#调用C函数的开销相比如何?
我只是想知道,对于科学应用程序,Python是否比Java或C#更好。
如果我看一下shootouts,Python输了很多。但我想这是因为在这些基准测试中没有使用第三方库。
NumPy和/或SciPy的部分代码是用C/C++编写的吗?
从Python调用C函数的开销与从Java和/或C#调用C函数的开销相比如何?
我只是想知道,对于科学应用程序,Python是否比Java或C#更好。
如果我看一下shootouts,Python输了很多。但我想这是因为在这些基准测试中没有使用第三方库。
我已经使用Python处理和分析数据有几年了,所以我可以说它肯定是能胜任的。
最终你想要达到什么目标呢?如果您想快速开发可读性强的代码,Python是一个很好的选择,并且对于您尝试解决的问题的第一次尝试来说足够快。
为什么不针对问题的一个小子集尝试每种语言,并根据开发时间和运行时间对结果进行基准测试?然后,您可以根据一些相关数据做出客观决策...或者至少这就是我会做的 :-)
这里有一个更好的比较(不是基准测试,而是展示了加速Python的方法)。NumPy大部分是用C语言编写的。Python的主要优势在于有多种方法可以非常容易地使用C(ctypes、swig、f2py)/ C++(boost.python、weave.inline、weave.blitz)/ Fortran(f2py)扩展您的代码 - 或者只需添加类型注释到Python中,使其可以被转换为C(cython)。我认为对于C#或Java来说,很少有东西能像Python那样轻松处理传递不同类型的数字数组(尽管我猜支持者会争辩说由于它们没有Python的性能惩罚,因此需要较少)。
NumPy的大部分代码都是用C语言编写的,但其中很大一部分C代码只是为了处理Python/C接口的所有细节而进行的“样板”编写。我认为NumPy中C语言和Python语言的比例大约是50/50。
我对基于虚拟机的低级细节不太熟悉,但我相信由于jvm和.clr上的限制,接口成本会更高。NumPy通常比类似环境更快的原因之一是存储器表示以及如何在函数之间共享/传递数组。而大多数环境(我相信Matlab和R也是如此)使用Copy-On-Write来在函数之间传递数组,而NumPy使用引用。但在例如JVM中这样做会很困难(因为限制如何使用指针等)。这是可以做到的(Jython的一个早期版本已经移植了NumPy),但我不知道他们是如何解决这个问题的。也许C++/Cli会使这更容易,但我对那个环境毫无经验。
很多IT技术都是用C或Fortran编写的。你可以用C重写热循环(或使用众多加速Python的方法,Boost/Weave是我最喜欢的),但这真的很重要吗?
科学应用程序只需要运行一次。其余的只是调试和开发,而在Python上这些可以更快速。