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

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

我只是想知道对于科学应用程序来说,Python 是否比 Java 或 C# 更好。

如果我看一下 枪战, ,Python惨败。但我想这是因为他们在这些基准测试中没有使用第三方库。

有帮助吗?

解决方案

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

我使用 Python 进行数据处理和分析已经有几年了,所以我想说它确实适合我的目的。

您最终想实现什么目标?如果你想要一种快速的方法来开发可读的代码,Python 是一个很好的选择,而且对于你想要解决的任何问题来说,它的速度肯定足够快。

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

其他提示

一个很多它是用C或FORTRAN。你可以重新写在C热回路(或使用的极大数的方式之一,加快了蟒蛇,升压/编织是我的最爱),但是否真的重要吗?

您的科学应用程序将运行一次。剩下的只是调试和开发,以及那些可以更快关于Python。

大多数NumPy的的是在C,但C代码的大部分是“样板”来处理的Python / C接口的所有脏细节。我认为,比C与Python是NumPy的周围50/50 ATM。

我不是太熟悉的基于虚拟机的低层次的细节,但我相信,因为穿上JVM和.clr限制的接口的成本会更高。一个为什么numpy的通常比类似的环境更快的原因是存储器表示和功能之间的阵列是如何共享/传递。而大多数环境(Matlab和R作为以及我相信)使用写入时复制在函数之间传递数组,NumPy的使用引用。但如这样做在JVM将很难(因为关于如何使用指针等的限制...)。它是可行的(与NumPy的Jython的早期端口存在),但我不知道他们是如何解决这个问题。也许C ++ / CLI将使这更容易,但我有那个环境零经验。

有一个更好的比较此处(不是基准,但显示加速Python)的方式。 NumPy的大部分用C语言编写的Python的主要优点是,有许多途径的非常容易与C(ctypes的,痛饮,f2py)/ C ++(Boost.Python的,编织延伸代码.inline,weave.blitz)/的Fortran(f2py) - 或甚至只是通过添加类型注释到Python,因此它可以被处理,以C(用Cython)。我不认为有很多事情相当容易的C#或Java的 - 至少使无缝处理通过不同类型的数字阵列(虽然我猜的支持者会认为,因为他们不具备的Python的性能损失也较少需要到)。

这始终取决于您自己处理语言的能力,因此该语言能够生成快速的代码。根据我的经验,numpy 比好的 .NET 实现慢几倍。我预计 JAVA 也能快到类似的程度。他们的优化 JIT 编译器多年来得到了显着改进,并生成非常高效的指令。

另一方面,numpy 附带了一种更易于使用的语法,适合脚本语言。但如果涉及到应用程序开发,这些优势往往会变成障碍,您会渴望类型安全和企业 IDE。此外,C# 的语法差距已经缩小。越来越多的科学图书馆的存在 爪哇。网就我个人而言,我倾向于 C#,因为它为多维数组提供了更好的语法,并且在某种程度上感觉更“现代”。但当然,这只是我的个人经历。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top