Python适用于专注于科学计算的算法吗?

时间:2010-05-27 01:42:42

标签: python

我对编程的兴趣主要在于算法,最近我看到许多有信誉的研究人员在python中编写了很多代码。 python对科学计算有多简单方便?它有一个与matlab相比较的算法库吗? Python是脚本语言还是编译?它是一种用于原型算法的优秀语言吗?如果我知道C井和OO编程有多长,我需要多长时间才能学到足够的效率?它是否以OO为基础?

对于问题的浓缩格式感到抱歉,但我非常好奇,希望有经验的程序员可以帮助我。

8 个答案:

答案 0 :(得分:16)

  

python对科学计算有多简单方便?

SciPy的/ NumPy的。

  

它是否有与matlab相比较的算法库?

  

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

被解释的。

  

它是一种用于算法原型设计的优秀语言吗?

  

如果我对C井和OO编程有所了解,我需要花多长时间才能学到足够的效率?

取决于

  

是否以OO为基础?

答案 1 :(得分:14)

答案 2 :(得分:11)

它进行字节编译,然后通过解释器发送字节码。

Official Tutorial

NumPy

你现在已经开始了。

答案 3 :(得分:8)

逐一回答你的问题:

python对科学计算有多简单方便?

python的一个重点是它提供了非常直观的编写代码的方式。强大的嵌入式数据结构(如字典和列表)可以帮助您进行科学计算。此外,作为一种动态语言,您不需要处理许多您必须在C中执行的低级细节。

它是否有与matlab相比较的算法库?

实际上,python拥有大量的算法库。例如,您可以使用NumPy和SciPy来支持大型,多维数组和矩阵计算。您可以在这些链接中找到更多详细信息:

  1. numpy的官方网站: http://numpy.scipy.org/
  2. numpy维基百科:     http://en.wikipedia.org/wiki/NumPy
  3. 此外,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
    

    作为一种脚本语言,您不需要编译,运行,重新编译,运行,这将为您节省大量时间。

    如果我对C井和OO编程有所了解,我需要多长时间才能学到足够的效率?它是否以OO为基础?

    Python与C不同。您可能会发现在python中编写c风格的代码并不是很有意义。但是python很容易启动,大多数语法只是简单的英语。此外,还有一些很棒的python教程。例如,潜入python 对初学者来说非常好。

    Python为基于OO的编程提供了机制。

答案 4 :(得分:4)

我已经使用Python进行了6年的科学计算。来自matlab / IDL,它很容易进行切换,因为它也被解释了。

有第三方工具,如SciPy和Matplotlib,专门用于数据分析/可视化。此外,如果您查看亚马逊,则会有针对此受众群体的图书。

Python也常用于教授编程,因为它简单而强大的语法。

答案 5 :(得分:3)

如果您了解C和一些面向对象的编程,您将非常快速地学习python - 大多数关键的事情只需几个小时的阅读/修补它。以下是主要区别: - 旨在快速学习,鼓励编写可读代码。 - 任何面向对象的编程语言都有最少的瑕疵。 - 但是不强迫你编写面向对象的代码。 - 使编写可单独执行或导入其他脚本的脚本变得容易。

面向对象的功能: - 真正的多态性。与C ++和Java等衍生产品不同,您不必为了使您的代码具有多态性,通用性和可重用性,即使您事先没有考虑过。这是因为虽然它是强类型的,但它不是静态类型的。因此,只要您的对象具有某些代码所需的预期方法或属性,它就会起作用。这被称为鸭子打字 - 内省 - 因此您可以在访问之前轻松检查方法或属性是否存在。也非常适合调试。 - 您可以在运行时向对象添加属性甚至方法。非常可塑的代码。 - 支持多重继承。

问题: - 通常比Ruby快,但有时比Java慢。 - 你必须习惯于在整个地方看到自我这个词。 - C风格的开发人员很难放弃必须输入花括号和分号。看到像这样整洁的代码会让你觉得缺少一些东西。

有一个编程风格指南,所有python开发人员都应遵循: http://www.python.org/dev/peps/pep-0008/

它的变体比主版本更快,并且支持易于使用的并发机制。它被称为Stackless Python,因为它不使用C堆栈。 EVE Online是用这种语言编写的。

这是一个我认为可以被视为科学编程的例子 - 调整声波 - 它只是很酷 - 向下滚动到底部,看看它是多么简单。 http://musicmachinery.com/2010/05/21/the-swinger/

答案 6 :(得分:1)

  

Python是否适用于专注于科学计算的算法?

答案 7 :(得分:1)

你问过编译/解释。如果您关注的是执行速度,那么python的一个方面似乎没有明确涵盖 - 您可以使用SWIG和boost.python等工具使您的闪电般快速的C / C ++包出现在您的python中作为模块。一旦进入模块,它将以底层C / C ++实现的速度/效率运行。许多模块都可以利用这一点。

因此,您可以使用清晰,灵活,易于学习的Python来完成所有组织工作,然后当您进行繁重的数字运算时,您可以将问题移交给快速,高效的例程。你可以获得两全其美的效果。