盒子
文章目录
  1. Scientific computing with tools and workflow
    1. 为什么Python?
      1. 科学家的需求
      2. 要求
      3. 已经存在的解决方案
    2. python科学工具
    3. 交互工作流:IPython和文本编辑器
      1. 命令行交互
      2. 在编辑器中拟定算法

科学计算工具和工作流

Scientific computing with tools and workflow


好长的标题……

从scipy lecture notes引言翻译。这是篇python 做科学计算的水文……

作者:Fernando Perez, Emmanuelle Gouillart, Gaël Varoquaux。感谢他们贡献了如此棒的教材。


目录

  • toc
    {: toc}

为什么Python?

科学家的需求

  • 获取数据(模拟,试验操控)
  • 操作和处理数据
  • 可视化结果……让我们理解我们在做什么!
  • 交流结果:产生用来做报告或出版的图像,写演示文稿。

要求

  • 对相应经典数值方法和基本作用已经存在丰富的程序块:我们不想再次为绘制曲线、傅利叶变换或者拟合算法重新编程。不要重复发明轮子。
  • 简单易学:计算机科学不是我们的课程也不是工作。我们想要在几分钟内绘制曲线、平滑信号和做傅利叶变换。
  • 易于和合作者、学生、顾客交流,让代码在试验室或公司内部都生动起来:代码应该像本书一样易读。因此,语言应该包含尽量少的语法符号或不必要的规范,使数学家和科学家读者能够理解代码。
  • 有效率地编码和快速执行……但是不必说如果我们花太多时间来编写它,非常快的代码也变得无用。所以,我们需要同样短的开发时间和短的执行时间。
  • 一个单独的环境/语言解决所有事情。如果可能,避免为每个新问题学习新的软件。

已经存在的解决方案

科学家们用什么工作?

编译语言:C,C++,Fortran等等

  • 优点:
    • 非常快。高度优化的编译器。对大量计算,很难超越这些语言。
    • 为这些语言已经写了一些高度优化的科学库。例如:BLAS(向量/矩阵运算库)
  • 缺点:
    • 难用:在开发时没有交互,命令式的编译步骤,累赘的语法(&, ::, }}, ;等等),人工内存管理(C中很棘手)。这些对非计算机科学家是难懂的语言

脚本语言:Matlab

  • 优点:
    • 在许多领域有丰富的数值算法库。因为这些库经常用编译语言写成而有快的执行速度。
    • 友好的开发环境:全面而且组织良好的帮助,集成的编辑器等。
    • 商业支持
  • 缺点:
    • 基本语言太弱了,高级用户将很受限。
    • 不免费

其它脚本语言:Scilab, Octave, Igor, R, IDL等等

  • 优点:
    • 开源、免费,或者至少比Matlab便宜。
    • 有些功能非常高级(R中的统计,Igor中的绘图等等)
  • 缺点:
    • 比Matlab中可用算法少,语言不高级。
    • 有些软件专注于一个领域。例如:Gnuplot或xmgrace绘制曲线。这些程序非常强大,但是它们被限制在一种类型的使用上,例如绘图。

Python怎么样

  • 优点:
    • 非常丰富的科学计算库(尽管稍微比Matlab少那么一点点)
    • 很好的思考语言,允许写出非常易读和组织很好的代码:“所码即所想” 。
    • 相当之多科学计算任务之外的库(网络服务器管理、串口访问等等。)
    • 自由免费和开源,使用广泛,活跃的社区。
  • 缺点:
    • 不怎么友好的开发环境和某些软件相比,比如Matlab。(更加geek向一些)。
    • 并非所有的算法可以在专业软件和工具箱中找到。

python科学工具

不像Matlab,Scilab和R,Python并不预先绑定一套科学计算模块。以下是用来搭建科学计算环境的基本构建模块:

  • Python,一个通用和现代的计算语言

    • Python语言:数据结构(字符串、整型),控制流,数据集合(列表、字典),模式等等。
    • 标准库的模块
    • 大量用Python写成特殊用途的模块或应用:网络协议,网络框架等等,还有科学计算。
    • 开发工具(自动测试,文档生成)
  • IPython,一个高级Python shell http://ipython.scipy.org/moin/

  • Numpy,提供强大的数值数组对象和操作它们的程序。http://www.numpy.org/

  • Scipy:高水准的数据处理程序。优化、回归、插值等等。http://www.scipy.org/

  • Matplotlib:二维可视化,“出版水准”的绘图。http://matplotlib.sourceforge.net/

  • Mayavi:三维可视化。http://code.enthought.com/projects/mayavi/

交互工作流:IPython和文本编辑器

交互工作来测试和理解算法:在这一部分,我们描述一个使用IPython交互工作流,这很方便探索和理解算法。

Python是一种通用语言。因此,没有一个得天独厚的工作环境,使用它的方式不只一种。尽管这让初学者很难找到自己的路,但让Python可能被用来在服务器上或嵌入设备上写程序。

注解:这部分的参考文档:

IPython用户手册:http://ipython.org/ipython-doc/dev/index.html

命令行交互

启动ipython

In [1]: print('Hello world')
Hello world

获得帮助^1

In [2]: print?
Type:               builtin_function_or_method
Base Class:         <type 'builtin_function_or_method'>
String Form:        <built-in function print>
Namespace:          Python builtin
Docstring:
    print(value, ..., sep=' ', end='\n', file=sys.stdout)

    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file: a file-like object (stream); defaults to the current sys.stdout.
    sep:  string inserted between values, default a space.
    end:  string appended after the last value, default a newline.

在编辑器中拟定算法

在文本编辑器中创建一个文件my_file.py。在EPD(Enthought Python Distribution)^2中,你可以使用从开始菜单使用Scite。在Python(x,y)中^3,你可以使用Spyder。在Ubuntu下,如果你还没有喜欢的编辑器,我们建议安装Stani’s Python editor。在这个文件中,添加以下行:

s = 'Hello world'
print(s)

现在,你可以在IPython中运行和探索结果变量:

In [3]: %run my_file.py
Hello word

In [4]: s
Out[4]: 'Hello word'

In [5]: %whos
Variable   Type    Data/Info

----------------------------
s          str     Hello word

从脚本到函数

虽然只用一个接一个指令的脚本工作很诱惑,但请逐渐将脚本改进成一套函数:

  • 一个脚本不可复用,但函数可以。
  • 以函数式思考益于将问题分解。