抱歉问题表述比较简洁,但我非常好奇,希望有更有经验的程序员能帮帮我。
Python在科学计算方面有多么易用和方便?
Scipy/NumPy。
它是否有与Matlab相媲美的算法库?
是的。
Python是一种脚本语言还是编译语言?
解释性语言。
它是否是用于原型设计算法的绝佳语言?
是的。
如果我已经精通C并了解面向对象编程,那要学习足够的Python以提高我的生产力需要多长时间?
取决于个人情况。
Python是基于OO的吗?
是的。
Python在科学计算方面的易用性和便利性如何?
非常好!你应该尝试参加SciPy会议(每年在美国和欧洲各有一次),以真正感受它的优势,但即使只是在 scipy.org
网站上看也能给你留下深刻印象。
Python的算法库与Matlab相比如何?
我不了解Matlab,但是可以说针对Python可用的工具非常多。
Python是脚本语言还是编译语言?
Python是一种语言,它提供了许多实现方式(全部开源)。
最流行的一种实现方式是CPython,它将源代码编译为自己的字节码,然后由虚拟机执行(编译速度非常快,并且只在需要时才进行透明地编译,但编译文件通常存储在磁盘上并且只在需要时重新编译)。这非常类似于Java/JVM或C#/.Net,除了编译步骤可以被合并到执行步骤中(当然,如果您想要的话,也可以有一个构建系统进行预编译)。
Jython将代码编译为JVM字节码,由JVM执行;Microsoft的IronPython(我相信这是他们的第一个完全开源项目)将代码编译为CRL(".Net bytecode"),然后可以被.Net和Mono执行。它们都支持即时编译和预先编译到各自的字节码。
PyPy可以将Python源代码编译成许多东西,包括(对于Python的子集)直接(提前)编译为本机机器语言或(对于所有Python)编译为中间代码,然后以即时编译方式编译为机器语言。在构建系统方面,PyPy非常灵活。(它的名称来自于其本身用Python编写的事实,在许多方面这仍然是一个优点,但它所生成的代码的速度和灵活性是当今最大的优势。)当然,我并没有指望在54个小时左右(减去睡眠时间;-)内从头开始完成任务,同时自学语言及其库(CGI和所需的算法我已经非常熟悉),但我想看看我能走多远(评估Python与当时我精通的其他语言,主要是perl和C ++之间的差异)。
不到24小时后(诚然,那晚我没睡多少,因为我太兴奋了),我退后一步,不得不承认我完成了——我的小CGI Web应用程序不仅具有我所想象的所有功能,而且我还通过从头开始构建一个小模板系统使它能够输出不同的自然语言(我知道有很多这样的工具——这就是我将它命名为yaptu,“Yet Another Python Templating Utility”的原因——但我没有时间学习语言和标准库之外的任何东西……自己动手比较快;-)。那时我无法挽回地爱上了Python。不久之后,我离开了我现有的高飞职业,在写书和使用Python自由职业的一段时间后,几年后我横跨一个海洋和两个大陆加入了其中一个广泛使用Python的最大公司(我的现任雇主Google)——在此期间重新结婚(和我的现任妻子安娜——她也是我书中的合作者和Python软件基金会的第一位女成员)。我们的“虚荣”车牌上写着P♥THON……;-)。所以,好吧,我有偏见。但这一切都始于那不到24小时的时间里,我完成了比我在超过54小时内希望完成的更多的工作(尽管像所有软件开发人员一样,每当涉及到“我要做X需要多长时间”时,我都是一个不可救药的乐观主义者;-)。
它是基于面向对象的吗?
是的,但它是多范式的(像C++一样...但比C++更多)--当您不需要使用class
时,您不必使用它们,而且它对函数式编程也有合理的支持(绝对不像Haskell这样的“真正”FP语言那么深入,但对于许多任务仍然非常有用)。
逐一回答您的问题:
Python在科学计算方面非常易用和方便。它提供了非常直观的编码方式,强大的内置数据结构如字典和列表在科学计算中非常有帮助。此外,作为一种动态语言,您不需要像C语言那样处理许多底层细节。
它是否有与Matlab相当的算法库?
确实,Python拥有众多的算法库。例如,您可以使用NumPy和SciPy支持大型、多维数组和矩阵运算。您可以在以下链接中找到更多详细信息:
此外,Python还有用于支持网络分析的库。例如,networkx库是进行图形分析的绝佳工具。
Python是脚本语言还是编译语言?
通常情况下,Python被设计为一种脚本语言。但也有编译工具,例如py2exe。我建议您将Python作为脚本语言使用。我认为您可能会对Python的性能有所担忧。通常的解决方案是在C/C++中编写那些性能批评模块,并通过SWIG进行粘合。
它是否是用于原型设计算法的绝佳语言?
当然是的。由于嵌入式数据结构得到了丰富的支持,您可以使用比C/C++更短的代码快速实现一些复杂的算法。以下是一个典型的例子:
//C++ loop a one dimensional array and print value
const int N = 100;
int A[N];
for (int i = 0; i < N; ++i)
cout << i;
#python loop a one dimensional array and print value
for i in range(100):
print i
我已经使用Python进行科学计算6年了。由于我之前使用matlab/IDL,因为Python也是解释性语言,所以切换非常容易。
有第三方工具,如SciPy和Matplotlib,可以帮助特别处理数据分析/可视化。此外,如果您在Amazon上搜索,会发现有很多面向这个受众的书籍。
Python也经常用于教授编程,因为它的语法简单而强大。
是的。
你问到编译/解释的问题。如果你关心的是执行速度,Python 有一个方面似乎没有被明确提到——你可以使用 SWIG 和 boost.python 等工具,将你的闪电般快速的 C/C++ 包出现在 Python 中作为模块。一旦你到达模块,它将以底层 C/C++ 实现的速度/效率运行。许多模块都利用了这一点。
因此,你可以在清晰、灵活、易学的 Python 中完成所有组织工作,然后当你进行大量数值计算时,你可以将问题交给快速、高效的例程。你得到了两个世界最好的东西。