1.1.1 为什么是Python?

1.1.1.1 科学家的需求

  • 获得数据(模拟,实验控制)
  • 操作及处理数据
  • 可视化结果… 理解我们在做什么!
  • 沟通结果:生成报告或出版物的图片,写报告

1.1.1.2 要求

  • 对于经典的数学方法及基本的方法,有丰富的现成工具:我们不希望重新编写程序去画出曲线、傅立叶变换或者拟合算法。不要重复发明轮子!
  • 易于学习:计算机科学不是我们的工作也不是我们的教育背景。我们想要在几分钟内画出曲线,平滑一个信号或者做傅立叶变换,
  • 可以方便的与合作者、学生、客户进行交流,代码可以存在于实验室或公司里面:代码的可读性应该像书一样。因此,这种语言应该包含尽可能少的语法符号或者不必要的常规规定,使来自数学或科学领域读者愉悦的理解这些代码。
  • 语言高效,执行快…但是不需要是非常快的代码,因为如果我们花费了太多的时间来写代码,非常快的代码也是无用的。
  • 一个单一的语言/环境做所有事,如果可能的话,避免每个新问题都要学习新软件

1.1.1.3 现有的解决方案

科学家用哪种解决方案进行工作?

编译语言:C、C++、Fortran等。

  • 优势:

    • 非常快。极度优化的编译器。对于大量的计算来说,很难比这些语言的性能更好。
    • 一些非常优化的科学计算包。比如:BLAS(向量/矩阵操作)
  • 不足:

    • 使用起来令人痛苦:开发过程中没有任何互动,强制编译步骤,啰嗦的语法(&, ::, }}, ; 等),手动内存管理(在C中非常棘手)。对于非计算机学家他们是艰深的语言

脚本语言:Matlab

  • 优势:

    • 对不同的领域的多种算法都有非常的类库。执行很快,因为这些类库通常使用编译语言写的。
    • 友好的开发环境:完善的、组织良好的帮助,整合的编辑器等
    • 有商业支持
  • 不足:

    • 基础语言非常欠缺,会限制高级用户
    • 不是免费的

其他脚本语言:Scilab、Octave、Igor、R、IDL等。

  • 优势:

    • 开源、免费,或者至少比Matlba便宜。
    • 一些功能非常高级(R的统计,Igor的图形等。)
  • 不足:

    • 比Matlab更少的可用算法,语言也并不更高级
    • 一些软件更专注于一个领域。比如,Gnuplot或xmgrace画曲线。这些程序非常强大,但是他们只限定于一个单一用途,比如作图。

那Python呢?

  • 优势:

    • 非常丰富的科学计算包(尽管比Matlab少一些)
    • 精心设计的语言,允许写出可读性非常好并且结构良好的代码:我们“按照我们所想去写代码”。
    • 对于科学计算外的其他任务也有许多类库(网站服务器管理,串口接收等等。)
    • 免费的开源软件,广泛传播,有一个充满活力的社区。
  • 不足:

    • 不太友好的开发环境,比如与Matlab相比。(更加极客向)。
    • 并不是在其他专业软件或工具箱中可以找到算法都可以找到