IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    科学计算工具和工作流

    Reverland (lhtlyy@gmail.com)发表于 2012-09-12 00:00:00
    love 0

    Scientific computing with tools and workflow


    好长的标题……

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

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


    目录

    • 为什么Python?
      • 科学家的需求
      • 要求
      • 已经存在的解决方案
    • python科学工具
    • 交互工作流:IPython和文本编辑器
      • 命令行交互
      • 在编辑器中拟定算法

    为什么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:         
    String Form:        
    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
    

    从脚本到函数

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

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

    1. 在python2.7以后不会这样显示了。 ↩

    2. Enthought公司配置好的一套环境,教育网邮箱可以免费申请使用。 ↩

    3. 另一个配置好的环境。 ↩



沪ICP备19023445号-2号
友情链接