Python NumPy和SciPy中有多少是C语言?

Python NumPy和SciPy中有多少是C语言?,python,performance,numpy,scipy,scientific-computing,Python,Performance,Numpy,Scipy,Scientific Computing,NumPy和/或SciPy的部分是否用C/C++编程 从Python调用C的开销与从Java和/或C调用C的开销相比如何 我只是想知道,对于科学应用程序来说,Python是否比Java或C更好 如果我看一看,巨蟒的损失是巨大的。但我猜这是因为他们在这些基准测试中没有使用第三方库 我会质疑任何没有显示每个实现的源代码的基准测试(或者我遗漏了什么)?这两种解决方案中的一种或两种都有可能编码错误,这将导致对其中一种或两种语言的性能进行不公平的评估[编辑]哦,现在我看到了源代码。但是,正如其他人指出的,

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

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

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

如果我看一看,巨蟒的损失是巨大的。但我猜这是因为他们在这些基准测试中没有使用第三方库

  • 我会质疑任何没有显示每个实现的源代码的基准测试(或者我遗漏了什么)?这两种解决方案中的一种或两种都有可能编码错误,这将导致对其中一种或两种语言的性能进行不公平的评估[编辑]哦,现在我看到了源代码。但是,正如其他人指出的,它没有使用NumPy/SciPy库,因此这些基准不会帮助您做出决策
  • 我相信绝大多数NumPy和SciPy都是用C编写的,并用Python包装以便于使用
  • 这可能取决于您在这些语言中所做的工作,以及特定应用程序的开销
  • 我已经使用Python进行数据处理和分析好几年了,所以我想说它确实适合这个目的

    在一天结束时,你想要实现什么?如果您想要一种快速开发可读代码的方法,那么Python是一个很好的选择,而且速度肯定足够快,可以第一次尝试您要解决的任何问题


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

    很多都是用C或fortran编写的。您可以用C重新编写热循环(或者使用无数种方法之一来加速python,boost/weave是我的最爱),但这真的很重要吗


    您的科学应用程序将运行一次。剩下的只是调试和开发,在Python上可以快得多。

    有一个更好的比较(不是基准测试,但展示了加快Python速度的方法)。NyPy主要是用C编写的。Python的主要优点是有很多方法可以很容易地用C(cType、Sug、F2pyy)/C++(BooSt.python、Weav.InLeo、Web.BrItz)/Fortran(F2Py)扩展代码,甚至只是通过向Python添加类型注释,从而可以将其处理成C(Cython)。我不认为有很多事情对于C或Java来说是比较容易的——至少在处理不同类型的数字数组时似乎没有那么简单(尽管我猜支持者会争辩,因为他们没有Python的性能损失,所以不需要这么做)。

    大部分NumPy都是用C编写的,但C代码的很大一部分是“样板”来处理Python/C接口的所有脏细节。我认为对于NumPy来说,C与Python的比率大约是50/50 ATM


    我不太熟悉基于vm的底层细节,但我相信由于jvm和.clr受到限制,接口成本会更高。numpy通常比类似环境更快的原因之一是内存表示以及函数之间如何共享/传递数组。大多数环境(我相信Matlab和R)使用写时拷贝在函数之间传递数组,NumPy使用引用。但在JVM中这样做会很困难(因为对如何使用指针等方面的限制)。这是可行的(Jython的早期NumPy端口已经存在),但我不知道他们是如何解决这个问题的。也许C++/Cli会使这变得更容易,但我对这种环境没有任何经验。

    它始终取决于您自己处理该语言的能力,因此该语言能够生成快速代码。根据我的经验,numpy的速度比好的.NET实现慢好几倍。我希望JAVA也能以同样的速度发展。这些年来,他们的优化JIT编译器有了显著的改进,并生成了非常高效的指令


    另一方面,numpy提供了一种语法,对于那些与脚本语言相适应的人来说,这种语法更容易使用。但是,如果涉及到应用程序开发,这些优势往往会变成障碍,您将渴望使用类型安全和企业IDE。此外,C#已经填补了句法上的空白。越来越多的科学库为和而存在。我个人倾向于C#,因为它为多维数组提供了更好的语法,而且感觉更“现代”。当然,这只是我个人的经验。

    源代码可以通过导航到特定程序获得。向下滚动到底部,并单击其中一个“Python CPython”链接。例如:+1。下载完NumPy源代码后,我可以确认它大部分是用Python编写的C语言。我说的“暂时”是指,如果没有人能很好地比较Python、Java和C语言中C互操作的不同成本,我会接受这个答案。此外,我会按照你的建议,用所有3种语言制作应用程序的一部分原型。“或者我错过了什么”将你的错误放在最上面,每个人都会看到你的错误。出于好奇,你看了不止一页了吗?射击python代码(例如)没有使用numpy/scipy。别忘了Fortran。Python也能很好地使用Fortran@~unutbu令人费解的是,你会期望regex dna程序使用numpy。如果你仔细看,你会发现一个真正使用numpy的“有趣的替代”Python程序-你应该尝试一下:从Python交互控制台使用Python Numeric来创建一些矩阵,让他们“活”起来它为您提供了在其他工具中无与伦比的易用性和灵活性,这推动了任何开发,因为可以立即尝试新的想法和使用模式。SciPy交互式提示符经常被用作MatLab和其他昂贵的(而且以某种方式是l