NumPy和SciPy有多少是用C写的?
NumPy和SciPy的部分代码是用C或C++编写的吗?
从Python调用C的开销和从Java或C#调用C的开销相比,哪个更高呢?
我只是想知道,Python在科学应用方面是否比Java或C#更好。
如果我查看这些比较测试,会发现Python的表现差得很。但我想这可能是因为这些测试没有使用第三方库。
5 个回答
很多代码是用C语言或Fortran写的。你可以把那些运行频繁的部分用C语言重写(或者用很多加速Python的方法,我最喜欢的是boost/weave),但这真的有必要吗?
你的科学应用程序可能只会运行一次。剩下的时间都是在调试和开发,而这些在Python上做会快得多。
这里有一个更好的比较,可以查看这里(虽然不是基准测试,但展示了加速Python的方法)。NumPy大部分是用C语言写的。Python的主要优点在于,有很多方法可以非常简单地用C(ctypes、swig、f2py)、C++(boost.python、weave.inline、weave.blitz)或Fortran(f2py)来扩展你的代码,甚至只需给Python添加类型注解,就能把它处理成C代码(cython)。我觉得对于C#或Java来说,能做到这么简单的事情并不多,尤其是在处理不同类型的数字数组时(不过我想支持者会说,因为它们没有Python的性能损失,所以需求就少了)。
- 我会对任何没有显示每个实现来源的基准测试表示怀疑(或者我错过了什么?)。完全有可能这两种解决方案的代码写得不好,这样就会导致对这两种语言性能的不公平评估。
- 我相信大多数NumPy和SciPy的代码都是用C语言写的,然后用Python封装起来,方便使用。
- 具体要看你在这些语言中做什么,才能判断某个应用的开销有多大。
我已经用Python进行数据处理和分析好几年了,所以我可以说它确实适合这个目的。
你最终想要达到什么目标呢?如果你想快速开发出可读性强的代码,Python是个很不错的选择,而且对于你想解决的任何问题来说,它的速度也足够快。
为什么不试试用每种语言解决你问题的一小部分,然后比较一下开发时间和运行时间的结果呢?这样你就可以根据一些相关的数据做出客观的决定……或者至少这是我会做的 :-)