1.1. Python科学计算生态系统¶
作者:Fernando Perez、Emmanuelle Gouillart、GaëlVaroquaux、Valentin Haenel
1.1.1. 为什么选择Python?¶
1.1.1.2. Python的优势¶
- Batteries included 已存在丰富的经典数值方法、绘图或数据处理工具模块。我们不想重新编程绘制曲线、傅立叶变换或拟合算法。不要重复发明轮子!
- 易于学习 大多数科学家不是程序员,他们都没有受过培训。他们需要能够绘制曲线、平滑信号、在几分钟内进行傅立叶变换。
- 轻松沟通 为了在实验室或公司内保持代码的活力,对于协作者、学生或者客户它应该像书一样可读。Python的语法很简单,避免了奇怪的符号或冗长的例行规范,这些规范会将读者从数学或科学的代码中理解。
- Efficient code Python numerical modules are computationally efficient. 但不用说,如果太多的时间花在写它,一个非常快的代码变得无用。Python旨在缩短开发时间并缩短执行时间。
- 通用 Python是一种用于许多不同问题的语言。学习Python可避免为每个新问题学习新软件。
1.1.1.3. Python与其他解决方案比较起来如何?¶
1.1.1.3.1. 编译语言:C、C++、Fortran ... ¶
优点: |
|
---|---|
缺点: |
|
1.1.1.3.2. Matlab脚本语言¶
优点: |
|
---|---|
缺点: |
|
1.1.1.3.3. Julia¶
优点: |
|
---|---|
缺点: |
|
1.1.1.3.4. 其他脚本语言:Scilab、Octave、R、IDL等¶
优点: |
|
---|---|
缺点: |
|
1.1.1.3.5. 蟒¶ T0>
优点: |
|
---|---|
缺点: |
|
1.1.2. Python科学计算生态系统¶
与Matlab或R不同,Python不提供用于预捆绑的科学计算模块集。下面是可以组合以获得科学计算环境的基本构建:
Python是一种通用的现代计算语言
- 语言:流控制、数据类型(
string
,int
)、数据容器(列表、字典)等。 - 标准库模块:字符串处理、文件管理、简单的网络协议。
- 大量用Python编写的专门模块或应用程序:web框架等......和科学计算。
- 开发工具(自动测试,文档生成)
另见
Core numeric libraries
Numpy:使用强大的数值数组对象进行数值计算,以及操作它们的例程。 http://www.numpy.org/ T0>
另见
Scipy:高级数字例程。优化、回归、插值等http://www.scipy.org/
另见
Matplotlib:2-D可视化、“即时发表”的绘图http://matplotlib.org/
另见
高级互动环境:
- IPython,高级Python控制台 http://ipython.org/
- 浏览器中的Jupyter、notebooks http://jupyter.org/
特定领域的包,
以及更多的没有记录在这个scipy讲义中的包。
1.1.3. 开始之前:安装工作环境¶
Python有很多形式,有很多方法来安装它。但是,我们建议安装一个科学计算的分布版,它已经自带优化版的科学计算模块。
在Linux下
如果你有最近的发行版,大多数工具可能已打包,建议使用你的包管理器。
其他系统
有几个功能完备的科学计算Python分布:
Python 3或Python 2?
2008年,Python 3发布了。这是语言的一个重大演变,做出了一些改变。一些旧的科学计算代码尚未在Python 3下运行。但是,这种情况很少发生,Python 3带来了很多好处。我们建议你安装Python 3。
1.1.4. 工作流程:交互式环境和文本编辑器¶
测试和理解算法的交互式工作:在本节中,我们描述了一个将交互式工作和合并相结合的工作流程。
Python是一种通用语言。因此,工作环境不会糟糕,并且使用它的方式不只有一种。虽然这使得初学者更难找到自己的方式,它使Python可以用于在Web服务器或嵌入式设备中编程。
1.1.4.1. 交互式工作¶
我们建议你使用IPython控制台或其衍生产品Jupyter notebook进行交互式工作。它们对于探索和理解算法很方便。
开始ipython:
In [1]: print('Hello world')
Hello world
在对象后使用?运算符获取帮助:
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.
另见
- IPython用户手册:http://ipython.org/ipython-doc/dev/index.html
- Jupyter Notebook快速入门:http://jupyter.readthedocs.io/en/latest/content-quickstart.html
1.1.4.2. 在编辑器中详细说明工作¶
当你继续向前时,不仅要以交互方式工作,而且创建和重用Python文件也很重要。为此,一个强大的代码编辑器将让你走得更远。以下是几个好用的编辑器:
其中一些自带各种科学计算Python的发行版,你可以在菜单中找到它们。
作为练习,在代码编辑器中创建一个文件my_file.py,并添加以下几行:
s = 'Hello world'
print(s)
现在,你可以在IPython控制台或notebook中运行它,并浏览生成的变量:
In [1]: %run my_file.py
Hello world
In [2]: s
Out[2]: 'Hello world'
In [3]: %whos
Variable Type Data/Info
----------------------------
s str Hello world
从脚本到函数
虽然只使用脚本很有吸引力,但它是一个充满指令的文件,这些指令一个接一个,请逐步将脚本演变成一组函数:
- 脚本不可重用,函数可以。
- 以函数的方式思考有助于将问题分解成多个小问题。
1.1.4.3. IPython和Jupyter提示和技巧¶
用户手册包含丰富的信息。在这里,我们快速介绍四个有用的功能:命令历史、制表符补全、魔法函数和别名。
命令历史 像UNIX shell一样,IPython控制台支持命令历史记录。键入向上键和向下键来导航以前输入的命令:
In [1]: x = 10
In [2]: <UP>
In [2]: x = 10
制表符补全 制表符补全,是探索你正在处理的任何对象的结构的一种方便的方式。只需键入object_name.
In [1]: x = 10
In [2]: x.<TAB>
x.bit_length x.denominator x.imag x.real
x.conjugate x.from_bytes x.numerator x.to_bytes
魔法函数 控制台和notebooks通过在命令前加上%
字符,支持所谓的魔法函数。例如,上一节的run
和whos
函数是魔法函数。请注意,默认情况下启用的设置automagic
允许你省略前面的%
符号。因此,你可以只输入魔法函数,它会工作。
其他有用的魔法函数有:
%cd
更改当前目录。In [1]: cd /tmp /tmp
%cpaste
允许你粘贴代码,特别是来自网站的代码,以标准Python提示符(例如>>>
)或ipython提示符(例如in [3]
)作为前缀:In [2]: %cpaste Pasting code; enter '--' alone on the line to stop or use Ctrl-D. :>>> for i in range(3): :... print(i) :-- 0 1 2
%timeit
允许你使用标准库中的timeit
模块计算短片段的执行时间:In [3]: %timeit x = 10 10000000 loops, best of 3: 39 ns per loop
另见
%debug
允许你输入事后调试。也就是说,如果你尝试执行的代码引发异常,使用%debug
将在抛出异常的地方进入调试器。In [4]: x === 10 File "<ipython-input-6-12fd421b5f28>", line 1 x === 10 ^ SyntaxError: invalid syntax In [5]: %debug > /.../IPython/core/compilerop.py (87)ast_parse() 86 and are passed to the built-in compile function.""" ---> 87 return compile(source, filename, symbol, self.flags | PyCF_ONLY_AST, 1) 88 ipdb>locals() {'source': u'x === 10\n', 'symbol': 'exec', 'self': <IPython.core.compilerop.CachingCompiler instance at 0x2ad8ef0>, 'filename': '<ipython-input-6-12fd421b5f28>'}
另见
别名 此外,IPython附带各种别名,它们模拟常见的UNIX命令行工具,例如ls
列出文件、cp
复制文件和rm
删除文件(键入alias
时会显示完整的别名列表)。
获得帮助
- 内置的备忘单可通过
%quickref
魔法函数访问。 - 输入
%magic
时会显示所有可用魔术功能的列表。