Python适合用于科学计算算法吗?

5 投票
8 回答
1083 浏览
提问于 2025-04-15 23:13

我对编程的兴趣主要集中在算法上,最近我看到很多有名的研究者都用Python写代码。那么,Python在科学计算方面有多简单和方便呢?它有没有像Matlab那样的算法库?Python是脚本语言还是编译语言?它适合用来快速试验算法吗?如果我已经很熟悉C语言,并且对面向对象编程有一点了解,学会Python需要多长时间才能开始有效地使用它?Python是基于面向对象的吗?

抱歉问题有点简洁,但我很好奇,希望能有更有经验的程序员帮我解答。

8 个回答

11

它会先把代码转换成字节码,然后通过解释器来运行这些字节码。

官方教程

NumPy

现在你准备好了。

16

Python在科学计算方面有多简单和方便?

有Scipy和NumPy这两个库。

它有没有类似于Matlab的算法库?

有的。

Python是脚本语言还是编译语言?

它是解释型的。

用Python来快速试验一个算法合适吗?

非常合适。

如果我对C语言很熟悉,并且对面向对象编程有一点了解,学习Python到能用的程度大概需要多久?

这要看情况。

Python是面向对象的吗?

是的。

14

Python在科学计算方面有多简单和方便呢?

非常简单!你可以试着参加一下每年在美国和欧洲举行的SciPy会议,亲身感受一下。不过,就算你只浏览一下scipy.org网站,也能对它有个大概的了解。

Python有没有类似于matlab的算法库?

我不太了解matlab,但Python里有的东西真是让人惊讶。

Python是脚本语言还是编译语言?

Python是一种语言,它有很多实现(都是开源的)。

最流行的实现是CPython,它会把源代码编译成自己的字节码,然后由它的虚拟机执行(编译速度很快,通常在需要的时候自动进行,但编译后的文件一般会存储在磁盘上,只有在需要时才会重新编译)。这跟Java/JVM或者C#/.Net很像,只不过编译步骤可以和执行步骤合并(当然,如果你想的话,也可以有一个提前编译的构建系统)。

Jython会编译成JVM字节码,然后由JVM执行;微软的IronPython(我认为这是他们第一个完全开源的项目)会编译成CRL(“.Net字节码”),然后由.Net和Mono执行。它们都支持即时编译和提前编译到各自的字节码。

PyPy可以把Python源代码编译成很多东西,包括(对于Python的一个子集)直接(提前)编译成本地机器语言,或者(对于所有Python)编译成中间代码,然后再即时编译成机器语言。PyPy在构建系统的灵活性方面非常出色。(它的名字来源于它是用Python本身编写的,这在很多方面都是个优点,但它生成的代码速度和灵活性是它目前最大的优势)。

这四种实现现在都是生产级别的(历史上,它们是按我列出的顺序逐渐发展成的——PyPy是最近才成熟的,确实是最近,但我现在非常喜欢它)。

Python适合用来快速原型开发算法吗?

我想不出比它更好的选择;可以看看Python Cookbook

的第18章,特别是Tim Peters的介绍,了解更多内容。那个介绍在我刚给的Google Books链接里可以完全阅读,我真的无法在这个已经很长的回答中做到它的公正;点击链接去读那个介绍!

如果我对C很熟悉,并且对面向对象编程有一些了解,学习Python需要多长时间才能上手?

我第一次接触Python时,浏览了教程后,决定在一个周末尝试一下:我会把一个周末(从周五晚上6点到周日午夜,或者说周一的凌晨)用来学习这门语言,做一个CGI网页应用,计算和展示各种桥的概率(作为一个桥的爱好者,我在这个领域主要是通过我的概率和计算机工作而知名,这是我一直喜欢的问题:我在大一时学过Fortran,尽管当时作为电气工程专业的学生,我不应该在大三之前编程,只能通过打卡片来解决这类问题;-)。

当然,我并不指望在54小时内(扣除睡觉时间;-)从零开始完成这个任务,同时自学这门语言和它的库(CGI和所需的算法我已经很熟悉),但我想看看我能做到什么(评估Python和我当时精通的其他语言,主要是perl和C++)。

不到24小时后(承认那晚我几乎没怎么睡,我实在太兴奋了),我停下来不得不承认我完成了——不仅我的小CGI网页应用具备了我想要的所有功能,而且我还通过从零开始构建了一个小模板系统,使它能够以不同的自然语言输出(我知道有很多现成的模板系统——这就是我把自己的命名为yaptu,“Yet Another Python Templating Utility”的原因——但我实在没时间去学习语言和标准库之外的东西……自己做更快;-)。

那一刻,我彻底爱上了Python。不久之后,我放弃了我原本的高管职业,开始用Python写书和自由职业,几年后我跨越一个海洋和两个大洲,加入了一个广泛使用Python的最大公司之一(我现在的雇主,谷歌)——在此期间我再婚(我的现任妻子安娜,她也是我一本书的合著者,并且是Python软件基金会的第一位女性成员)。我们的“个性化”车牌上写着P♥THON...;-)。所以,好吧,我有点偏见。但这一切都是从那不到24小时开始的,我在那段时间里完成的事情比我在54小时内希望做到的还要多(尽管像所有软件开发者一样,我在“做X需要多长时间”这个问题上总是个不可救药的乐观主义者;-)。

Python是面向对象的吗?

是的,但它是多范式的(就像C++……但比C++更灵活)——你不需要在不需要的时候使用class,而且它对函数式编程也有合理的支持(虽然不如像Haskell这样的“真正”的函数式编程语言深,但在很多任务中仍然非常有用)。

撰写回答