Repository: lijin-THU/notes-python
Branch: master
Commit: f56440db16e5
Files: 159
Total size: 9.3 MB
Directory structure:
gitextract_7f8496z6/
├── .gitattibutes
├── .gitignore
├── 01-python-tools/
│ ├── 01.01-python-overview.ipynb
│ ├── 01.02-ipython-interpreter.ipynb
│ ├── 01.03-ipython-notebook.ipynb
│ └── 01.04-use-anaconda.ipynb
├── 02-python-essentials/
│ ├── 02.01-a-tour-of-python.ipynb
│ ├── 02.02-python-data-types.ipynb
│ ├── 02.03-numbers.ipynb
│ ├── 02.04-strings.ipynb
│ ├── 02.05-indexing-and-slicing.ipynb
│ ├── 02.06-lists.ipynb
│ ├── 02.07-mutable-and-immutable-data-types.ipynb
│ ├── 02.08-tuples.ipynb
│ ├── 02.09-speed-comparison-between-list-&-tuple.ipynb
│ ├── 02.10-dictionaries.ipynb
│ ├── 02.11-sets.ipynb
│ ├── 02.12-frozen-sets.ipynb
│ ├── 02.13-how-python-assignment-works.ipynb
│ ├── 02.14-if-statement.ipynb
│ ├── 02.15-loops.ipynb
│ ├── 02.16-list-comprehension.ipynb
│ ├── 02.17-functions.ipynb
│ ├── 02.18-modules-and-packages.ipynb
│ ├── 02.19-exceptions.ipynb
│ ├── 02.20-warnings.ipynb
│ └── 02.21-file-IO.ipynb
├── 03-numpy/
│ ├── 03.01-numpy-overview.ipynb
│ ├── 03.02-matplotlib-basics.ipynb
│ ├── 03.03-numpy-arrays.ipynb
│ ├── 03.04-array-types.ipynb
│ ├── 03.05-array-calculation-method.ipynb
│ ├── 03.06-sorting-numpy-arrays.ipynb
│ ├── 03.07-array-shapes.ipynb
│ ├── 03.08-diagonals.ipynb
│ ├── 03.09-data-to-&-from-string.ipynb
│ ├── 03.10-array-attribute-&-method-overview-.ipynb
│ ├── 03.11-array-creation-functions.ipynb
│ ├── 03.12-matrix-object.ipynb
│ ├── 03.13-general-functions.ipynb
│ ├── 03.14-vectorizing-functions.ipynb
│ ├── 03.15-binary-operators.ipynb
│ ├── 03.16-universal-functions.ipynb
│ ├── 03.17-choose.ipynb
│ ├── 03.18-array-broadcasting.ipynb
│ ├── 03.19-reading-and-writing-arrays.ipynb
│ ├── 03.20-structured-arrays.ipynb
│ ├── 03.21-record-arrays.ipynb
│ ├── 03.22-memory-maps.ipynb
│ └── 03.23-from-matlab-to-numpy.ipynb
├── 04-scipy/
│ ├── 04.01-scienticfic-python-overview.ipynb
│ ├── 04.02-interpolation-with-scipy.ipynb
│ ├── 04.03-statistics-with-scipy.ipynb
│ ├── 04.04-curve-fitting.ipynb
│ ├── 04.05-minimization-in-python.ipynb
│ ├── 04.06-integration-in-python.ipynb
│ ├── 04.07-ODEs.ipynb
│ ├── 04.08-sparse-matrix.ipynb
│ ├── 04.09-linear-algbra.ipynb
│ ├── 04.10-sparse-linear-algebra.ipynb
│ └── JANAF_CH4.txt
├── 05-advanced-python/
│ ├── 05.01-overview-of-the-sys-module.ipynb
│ ├── 05.02-interacting-with-the-OS---os.ipynb
│ ├── 05.03-comma-separated-values.ipynb
│ ├── 05.04-regular-expression.ipynb
│ ├── 05.05-datetime.ipynb
│ ├── 05.06-sql-databases.ipynb
│ ├── 05.07-object-relational-mappers.ipynb
│ ├── 05.08-functions.ipynb
│ ├── 05.09-iterators.ipynb
│ ├── 05.10-generators.ipynb
│ ├── 05.11-context-managers-and-the-with-statement.ipynb
│ ├── 05.12-decorators.ipynb
│ ├── 05.13-decorator-usage.ipynb
│ ├── 05.14-the-operator-functools-itertools-toolz-fn-funcy-module.ipynb
│ ├── 05.15-scope.ipynb
│ └── 05.16-dynamic-code-execution.ipynb
├── 06-matplotlib/
│ ├── 06.01-pyplot-tutorial.ipynb
│ ├── 06.02-customizing-plots-with-style-sheets.ipynb
│ ├── 06.03-working-with-text---basic.ipynb
│ ├── 06.04-working-with-text---math-expression.ipynb
│ ├── 06.05-image-tutorial.ipynb
│ ├── 06.06-annotating-axes.ipynb
│ ├── 06.07-legend.ipynb
│ ├── 06.08-figures,-subplots,-axes-and-ticks.ipynb
│ ├── 06.09-do-not-trust-the-defaults.ipynb
│ └── 06.10-different-plots.ipynb
├── 07-interfacing-with-other-languages/
│ ├── 07.01-introduction.ipynb
│ ├── 07.02-python-extension-modules.ipynb
│ ├── 07.03-cython-part-1.ipynb
│ ├── 07.04-cython-part-2.ipynb
│ ├── 07.05-cython-part-3.ipynb
│ ├── 07.06-cython-part-4.ipynb
│ ├── 07.07-profiling-with-annotations.ipynb
│ ├── 07.08-ctypes.ipynb
│ ├── fib_orig.c
│ ├── fib_orig.html
│ └── fib_orig.pyx
├── 08-object-oriented-programming/
│ ├── 08.01-oop-introduction.ipynb
│ ├── 08.02-using-oop-model-a-forest-fire.ipynb
│ ├── 08.03-what-is-a-object.ipynb
│ ├── 08.04-writing-classes.ipynb
│ ├── 08.05-special-method.ipynb
│ ├── 08.06-properties.ipynb
│ ├── 08.07-forest-fire-simulation.ipynb
│ ├── 08.08-inheritance.ipynb
│ ├── 08.09-super.ipynb
│ ├── 08.10-refactoring-the-forest-fire-simutation.ipynb
│ ├── 08.11-interfaces.ipynb
│ ├── 08.12-public-private-special-in-python.ipynb
│ └── 08.13-multiple-inheritance.ipynb
├── 09-theano/
│ ├── 09.01-introduction-and-installation.ipynb
│ ├── 09.02-theano-basics.ipynb
│ ├── 09.03-gpu-on-windows.ipynb
│ ├── 09.04-graph-structures.ipynb
│ ├── 09.05-configuration-settings-and-compiling-modes.ipynb
│ ├── 09.06-conditions-in-theano.ipynb
│ ├── 09.07-loop-with-scan.ipynb
│ ├── 09.08-linear-regression.ipynb
│ ├── 09.09-logistic-regression-.ipynb
│ ├── 09.10-softmax-on-mnist.ipynb
│ ├── 09.11-net-on-mnist.ipynb
│ ├── 09.12-random-streams.ipynb
│ ├── 09.13-modern-net-on-mnist.ipynb
│ ├── 09.14-convolutional-net-on-mnist.ipynb
│ ├── 09.15-tensor-basics.ipynb
│ ├── 09.16-tensor-indexing.ipynb
│ ├── 09.17-tensor-operator-and-elementwise-operations.ipynb
│ ├── 09.18-tensor-nnet-.ipynb
│ ├── 09.19-tensor-conv.ipynb
│ ├── download_mnist.py
│ └── load.py
├── 10-something-interesting/
│ ├── 10.01-maps-using-basemap.ipynb
│ ├── 10.02-maps-using-cartopy.ipynb
│ ├── 10.03-nba-data.ipynb
│ ├── 10.04-louis-cha's-kungfu-world.ipynb
│ ├── _Player.py
│ ├── bangs.txt
│ ├── kungfu.txt
│ └── names.txt
├── 11-useful-tools/
│ ├── 11.01-pprint.ipynb
│ ├── 11.02-pickle-and-cPickle.ipynb
│ ├── 11.03-json.ipynb
│ ├── 11.04-glob.ipynb
│ ├── 11.05-shutil.ipynb
│ ├── 11.06-gzip,-zipfile,-tarfile.ipynb
│ ├── 11.07-logging.ipynb
│ ├── 11.08-string.ipynb
│ ├── 11.09-collections.ipynb
│ └── 11.10-requests.ipynb
├── 12-pandas/
│ ├── 12.01-ten-minutes-to-pandas.ipynb
│ ├── 12.02-series-in-pandas.ipynb
│ └── 12.03-dataframe-in-pandas.ipynb
├── README.md
├── generate index.ipynb
├── generate_static_files.ipynb
├── generate_static_files.py
├── index.ipynb
└── index.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattibutes
================================================
# encoding=UTF-8
================================================
FILE: .gitignore
================================================
/*/.ipynb_checkpoints/*
/.ipynb_checkpoints/*
*-checkpoint.ipynb
*.pyc
/*/mnist/*
static-files/*
/*/novels/*
/*/*.model
.DS_Store
================================================
FILE: 01-python-tools/01.01-python-overview.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"# Python 简介"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## **Python** 历史"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`Python` 的创始人为荷兰人吉多·范罗苏姆(`Guido van Rossum`)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为 ABC 语言的一种继承。之所以选中 `Python` 作为程序的名字,是因为他是 BBC 电视剧——蒙提·派森的飞行马戏团(`Monty Python's Flying Circus`)的爱好者。\n",
"\n",
"1991年,第一个 Python 编译器诞生。它是用C语言实现的,并能够调用C语言的库文件。\n",
"\n",
"`Python 2.0` 于 2000 年 10 月 16 日发布,增加了实现完整的垃圾回收,并且支持 `Unicode`。\n",
"\n",
"`Python 3.0` 于 2008 年 12 月 3 日发布,此版不完全兼容之前的 `Python` 源代码。不过,很多新特性后来也被移植到旧的 `Python 2.6/2.7` 版本。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 第一行Python代码"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"安装好 `Python` 之后,在命令行下输入:\n",
"\n",
" python\n",
"\n",
"就可以进入 `Python` 解释器的页面。\n",
"\n",
"按照惯例,第一行代码应该是输出 `\"hello world!\"`:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello world!\n"
]
}
],
"source": [
"print \"hello world!\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"相对与 `Java,C` 等语言,`Python` 仅仅使用一行语句就完成的了这个任务。\n",
"\n",
"可以将这句话的内容保存到一个文本文件中,并使用后缀名 `.py` 结尾,例如 `hello_world.py`,在命令行下运行这个程序:\n",
"\n",
" python hello_world.py\n",
"\n",
"也会输出 `\"hello world!\"` 的结果。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Python 之禅"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在 **Python** 解释器下输入 \n",
"\n",
"```import this```\n",
"\n",
"会出来这样一首小诗:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The Zen of Python, by Tim Peters\n",
"\n",
"Beautiful is better than ugly.\n",
"Explicit is better than implicit.\n",
"Simple is better than complex.\n",
"Complex is better than complicated.\n",
"Flat is better than nested.\n",
"Sparse is better than dense.\n",
"Readability counts.\n",
"Special cases aren't special enough to break the rules.\n",
"Although practicality beats purity.\n",
"Errors should never pass silently.\n",
"Unless explicitly silenced.\n",
"In the face of ambiguity, refuse the temptation to guess.\n",
"There should be one-- and preferably only one --obvious way to do it.\n",
"Although that way may not be obvious at first unless you're Dutch.\n",
"Now is better than never.\n",
"Although never is often better than *right* now.\n",
"If the implementation is hard to explain, it's a bad idea.\n",
"If the implementation is easy to explain, it may be a good idea.\n",
"Namespaces are one honking great idea -- let's do more of those!\n"
]
}
],
"source": [
"import this"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这首诗反映了**Python**的设计哲学——**Python**是一种追求优雅,明确,简单的编程语言,但事实上,产生这首诗的代码并没有写的那么简单易懂:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The Zen of Python, by Tim Peters\n",
"\n",
"Beautiful is better than ugly.\n",
"Explicit is better than implicit.\n",
"Simple is better than complex.\n",
"Complex is better than complicated.\n",
"Flat is better than nested.\n",
"Sparse is better than dense.\n",
"Readability counts.\n",
"Special cases aren't special enough to break the rules.\n",
"Although practicality beats purity.\n",
"Errors should never pass silently.\n",
"Unless explicitly silenced.\n",
"In the face of ambiguity, refuse the temptation to guess.\n",
"There should be one-- and preferably only one --obvious way to do it.\n",
"Although that way may not be obvious at first unless you're Dutch.\n",
"Now is better than never.\n",
"Although never is often better than *right* now.\n",
"If the implementation is hard to explain, it's a bad idea.\n",
"If the implementation is easy to explain, it may be a good idea.\n",
"Namespaces are one honking great idea -- let's do more of those!\n"
]
}
],
"source": [
"s = \"\"\"Gur Mra bs Clguba, ol Gvz Crgref\n",
"\n",
"Ornhgvshy vf orggre guna htyl.\n",
"Rkcyvpvg vf orggre guna vzcyvpvg.\n",
"Fvzcyr vf orggre guna pbzcyrk.\n",
"Pbzcyrk vf orggre guna pbzcyvpngrq.\n",
"Syng vf orggre guna arfgrq.\n",
"Fcnefr vf orggre guna qrafr.\n",
"Ernqnovyvgl pbhagf.\n",
"Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.\n",
"Nygubhtu cenpgvpnyvgl orngf chevgl.\n",
"Reebef fubhyq arire cnff fvyragyl.\n",
"Hayrff rkcyvpvgyl fvyraprq.\n",
"Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.\n",
"Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.\n",
"Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.\n",
"Abj vf orggre guna arire.\n",
"Nygubhtu arire vf bsgra orggre guna *evtug* abj.\n",
"Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.\n",
"Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.\n",
"Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!\"\"\"\n",
"\n",
"d = {}\n",
"for c in (65, 97):\n",
" for i in range(26):\n",
" d[chr(i+c)] = chr((i+13) % 26 + c)\n",
"\n",
"print \"\".join([d.get(c, c) for c in s])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> Life is short. Use Python."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 01-python-tools/01.02-ipython-interpreter.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"# Ipython 解释器"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 进入ipython"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"通常我们并不使用**Python**自带的解释器,而是使用另一个比较方便的解释器——**ipython**解释器,命令行下输入:\n",
"\n",
" ipython\n",
"\n",
"即可进入**ipython**解释器。\n",
"\n",
"所有在**python**解释器下可以运行的代码都可以在**ipython**解释器下运行:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello, world\n"
]
}
],
"source": [
"print \"hello, world\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以进行简单赋值操作:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"直接在解释器中输入变量名,会显示变量的值(不需要加`print`):"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"b = [1, 2, 3]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ipython magic命令"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**ipython**解释器提供了很多以百分号`%`开头的`magic`命令,这些命令很像linux系统下的命令行命令(事实上有些是一样的)。\n",
"\n",
"查看所有的`magic`命令:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/json": {
"cell": {
"!": "OSMagics",
"HTML": "Other",
"SVG": "Other",
"bash": "Other",
"capture": "ExecutionMagics",
"cmd": "Other",
"debug": "ExecutionMagics",
"file": "Other",
"html": "DisplayMagics",
"javascript": "DisplayMagics",
"latex": "DisplayMagics",
"perl": "Other",
"prun": "ExecutionMagics",
"pypy": "Other",
"python": "Other",
"python2": "Other",
"python3": "Other",
"ruby": "Other",
"script": "ScriptMagics",
"sh": "Other",
"svg": "DisplayMagics",
"sx": "OSMagics",
"system": "OSMagics",
"time": "ExecutionMagics",
"timeit": "ExecutionMagics",
"writefile": "OSMagics"
},
"line": {
"alias": "OSMagics",
"alias_magic": "BasicMagics",
"autocall": "AutoMagics",
"automagic": "AutoMagics",
"autosave": "KernelMagics",
"bookmark": "OSMagics",
"cd": "OSMagics",
"clear": "KernelMagics",
"cls": "KernelMagics",
"colors": "BasicMagics",
"config": "ConfigMagics",
"connect_info": "KernelMagics",
"copy": "Other",
"ddir": "Other",
"debug": "ExecutionMagics",
"dhist": "OSMagics",
"dirs": "OSMagics",
"doctest_mode": "BasicMagics",
"echo": "Other",
"ed": "Other",
"edit": "KernelMagics",
"env": "OSMagics",
"gui": "BasicMagics",
"hist": "Other",
"history": "HistoryMagics",
"install_default_config": "DeprecatedMagics",
"install_ext": "ExtensionMagics",
"install_profiles": "DeprecatedMagics",
"killbgscripts": "ScriptMagics",
"ldir": "Other",
"less": "KernelMagics",
"load": "CodeMagics",
"load_ext": "ExtensionMagics",
"loadpy": "CodeMagics",
"logoff": "LoggingMagics",
"logon": "LoggingMagics",
"logstart": "LoggingMagics",
"logstate": "LoggingMagics",
"logstop": "LoggingMagics",
"ls": "Other",
"lsmagic": "BasicMagics",
"macro": "ExecutionMagics",
"magic": "BasicMagics",
"matplotlib": "PylabMagics",
"mkdir": "Other",
"more": "KernelMagics",
"notebook": "BasicMagics",
"page": "BasicMagics",
"pastebin": "CodeMagics",
"pdb": "ExecutionMagics",
"pdef": "NamespaceMagics",
"pdoc": "NamespaceMagics",
"pfile": "NamespaceMagics",
"pinfo": "NamespaceMagics",
"pinfo2": "NamespaceMagics",
"popd": "OSMagics",
"pprint": "BasicMagics",
"precision": "BasicMagics",
"profile": "BasicMagics",
"prun": "ExecutionMagics",
"psearch": "NamespaceMagics",
"psource": "NamespaceMagics",
"pushd": "OSMagics",
"pwd": "OSMagics",
"pycat": "OSMagics",
"pylab": "PylabMagics",
"qtconsole": "KernelMagics",
"quickref": "BasicMagics",
"recall": "HistoryMagics",
"rehashx": "OSMagics",
"reload_ext": "ExtensionMagics",
"ren": "Other",
"rep": "Other",
"rerun": "HistoryMagics",
"reset": "NamespaceMagics",
"reset_selective": "NamespaceMagics",
"rmdir": "Other",
"run": "ExecutionMagics",
"save": "CodeMagics",
"sc": "OSMagics",
"set_env": "OSMagics",
"store": "StoreMagics",
"sx": "OSMagics",
"system": "OSMagics",
"tb": "ExecutionMagics",
"time": "ExecutionMagics",
"timeit": "ExecutionMagics",
"unalias": "OSMagics",
"unload_ext": "ExtensionMagics",
"who": "NamespaceMagics",
"who_ls": "NamespaceMagics",
"whos": "NamespaceMagics",
"xdel": "NamespaceMagics",
"xmode": "BasicMagics"
}
},
"text/plain": [
"Available line magics:\n",
"%alias %alias_magic %autocall %automagic %autosave %bookmark %cd %clear %cls %colors %config %connect_info %copy %ddir %debug %dhist %dirs %doctest_mode %echo %ed %edit %env %gui %hist %history %install_default_config %install_ext %install_profiles %killbgscripts %ldir %less %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %ls %lsmagic %macro %magic %matplotlib %mkdir %more %notebook %page %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %popd %pprint %precision %profile %prun %psearch %psource %pushd %pwd %pycat %pylab %qtconsole %quickref %recall %rehashx %reload_ext %ren %rep %rerun %reset %reset_selective %rmdir %run %save %sc %set_env %store %sx %system %tb %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode\n",
"\n",
"Available cell magics:\n",
"%%! %%HTML %%SVG %%bash %%capture %%cmd %%debug %%file %%html %%javascript %%latex %%perl %%prun %%pypy %%python %%python2 %%python3 %%ruby %%script %%sh %%svg %%sx %%system %%time %%timeit %%writefile\n",
"\n",
"Automagic is ON, % prefix IS NOT needed for line magics."
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%lsmagic"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`line magic` 以一个百分号开头,作用与一行;\n",
"\n",
"`cell magic` 以两个百分号开头,作用于整个cell。\n",
"\n",
"最后一行`Automagic is ON, % prefix IS NOT needed for line magics.`说明在此时即使不加上`%`也可以使用这些命令。\n",
"\n",
"使用 `whos` 查看当前的变量空间:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Variable Type Data/Info\n",
"----------------------------\n",
"a int 1\n",
"b list n=3\n"
]
}
],
"source": [
"%whos"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `reset` 重置当前变量空间:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%reset -f"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"再查看当前变量空间:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Interactive namespace is empty.\n"
]
}
],
"source": [
"%whos"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `pwd` 查看当前工作文件夹:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"u'C:\\\\Users\\\\lijin\\\\Documents\\\\Git\\\\python-tutorial\\\\01. python tools'"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%pwd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `mkdir` 产生新文件夹:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%mkdir demo_test"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `cd` 改变工作文件夹:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"C:\\Users\\lijin\\Documents\\Git\\python-tutorial\\01. python tools\\demo_test\n"
]
}
],
"source": [
"%cd demo_test/"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `writefile` 将cell中的内容写入文件:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Writing hello_world.py\n"
]
}
],
"source": [
"%%writefile hello_world.py\n",
"print \"hello world\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `ls` 查看当前工作文件夹的文件:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 驱动器 C 中的卷是 System\n",
" 卷的序列号是 DC4B-D785\n",
"\n",
" C:\\Users\\lijin\\Documents\\Git\\python-tutorial\\01. python tools\\demo_test 的目录\n",
"\n",
"2015/09/18 11:32
.\n",
"2015/09/18 11:32 ..\n",
"2015/09/18 11:32 19 hello_world.py\n",
" 1 个文件 19 字节\n",
" 2 个目录 121,763,831,808 可用字节\n"
]
}
],
"source": [
"%ls"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `run` 命令来运行这个代码:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello world\n"
]
}
],
"source": [
"%run hello_world.py"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"删除这个文件:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os\n",
"os.remove('hello_world.py')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看当前文件夹,`hello_world.py` 已被删除:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 驱动器 C 中的卷是 System\n",
" 卷的序列号是 DC4B-D785\n",
"\n",
" C:\\Users\\lijin\\Documents\\Git\\python-tutorial\\01. python tools\\demo_test 的目录\n",
"\n",
"2015/09/18 11:32 .\n",
"2015/09/18 11:32 ..\n",
" 0 个文件 0 字节\n",
" 2 个目录 121,763,831,808 可用字节\n"
]
}
],
"source": [
"%ls"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"返回上一层文件夹:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"C:\\Users\\lijin\\Documents\\Git\\python-tutorial\\01. python tools\n"
]
}
],
"source": [
"%cd .."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `rmdir` 删除文件夹:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%rmdir demo_test"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `hist` 查看历史命令:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"print \"hello, world\"\n",
"a = 1\n",
"a\n",
"b = [1, 2, 3]\n",
"%lsmagic\n",
"%whos\n",
"%reset -f\n",
"%whos\n",
"%pwd\n",
"%mkdir demo_test\n",
"%cd demo_test/\n",
"%%writefile hello_world.py\n",
"print \"hello world\"\n",
"%ls\n",
"%run hello_world.py\n",
"import os\n",
"os.remove('hello_world.py')\n",
"%ls\n",
"%cd ..\n",
"%rmdir demo_test\n",
"%hist\n"
]
}
],
"source": [
"%hist"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ipython 使用"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `?` 查看函数的帮助:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"sum?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `??` 查看函数帮助和函数源代码(如果是用**python**实现的):"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Using matplotlib backend: Qt4Agg\n",
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"# 导入numpy和matplotlib两个包\n",
"%pylab\n",
"# 查看其中sort函数的帮助\n",
"sort??"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**ipython** 支持使用 `` 键自动补全命令。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `_` 使用上个cell的输出结果:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"12"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = 12\n",
"a"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"25"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_ + 13"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以使用 `!` 来执行一些系统命令。"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"正在 Ping baidu.com [180.149.132.47] 具有 32 字节的数据:\n",
"来自 180.149.132.47 的回复: 字节=32 时间=69ms TTL=49\n",
"来自 180.149.132.47 的回复: 字节=32 时间=64ms TTL=49\n",
"来自 180.149.132.47 的回复: 字节=32 时间=61ms TTL=49\n",
"来自 180.149.132.47 的回复: 字节=32 时间=63ms TTL=49\n",
"\n",
"180.149.132.47 的 Ping 统计信息:\n",
" 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),\n",
"往返行程的估计时间(以毫秒为单位):\n",
" 最短 = 61ms,最长 = 69ms,平均 = 64ms\n"
]
}
],
"source": [
"!ping baidu.com"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当输入出现错误时,**ipython**会指出出错的位置和原因:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypeError",
"evalue": "unsupported operand type(s) for +: 'int' and 'str'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;36m1\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;34m\"hello\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'int' and 'str'"
]
}
],
"source": [
"1 + \"hello\""
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 01-python-tools/01.03-ipython-notebook.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Ipython notebook"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在命令行下输入命令:\n",
"\n",
" ipython notebook\n",
"\n",
"会打开一个notebook本地服务器,一般地址是 http://localhost:8888\n",
"\n",
"**`ipython notebook`** 支持两种模式的cell:\n",
"\n",
"* Markdown\n",
"* Code\n",
"\n",
"这里不做过多介绍。"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 01-python-tools/01.04-use-anaconda.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 使用 Anaconda"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Anaconda](http://www.continuum.io/downloads)是一个很好用的Python IDE,它集成了很多科学计算需要使用的**python**第三方工具包。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## conda 的使用 "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"根据自己的操作系统安装好[Anaconda](http://www.continuum.io/downloads)后,在命令行下输入:\n",
"\n",
" conda list\n",
"\n",
"可以看已经安装好的**python**第三方工具包,这里我们使用 `magic` 命令 `%%cmd` 在 `ipython cell` 中来执行这个命令:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"# packages in environment at C:\\Anaconda:\n",
"#\n",
"_license 1.1 py27_0 \n",
"alabaster 0.7.3 py27_0 \n",
"anaconda 2.3.0 np19py27_0 \n",
"argcomplete 0.8.9 py27_0 \n",
"astropy 1.0.3 np19py27_0 \n",
"babel 1.3 py27_0 \n",
"backports.ssl-match-hostname 3.4.0.2 \n",
"basemap 1.0.7 np19py27_0 \n",
"bcolz 0.9.0 np19py27_0 \n",
"beautiful-soup 4.3.2 py27_1 \n",
"beautifulsoup4 4.3.2 \n",
"binstar 0.11.0 py27_0 \n",
"bitarray 0.8.1 py27_1 \n",
"blaze 0.8.0 \n",
"blaze-core 0.8.0 np19py27_0 \n",
"blz 0.6.2 np19py27_1 \n",
"bokeh 0.9.0 np19py27_0 \n",
"boto 2.38.0 py27_0 \n",
"bottleneck 1.0.0 np19py27_0 \n",
"cartopy 0.13.0 np19py27_0 \n",
"cdecimal 2.3 py27_1 \n",
"certifi 14.05.14 py27_0 \n",
"cffi 1.1.0 py27_0 \n",
"clyent 0.3.4 py27_0 \n",
"colorama 0.3.3 py27_0 \n",
"conda 3.17.0 py27_0 \n",
"conda-build 1.14.1 py27_0 \n",
"conda-env 2.4.2 py27_0 \n",
"configobj 5.0.6 py27_0 \n",
"cryptography 0.9.1 py27_0 \n",
"cython 0.22.1 py27_0 \n",
"cytoolz 0.7.3 py27_0 \n",
"datashape 0.4.5 np19py27_0 \n",
"decorator 3.4.2 py27_0 \n",
"docutils 0.12 py27_1 \n",
"dynd-python 0.6.5 np19py27_0 \n",
"enum34 1.0.4 py27_0 \n",
"fastcache 1.0.2 py27_0 \n",
"flask 0.10.1 py27_1 \n",
"funcsigs 0.4 py27_0 \n",
"geopy 1.11.0 \n",
"geos 3.4.2 3 \n",
"gevent 1.0.1 py27_0 \n",
"gevent-websocket 0.9.3 py27_0 \n",
"greenlet 0.4.7 py27_0 \n",
"grin 1.2.1 py27_2 \n",
"h5py 2.5.0 np19py27_1 \n",
"hdf5 1.8.15.1 2 \n",
"idna 2.0 py27_0 \n",
"ipaddress 1.0.7 py27_0 \n",
"ipython 3.2.0 py27_0 \n",
"ipython-notebook 3.2.0 py27_0 \n",
"ipython-qtconsole 3.2.0 py27_0 \n",
"itsdangerous 0.24 py27_0 \n",
"jdcal 1.0 py27_0 \n",
"jedi 0.8.1 py27_0 \n",
"jinja2 2.7.3 py27_2 \n",
"jsonschema 2.4.0 py27_0 \n",
"launcher 1.0.0 1 \n",
"libpython 1.0 py27_1 \n",
"llvmlite 0.5.0 py27_0 \n",
"lxml 3.4.4 py27_0 \n",
"markupsafe 0.23 py27_0 \n",
"matplotlib 1.4.3 np19py27_1 \n",
"menuinst 1.0.4 py27_0 \n",
"mingw 4.7 1 \n",
"mistune 0.5.1 py27_1 \n",
"mock 1.3.0 py27_0 \n",
"multipledispatch 0.4.7 py27_0 \n",
"networkx 1.9.1 py27_0 \n",
"nltk 3.0.3 np19py27_0 \n",
"node-webkit 0.10.1 0 \n",
"nose 1.3.7 py27_0 \n",
"numba 0.19.1 np19py27_0 \n",
"numexpr 2.4.3 np19py27_0 \n",
"numpy 1.9.2 py27_0 \n",
"odo 0.3.2 np19py27_0 \n",
"openpyxl 1.8.5 py27_0 \n",
"owslib 0.9.0 py27_0 \n",
"pandas 0.16.2 np19py27_0 \n",
"patsy 0.3.0 np19py27_0 \n",
"pbr 1.3.0 py27_0 \n",
"pep8 1.6.2 py27_0 \n",
"pillow 2.9.0 py27_0 \n",
"pip 7.1.2 py27_0 \n",
"ply 3.6 py27_0 \n",
"proj4 4.9.1 py27_1 \n",
"psutil 2.2.1 py27_0 \n",
"py 1.4.27 py27_0 \n",
"pyasn1 0.1.7 py27_0 \n",
"pycosat 0.6.1 py27_0 \n",
"pycparser 2.14 py27_0 \n",
"pycrypto 2.6.1 py27_3 \n",
"pyepsg 0.2.0 py27_0 \n",
"pyflakes 0.9.2 py27_0 \n",
"pygments 2.0.2 py27_0 \n",
"pyopenssl 0.15.1 py27_1 \n",
"pyparsing 2.0.3 py27_0 \n",
"pyqt 4.10.4 py27_1 \n",
"pyreadline 2.0 py27_0 \n",
"pyshp 1.2.1 py27_0 \n",
"pytables 3.2.0 np19py27_0 \n",
"pytest 2.7.1 py27_0 \n",
"python 2.7.10 0 \n",
"python-dateutil 2.4.2 py27_0 \n",
"pytz 2015.4 py27_0 \n",
"pywin32 219 py27_0 \n",
"pyyaml 3.11 py27_2 \n",
"pyzmq 14.7.0 py27_0 \n",
"requests 2.7.0 py27_0 \n",
"rope 0.9.4 py27_1 \n",
"runipy 0.1.3 py27_0 \n",
"scikit-image 0.11.3 np19py27_0 \n",
"scikit-learn 0.16.1 np19py27_0 \n",
"scipy 0.16.0 np19py27_0 \n",
"setuptools 18.1 py27_0 \n",
"shapely 1.5.11 nppy27_0 \n",
"six 1.9.0 py27_0 \n",
"snowballstemmer 1.2.0 py27_0 \n",
"sockjs-tornado 1.0.1 py27_0 \n",
"sphinx 1.3.1 py27_0 \n",
"sphinx-rtd-theme 0.1.7 \n",
"sphinx_rtd_theme 0.1.7 py27_0 \n",
"spyder 2.3.5.2 py27_0 \n",
"spyder-app 2.3.5.2 py27_0 \n",
"sqlalchemy 1.0.5 py27_0 \n",
"ssl_match_hostname 3.4.0.2 py27_0 \n",
"statsmodels 0.6.1 np19py27_0 \n",
"sympy 0.7.6 py27_0 \n",
"tables 3.2.0 \n",
"theano 0.7.0 \n",
"toolz 0.7.2 py27_0 \n",
"tornado 4.2 py27_0 \n",
"ujson 1.33 py27_0 \n",
"unicodecsv 0.9.4 py27_0 \n",
"werkzeug 0.10.4 py27_0 \n",
"wheel 0.24.0 py27_0 \n",
"xlrd 0.9.3 py27_0 \n",
"xlsxwriter 0.7.3 py27_0 \n",
"xlwings 0.3.5 py27_0 \n",
"xlwt 1.0.0 py27_0 \n",
"zlib 1.2.8 0 \n"
]
}
],
"source": [
"!conda list"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"第一次安装好 [Anaconda](http://www.continuum.io/downloads) 以后,可以在命令行输入以下命令使 [Anaconda](http://www.continuum.io/downloads) 保持最新:\n",
"\n",
" conda update conda\n",
" conda update anaconda\n",
"\n",
"conda 是一种很强大的工具,具体用法可以参照它的[文档](http://conda.pydata.org/docs/)。\n",
"\n",
"也可以参考它的 [cheat sheet](http://conda.pydata.org/docs/_downloads/conda-cheatsheet.pdf) 来快速查看它的用法。\n",
"\n",
"可以使用它来安装,更新,卸载第三方的 **python** 工具包:\n",
"\n",
" conda install \n",
" conda update \n",
" conda remove \n",
"\n",
"在安装或更新时可以指定安装的版本号,例如需要使用 `numpy 1.8.1`:\n",
"\n",
" conda install numpy=1.8.1\n",
" conda update numpy=1.8.1\n",
"\n",
"查看 `conda` 的信息:\n",
"\n",
" conda info"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Current conda install:\n",
"\n",
" platform : win-64\n",
" conda version : 3.17.0\n",
" conda-build version : 1.14.1\n",
" python version : 2.7.10.final.0\n",
" requests version : 2.7.0\n",
" root environment : C:\\Anaconda (writable)\n",
" default environment : C:\\Anaconda\n",
" envs directories : C:\\Anaconda\\envs\n",
" package cache : C:\\Anaconda\\pkgs\n",
" channel URLs : https://repo.continuum.io/pkgs/free/win-64/\n",
" https://repo.continuum.io/pkgs/free/noarch/\n",
" https://repo.continuum.io/pkgs/pro/win-64/\n",
" https://repo.continuum.io/pkgs/pro/noarch/\n",
" config file : None\n",
" is foreign system : False\n",
"\n"
]
}
],
"source": [
"!conda info"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"一个很棒的功能是 `conda` 可以产生一个自定义的环境,假设在安装的是 **Python 2.7** 的情况下,想使用 **Python 3.4**,只需要在命令行下使用 `conda` 产生一个新的环境:\n",
"\n",
" conda create -n py34 python=3.4\n",
"\n",
"这里这个环境被命名为 `py34` ,可以根据喜好将 `py34` 改成其他的名字。\n",
"\n",
"使用这个环境时,只需要命令行下输入:\n",
"\n",
"``` python\n",
"activate py34 #(windows)\n",
"source activate py34 #(linux, mac)\n",
"```\n",
"\n",
"此时,我们的 **Python** 版本便是 **`python 3.4`**了。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## spyder 编辑器"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`Anaconda` 默认使用的编辑器是 `spyder`,可以在命令行下输入:\n",
"\n",
" spyder\n",
"\n",
"来进入这个编辑器,具体使用方法不做介绍。"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.01-a-tour-of-python.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Python 入门演示"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 简单的数学运算"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"整数相加,得到整数:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2 + 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"浮点数相加,得到浮点数:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4.5"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2.0 + 2.5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"整数和浮点数相加,得到浮点数:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4.5"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2 + 2.5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 变量赋值"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Python**使用`<变量名>=<表达式>`的方式对变量进行赋值"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = 0.2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 字符串 String"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"字符串的生成,单引号与双引号是等价的:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'hello world'"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = \"hello world\"\n",
"s"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'hello world'"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = 'hello world'\n",
"s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"三引号用来输入包含多行文字的字符串:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello\n",
"world\n"
]
}
],
"source": [
"s = \"\"\"hello\n",
"world\"\"\"\n",
"print s"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello\n",
"world\n"
]
}
],
"source": [
"s = '''hello\n",
"world'''\n",
"print s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"字符串的加法:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'hello world'"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = \"hello\" + \" world\"\n",
"s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"字符串索引:\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'h'"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[0]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'d'"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[-1]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'hello'"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[0:5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"字符串的分割:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['hello', 'world']"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = \"hello world\"\n",
"s.split()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看字符串的长度:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"11"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(s)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 列表 List"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python用`[]`来生成列表"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2.0, 'hello', 6.0]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = [1, 2.0, 'hello', 5 + 1.0]\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"列表加法:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2.0, 'hello', 6.0, 1, 2.0, 'hello', 6.0]"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a + a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"列表索引:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2.0"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"列表长度:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"向列表中添加元素:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2.0, 'hello', 6.0, 'world']"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.append(\"world\")\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 集合 Set"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python用{}来生成集合,集合中不含有相同元素。"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{2, 3, 4}"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = {2, 3, 4, 2}\n",
"s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"集合的长度:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(s)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"向集合中添加元素:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1, 2, 3, 4}"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.add(1)\n",
"s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"集合的交:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{2, 3, 4}"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = {1, 2, 3, 4}\n",
"b = {2, 3, 4, 5}\n",
"a & b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"并:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1, 2, 3, 4, 5}"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a | b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"差:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1}"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a - b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对称差:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1, 5}"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a ^ b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 字典 Dictionary "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python用`{key:value}`来生成Dictionary。"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'cats': 4, 'dogs': 5}"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d = {'dogs':5, 'cats':4}\n",
"d"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"字典的大小"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(d)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看字典某个键对应的值:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"5"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d[\"dogs\"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"修改键值:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'cats': 4, 'dogs': 2}"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d[\"dogs\"] = 2\n",
"d"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"插入键值:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'cats': 4, 'dogs': 2, 'pigs': 7}"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d[\"pigs\"] = 7\n",
"d"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"所有的键:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['cats', 'dogs', 'pigs']"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.keys()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"所有的值:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[4, 2, 7]"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.values()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"所有的键值对:"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[('cats', 4), ('dogs', 2), ('pigs', 7)]"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.items()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 数组 Numpy Arrays"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"需要先导入需要的包,Numpy数组可以进行很多列表不能进行的运算。"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 2, 3, 4])"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from numpy import array\n",
"a = array([1, 2, 3, 4])\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"加法:"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([3, 4, 5, 6])"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a + 2"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([2, 4, 6, 8])"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a + a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 画图 Plot"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python提供了一个很像MATLAB的绘图接口。"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"from matplotlib.pyplot import plot\n",
"plot(a, a**2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 循环 Loop"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['1', '2', '3', '4', '5']"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"line = '1 2 3 4 5'\n",
"fields = line.split()\n",
"fields"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"15"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"total = 0\n",
"for field in fields:\n",
" total += int(field)\n",
"total"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python中有一种叫做列表推导式(List comprehension)的用法:"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2, 3, 4, 5]"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"numbers = [int(field) for field in fields]\n",
"numbers"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"15"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sum(numbers)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"写在一行:"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"15"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sum([int(field) for field in line.split()])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 文件操作 File IO"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"d:\\Users\\lijin\n"
]
}
],
"source": [
"cd ~"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"写文件:"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"f = open('data.txt', 'w')\n",
"f.write('1 2 3 4\\n')\n",
"f.write('2 3 4 5\\n')\n",
"f.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"读文件:"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"[[1, 2, 3, 4], [2, 3, 4, 5]]"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f = open('data.txt')\n",
"data = []\n",
"for line in f:\n",
" data.append([int(field) for field in line.split()])\n",
"f.close()\n",
"data\n"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 2, 3, 4]\n",
"[2, 3, 4, 5]\n"
]
}
],
"source": [
"for row in data:\n",
" print row"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"删除文件:"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import os\n",
"os.remove('data.txt')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 函数 Function"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python用关键词`def`来定义函数。"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"6"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def poly(x, a, b, c):\n",
" y = a * x ** 2 + b * x + c\n",
" return y\n",
"\n",
"x = 1\n",
"poly(x, 1, 2, 3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"用Numpy数组做参数x:"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 6, 11, 18])"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = array([1, 2, 3])\n",
"poly(x, 1, 2, 3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以在定义时指定参数的默认值:"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from numpy import arange\n",
"\n",
"def poly(x, a = 1, b = 2, c = 3):\n",
" y = a*x**2 + b*x + c\n",
" return y\n",
"\n",
"x = arange(10)\n",
"x\n",
"array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 3, 6, 11, 18, 27, 38, 51, 66, 83, 102])"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"poly(x)"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 3, 5, 9, 15, 23, 33, 45, 59, 75, 93])"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"poly(x, b = 1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 模块 Module"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python中使用`import`关键词来导入模块。"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当前进程号:"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4400"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"os.getpid()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"系统分隔符:"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'\\\\'"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"os.sep"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## - 类 Class"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"用`class`来定义一个类。\n",
"`Person(object)`表示继承自`object`类;\n",
"`__init__`函数用来初始化对象;\n",
"`self`表示对象自身,类似于`C` `Java`里面`this`。"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class Person(object):\n",
" def __init__(self, first, last, age):\n",
" self.first = first\n",
" self.last = last\n",
" self.age = age\n",
" def full_name(self):\n",
" return self.first + ' ' + self.last"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"构建新对象:"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"person = Person('Mertle', 'Sedgewick', 52)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"调用对象的属性:"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'Mertle'"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"person.first"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"调用对象的方法:"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'Mertle Sedgewick'"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"person.full_name()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"修改对象的属性:"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"person.last = 'Smith'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"添加新属性,d是之前定义的字典:"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'cats': 4, 'dogs': 2, 'pigs': 7}"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"person.critters = d\n",
"person.critters"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 网络数据 Data from Web"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"url = 'http://ichart.finance.yahoo.com/table.csv?s=GE&d=10&e=5&f=2013&g=d&a=0&b=2&c=1962&ignore=.csv'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"处理后就相当于一个可读文件:"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close\\n'],\n",
" ['2013-11-05', '26.32', '26.52', '26.26', '26.42', '24897500', '24.872115\\n'],\n",
" ['2013-11-04',\n",
" '26.59',\n",
" '26.59',\n",
" '26.309999',\n",
" '26.43',\n",
" '28166100',\n",
" '24.88153\\n'],\n",
" ['2013-11-01',\n",
" '26.049999',\n",
" '26.639999',\n",
" '26.030001',\n",
" '26.540001',\n",
" '55634500',\n",
" '24.985086\\n']]"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import urllib2\n",
"ge_csv = urllib2.urlopen(url)\n",
"data = []\n",
"for line in ge_csv:\n",
" data.append(line.split(','))\n",
"data[:4]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用`pandas`处理数据:"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAWwAAAEECAYAAAAMOA6OAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XeYVdW5+PHvC0PvdagCCqgoBjEaVNRBxaveBDUEFY1o\n9KIx0SDGGCS/6BhjjBqNEvXGHvCqWKNy1asoDkGDEghFYBRBUKSXoUoZhvf3x9qbUzgzp/f38zzz\n7HL23mftNWfeWWftVURVMcYYk/vqZTsBxhhjYmMB2xhj8oQFbGOMyRMWsI0xJk9YwDbGmDxhAdsY\nY/JETAFbROqLyFwRmeJttxWRqSKyRETeFZHW6U2mMcaYWEvYY4DFgN9oexwwVVX7Au9728YYY9Io\nasAWkW7AucATgHi7hwETvfWJwPlpSZ0xxpgDYilh/xn4FbA/aF+pqq7z1tcBpalOmDHGmFB1BmwR\n+T6wXlXnEihdh1DXt936txtjTJqVRHn9JGCYiJwLNAZaisgzwDoR6aSqa0WkM7A+0skiYoHcGGMS\noKoHFZLrLGGr6nhV7a6qvYCLgWmqehnwBnC5d9jlwGt1XKMgfm677baspyHbP5YHlgfFfv+ZyoPa\nxNsO27/SH4GhIrIEON3bNsYYk0bRqkQOUNXpwHRvfTNwZroSZYwx5mDW0zFGZWVl2U5C1lkeWB4U\n+/1DdvNA6qovSfriIprO6xtjTCESETTCQ8eYq0RSnRiTG+wfqjH5IysBGyxQ5AL7x2lMfrE6bGOM\nyRMWsI0xJk9YwDbGmDxhATtJV1xxBb/97W8BmDFjBkcccURKrmVMrtu9G376U6iqynZKiocF7FqU\nlZXRtm1b9u7dW+dxInLg4d0pp5zCZ599VuuxqsqECRPo378/zZs3p3v37lx44YUsXLjwoGsZk+sW\nLIBHH4W2bbOdkuJhATuCFStWMGvWLDp27Mgbb7wR9fhYW7yMGTOGCRMm8Je//IWqqiqWLFnC+eef\nz1tvvRX3tYzJNvuoZp4F7AgmTZrEmWeeyWWXXcbEiRNDXps7dy4DBw6kZcuWXHzxxezevfvAaxUV\nFXTv3j3iNb/44gseeeQRJk+eTFlZGQ0aNKBJkyZccskl3HzzzRHPefzxx+nTpw/t2rXjvPPOY82a\nNQdeGzt2LKWlpbRq1YpjjjmGRYsWAbBnzx5uuukmevToQadOnbj22mtD0mhMquzfH/0Yk1oWsCOY\nNGkSF110ERdeeCHvvPMO69e70WP37t3L+eefz+WXX05VVRUjRozglVdeiaka4/3336d79+5897vf\njSkN06ZNY/z48bz00kusWbOGHj16cPHFFwPwzjvvMGPGDL744gu2bt3KSy+9RLt27QAYN24cS5cu\nZf78+SxdupRVq1bxu9/9LsGcMKZ2FrAzLycDtkhqfhLx4YcfsmrVKoYNG0afPn3o168fzz33HAAf\nf/wx+/btY8yYMdSvX5/hw4dz/PHHx3TdTZs20alTpxju3SX82Wef5aqrrmLAgAE0bNiQu+66i5kz\nZ/L111/TsGFDtm/fTmVlJfv37+fwww+nU6dOqCqPP/44999/P61bt6Z58+bccsstTJ48ObHMMKYO\nFrAzLycDtmpqfhIxceJEzjrrLFq0aAHAiBEjDlSLrF69mq5du4Yc36NHj5iu265du5AqjWj8UrWv\nWbNmtGvXjlWrVjFkyBCuu+46fv7zn1NaWso111zD9u3b2bBhA99++y3HHXccbdq0oU2bNpxzzjls\n3Lgx5vc1JlZWh515ORmws2XXrl28+OKLTJs2jc6dO9O5c2fuu+8+FixYwIIFC+jSpQurVq0KOeer\nr76K6dpnnHEG33zzDXPmzInp+C5durBixYoD2zt37mTTpk0H/mFcf/31zJ49m8WLF7NkyRLuvfde\nOnToQJMmTVi8eDFVVVVUVVWxZcsWtm3bFlsGGBMHK2FnngXsIK+99holJSVUVlYyf/585s+fT2Vl\nJYMHD2bSpEmceOKJlJSUMGHCBKqrq3n11Vf517/+FdO1+/Tpw89+9jNGjhzJ9OnT2bt3L7t372by\n5MncfffdACGzTYwcOZKnn36a+fPns2fPHsaPH8+gQYM45JBDmD17Np988gnV1dU0bdqUxo0bU79+\nfUSE0aNHc8MNN7BhwwYAVq1axbvvvpueDDNFLUqLV5MGUQO2iDQWkU9EZJ6ILBaRu7z95SLyjYjM\n9X7OTn9y02vSpElceeWVdOvWjY4dO9KxY0dKS0u57rrreO6556hfvz6vvvoqf/vb32jXrh0vvvgi\nw4cPj/n6EyZMOFCV0aZNG3r37s3rr7/OsGHDgNB22GeccQZ33HEHw4cPp0uXLixfvvxAXfS2bdu4\n+uqradu2LT179qR9+/b86le/AuDuu++md+/eDBo0iFatWjF06FCWLFmS4pwyBl5/PdspKD4xjYct\n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\nG8sUQyi3yAAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ge_csv = urllib2.urlopen(url)\n",
"import pandas\n",
"ge = pandas.read_csv(ge_csv, index_col=0, parse_dates=True)\n",
"ge.plot(y='Adj Close')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.02-python-data-types.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Python 数据类型"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 常用数据类型 Common Data Types"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"| 类型| 例子|\n",
"| ----- | ----- |\n",
"| 整数 | `-100` |\n",
"| 浮点数 | `3.1416` |\n",
"| 字符串 | `'hello'` |\n",
"| 列表 | `[1, 1.2, 'hello']` |\n",
"| 字典 | `{'dogs': 5, 'pigs': 3}`|\n",
"| Numpy数组 | `array([1, 2, 3])`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 其他类型 Others"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"| 类型| 例子|\n",
"| ------- | ----- |\n",
"| 长整型 | `1000000000000L`\n",
"| 布尔型 | `True, False`\n",
"| 元组 | `('ring', 1000)`\n",
"| 集合 | `{1, 2, 3}`\n",
"| Pandas类型| `DataFrame, Series`\n",
"| 自定义 | `Object Oriented Classes`"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.03-numbers.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 数字"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 整型 Integers"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"整型运算,加减乘:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2 + 2"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-1"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"3 - 4"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"20"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"4 * 5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在**Python 2.7**中,整型的运算结果只能返回整型,**除法**的结果也不例外。\n",
"\n",
"例如`12 / 5`返回的结果并不是2.4,而是2:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"12 / 5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"幂指数:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"32"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2 ** 5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"取余:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"32 % 5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"赋值给变量:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = 1\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用`type()`函数来查看变量类型:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"int"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"整型数字的最大最小值:\n",
"\n",
"在 32 位系统中,一个整型 4 个字节,最小值 `-2,147,483,648`,最大值 `2,147,483,647`。\n",
"\n",
"在 64 位系统中,一个整型 8 个字节,最小值 `-9,223,372,036,854,775,808`,最大值 `9,223,372,036,854,775,807`。"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2147483647"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import sys\n",
"sys.maxint"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 长整型 Long Integers"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当整型超出范围时,**Python**会自动将整型转化为长整型,不过长整型计算速度会比整型慢。"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"a = sys.maxint + 1\n",
"print type(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"长整型的一个标志是后面以字母L结尾:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2147483648L"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以在赋值时强制让类型为长整型:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"long"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b = 1234L\n",
"type(b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"长整型可以与整型在一起进行计算,返回的类型还是长整型:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"2147483644L"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a - 4"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 浮点数 Floating Point Numbers"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"float"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = 1.4\n",
"type(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在之前的除法例子`12 / 5`中,假如想要使返回的结果为2.4,可以将它们写成浮点数的形式:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2.4"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"12.0 / 5.0"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2.4"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"12 / 5.0"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"2.4"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"12.0 / 5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"上面的例子说明,浮点数与整数进行运算时,返回的仍然是浮点数:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"7.4"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"5 + 2.4"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"浮点数也可以进行与整数相似的运算,甚至可以取余:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.19999999999999973"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"3.4 - 3.2"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"44.7"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"12.3 + 32.4"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"6.25"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2.5 ** 2"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1.2999999999999998"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"3.4 % 2.1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Python**的浮点数标准与**C**,**Java**一致,都是[IEEE 754 floating point standard](http://en.wikipedia.org/wiki/IEEE_floating_point)。\n",
"\n",
"注意看 `3.4 - 3.2` 的结果并不是我们预期的`0.2`,这是因为浮点数本身储存方式引起的,浮点数本身会存在一点误差。\n",
"\n",
"事实上,**Python** 中储存的值为'0.199999999999999733546474089962430298328399658203125',因为这是最接近0.2的浮点数。|"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'0.199999999999999733546474089962430298328399658203125'"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"'{:.52}'.format(3.4 - 3.2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当我们使用`print`显示时,**Python**会自动校正这个结果"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.2\n"
]
}
],
"source": [
"print 3.4 - 3.2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以用`sys.float_info`来查看浮点数的信息:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import sys\n",
"sys.float_info"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"例如浮点数能表示的最大值:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1.7976931348623157e+308"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sys.float_info.max"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"浮点数能表示的最接近0的值:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2.2250738585072014e-308"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sys.float_info.min"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"浮点数的精度:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2.220446049250313e-16"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sys.float_info.epsilon"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 复数 Complex Numbers"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Python** 使用 `j` 来表示复数的虚部:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"complex"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = 1 + 2j\n",
"type(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以查看它的实部,虚部以及共轭:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1.0"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.real"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2.0"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.imag"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1-2j)"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.conjugate()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##交互计算"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以将复杂的表达式放在一起计算:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-27"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"1 + 2 - (3 * 4 / 6) ** 5 + 7 % 5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在**Python**中运算是有优先级的,优先级即算术的先后顺序,比如“先乘除后加减”和“先算括号里面的”都是两种优先级的规则,优先级从高到低排列如下:\n",
"\n",
"- `( )` 括号\n",
"- `**` 幂指数运算\n",
"- `* / // %` 乘,除,整数除法,取余运算\n",
"- '+ -' 加减\n",
"\n",
"整数除法,返回的是比结果小的最大整数值:"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2.0"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"12.3 // 5.2"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-4.0"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"12.3 // -4"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 简单的数学函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"绝对值:"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"12.4"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"abs(-12.4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"取整:"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"22.0"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"round(21.6)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最大最小值:"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2\n",
"4\n"
]
}
],
"source": [
"print min(2, 3, 4, 5)\n",
"print max(2, 4, 3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 变量名覆盖"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不要用内置的函数来命名变量,否则会出现意想不到的结果:"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"builtin_function_or_method"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(max)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不要这样做!!!"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"int"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"max = 1\n",
"type(max)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypeError",
"evalue": "'int' object is not callable",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mmax\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m4\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m5\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m: 'int' object is not callable"
]
}
],
"source": [
"max(4, 5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 类型转换"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"浮点数转整型,只保留整数部分:"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"12\n",
"-3\n"
]
}
],
"source": [
"print int(12.324)\n",
"print int(-3.32)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"整型转浮点型:"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.2\n"
]
}
],
"source": [
"print float(1.2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 其他表示"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"除了10进制外,整数还有其他类型的表示方法。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"科学计数法:"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1e-06"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"1e-6"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"16进制,前面加`0x`修饰,后面使用数字0-9A-F:"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"255"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"0xFF"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"8进制,前面加`0`或者`0o`修饰,后面使用数字0-7:"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"55"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"067"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"2进制,前面加`0b`修饰,后面使用数字0或1:"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"42"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"0b101010"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 原地计算 In-place"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Python**可以使用下面的形式进行原地计算:"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4.5\n",
"9.0\n",
"6.0\n"
]
}
],
"source": [
"b = 2.5\n",
"b += 2\n",
"print b\n",
"b *= 2\n",
"print b\n",
"b -= 3\n",
"print b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 布尔型 Boolean Data Type"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"布尔型可以看成特殊的二值变量,其取值为`True`和`False`:"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"bool"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q = True\n",
"type(q)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以用表达式构建布尔型变量:"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"False\n"
]
}
],
"source": [
"q = 1 > 2\n",
"print q"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"常用的比较符号包括:\n",
"\n",
" <, >, <=, >=, ==, !=\n",
"\n",
"**Python**支持链式比较:"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = 2 \n",
"1 < x <= 3"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.04-strings.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 字符串"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 生成字符串"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Python**中可以使用一对单引号''或者双引号\"\"生成字符串。"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello, world\n"
]
}
],
"source": [
"s = \"hello, world\"\n",
"print s"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello world\n"
]
}
],
"source": [
"s = 'hello world'\n",
"print s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 简单操作"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"加法:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'hello world'"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = 'hello ' + 'world'\n",
"s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"字符串与数字相乘:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'echoechoecho'"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\"echo\" * 3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"字符串长度:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"11"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(s)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 字符串方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Python**是一种面向对象的语言,面向对象的语言中一个必不可少的元素就是方法,而字符串是对象的一种,所以有很多可用的方法。\n",
"\n",
"跟很多语言一样,**Python**使用以下形式来调用方法:\n",
"\n",
" 对象.方法(参数)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 分割"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"s.split()将s按照空格(包括多个空格,制表符`\\t`,换行符`\\n`等)分割,并返回所有分割得到的字符串。"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['1', '2', '3', '4', '5']\n"
]
}
],
"source": [
"line = \"1 2 3 4 5\"\n",
"numbers = line.split()\n",
"print numbers"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"s.split(sep)以给定的sep为分隔符对s进行分割。"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['1', '2', '3', '4', '5']\n"
]
}
],
"source": [
"line = \"1,2,3,4,5\"\n",
"numbers = line.split(',')\n",
"print numbers"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 连接"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"与分割相反,s.join(str_sequence)的作用是以s为连接符将字符串序列str_sequence中的元素连接起来,并返回连接后得到的新字符串:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'1 2 3 4 5'"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = ' '\n",
"s.join(numbers)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'1,2,3,4,5'"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = ','\n",
"s.join(numbers)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 替换"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"s.replace(part1, part2)将字符串s中指定的部分part1替换成想要的部分part2,并返回新的字符串。"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'hello python'"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = \"hello world\"\n",
"s.replace('world', 'python')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"此时,s的值并没有变化,替换方法只是生成了一个新的字符串。"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'hello world'"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 大小写转换"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"s.upper()方法返回一个将s中的字母全部大写的新字符串。\n",
"\n",
"s.lower()方法返回一个将s中的字母全部小写的新字符串。"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'HELLO WORLD'"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\"hello world\".upper()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这两种方法也不会改变原来s的值:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello world\n",
"HELLO WORLD\n"
]
}
],
"source": [
"s = \"HELLO WORLD\"\n",
"print s.lower()\n",
"print s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 去除多余空格"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"s.strip()返回一个将s两端的多余空格除去的新字符串。\n",
"\n",
"s.lstrip()返回一个将s开头的多余空格除去的新字符串。\n",
"\n",
"s.rstrip()返回一个将s结尾的多余空格除去的新字符串。"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'hello world'"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = \" hello world \"\n",
"s.strip()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"s的值依然不会变化:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"' hello world '"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'hello world '"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.lstrip()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"' hello world'"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.rstrip()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 更多方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以使用dir函数查看所有可以使用的方法:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['__add__',\n",
" '__class__',\n",
" '__contains__',\n",
" '__delattr__',\n",
" '__doc__',\n",
" '__eq__',\n",
" '__format__',\n",
" '__ge__',\n",
" '__getattribute__',\n",
" '__getitem__',\n",
" '__getnewargs__',\n",
" '__getslice__',\n",
" '__gt__',\n",
" '__hash__',\n",
" '__init__',\n",
" '__le__',\n",
" '__len__',\n",
" '__lt__',\n",
" '__mod__',\n",
" '__mul__',\n",
" '__ne__',\n",
" '__new__',\n",
" '__reduce__',\n",
" '__reduce_ex__',\n",
" '__repr__',\n",
" '__rmod__',\n",
" '__rmul__',\n",
" '__setattr__',\n",
" '__sizeof__',\n",
" '__str__',\n",
" '__subclasshook__',\n",
" '_formatter_field_name_split',\n",
" '_formatter_parser',\n",
" 'capitalize',\n",
" 'center',\n",
" 'count',\n",
" 'decode',\n",
" 'encode',\n",
" 'endswith',\n",
" 'expandtabs',\n",
" 'find',\n",
" 'format',\n",
" 'index',\n",
" 'isalnum',\n",
" 'isalpha',\n",
" 'isdigit',\n",
" 'islower',\n",
" 'isspace',\n",
" 'istitle',\n",
" 'isupper',\n",
" 'join',\n",
" 'ljust',\n",
" 'lower',\n",
" 'lstrip',\n",
" 'partition',\n",
" 'replace',\n",
" 'rfind',\n",
" 'rindex',\n",
" 'rjust',\n",
" 'rpartition',\n",
" 'rsplit',\n",
" 'rstrip',\n",
" 'split',\n",
" 'splitlines',\n",
" 'startswith',\n",
" 'strip',\n",
" 'swapcase',\n",
" 'title',\n",
" 'translate',\n",
" 'upper',\n",
" 'zfill']"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dir(s)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 多行字符串"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python 用一对 `\"\"\"` 或者 `'''` 来生成多行字符串:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello world.\n",
"it is a nice day.\n"
]
}
],
"source": [
"a = \"\"\"hello world.\n",
"it is a nice day.\"\"\"\n",
"print a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在储存时,我们在两行字符间加上一个换行符 `'\\n'`"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'hello world.\\nit is a nice day.'"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## 使用 `()` 或者 `\\` 来换行"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当代码太长或者为了美观起见时,我们可以使用两种方法来将一行代码转为多行代码:\n",
"\n",
"* ()\n",
"* \\"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\"hello, world. it's a nice day. my name is xxx\""
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = (\"hello, world. \"\n",
" \"it's a nice day. \"\n",
" \"my name is xxx\")\n",
"a"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"\"hello, world. it's a nice day. my name is xxx\""
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = \"hello, world. \" \\\n",
" \"it's a nice day. \" \\\n",
" \"my name is xxx\"\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 强制转换为字符串"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* `str(ob)`强制将`ob`转化成字符串。 \n",
"* `repr(ob)`也是强制将`ob`转化成字符串。\n",
"\n",
"不同点如下:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'3.3'"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"str(1.1 + 2.2)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'3.3000000000000003'"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"repr(1.1 + 2.2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 整数与不同进制的字符串的转化"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以将整数按照不同进制转化为不同类型的字符串。\n",
"\n",
"十六进制:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'0xff'"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hex(255)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"八进制:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"'0377'"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"oct(255)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"二进制:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'0b11111111'"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bin(255)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以使用 `int` 将字符串转为整数:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"23"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"int('23')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"还可以指定按照多少进制来进行转换,最后返回十进制表达的整数:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"255"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"int('FF', 16)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"255"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"int('377', 8)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"255"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"int('11111111', 2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`float` 可以将字符串转换为浮点数:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"3.5"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"float('3.5')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 格式化字符串"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Python**用字符串的`format()`方法来格式化字符串。\n",
"\n",
"具体用法如下,字符串中花括号 `{}` 的部分会被format传入的参数替代,传入的值可以是字符串,也可以是数字或者别的对象。"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'a b c'"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"'{} {} {}'.format('a', 'b', 'c')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以用数字指定传入参数的相对位置:"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'c b a'"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"'{2} {1} {0}'.format('a', 'b', 'c')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"还可以指定传入参数的名称:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'blue 10 1.5'"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"'{color} {n} {x}'.format(n=10, x=1.5, color='blue')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以在一起混用:"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'blue 10 1.5 foo'"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"'{color} {0} {x} {1}'.format(10, 'foo', x = 1.5, color='blue')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以用`{:}`指定格式:"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'foo 5 6.28'"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from math import pi\n",
"\n",
"'{0:10} {1:10d} {2:10.2f}'.format('foo', 5, 2 * pi)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"具体规则与C中相同。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"也可以使用旧式的 `%` 方法进行格式化:"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"s = \"some numbers:\"\n",
"x = 1.34\n",
"y = 2\n",
"# 用百分号隔开,括号括起来\n",
"t = \"%s %f, %d\" % (s, x, y)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'some numbers: 1.340000, 2'"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.05-indexing-and-slicing.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 索引和分片"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 索引"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于一个有序序列,可以通过索引的方法来访问对应位置的值。字符串便是一个有序序列的例子,**Python**使用 `[]` 来对有序序列进行索引。"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'h'"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = \"hello world\"\n",
"s[0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Python**中索引是从 `0` 开始的,所以索引 `0` 对应与序列的第 `1` 个元素。为了得到第 `5` 个元素,需要使用索引值 `4` 。"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'o'"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[4]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"除了正向索引,**Python**还引入了负索引值的用法,即从后向前开始计数,例如,索引 `-2` 表示倒数第 `2` 个元素:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'l'"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[-2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"单个索引大于等于字符串的长度时,会报错:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "IndexError",
"evalue": "string index out of range",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ms\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m11\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mIndexError\u001b[0m: string index out of range"
]
}
],
"source": [
"s[11]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 分片"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"分片用来从序列中提取出想要的子序列,其用法为:\n",
"\n",
" var[lower:upper:step]\n",
"\n",
"其范围包括 `lower` ,但不包括 `upper` ,即 `[lower, upper)`, `step` 表示取值间隔大小,如果没有默认为`1`。"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'hello world'"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'el'"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[1:3]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"分片中包含的元素的个数为 `3-1=2` 。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"也可以使用负索引来指定分片的范围:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'ello wor'"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[1:-2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"包括索引 `1` 但是不包括索引 `-2` 。\n",
"\n",
"lower和upper可以省略,省略lower意味着从开头开始分片,省略upper意味着一直分片到结尾。"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'hel'"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[:3]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'rld'"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[-3:]"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'hello world'"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"每隔两个取一个值:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'hlowrd'"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[::2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当step的值为负时,省略lower意味着从结尾开始分片,省略upper意味着一直分片到开头。"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'dlrow olleh'"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[::-1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当给定的upper超出字符串的长度(注意:因为不包含upper,所以可以等于)时,Python并不会报错,不过只会计算到结尾。"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'hello world'"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[:100]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 使用“0”作为索引开头的原因"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 使用`[low, up)`形式的原因"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"假设需要表示字符串 `hello` 中的内部子串 `el` :\n",
"\n",
"|方式|`[low, up)`|`(low, up]`|`(lower, upper)`|`[lower, upper]`\n",
"|--|--|--|--|--|\n",
"|表示|`[1,3)`|`(0,2]`|`(0,3)`|`[1,2]`\n",
"|序列长度|`up - low`|`up - low`|`up - low - 1`|`up - low + 1`\n",
"\n",
"对长度来说,前两种方式比较好,因为不需要烦人的加一减一。\n",
"\n",
"现在只考虑前两种方法,假设要表示字符串`hello`中的从头开始的子串`hel`:\n",
"\n",
"|方式|`[low, up)`|`(low, up]`\n",
"|--|--|\n",
"|表示|`[0,3)`|`(-1,2]`|\n",
"|序列长度|`up - low`|`up - low`|\n",
"\n",
"第二种表示方法从`-1`开始,不是很好,所以选择使用第一种`[low, up)`的形式。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 使用0-base的形式"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> Just too beautiful to ignore. \n",
"----Guido van Rossum"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"两种简单的情况:\n",
"\n",
"- 从头开始的n个元素;\n",
" - 使用0-base:`[0, n)`\n",
" - 使用1-base:`[1, n+1)`\n",
"\n",
"- 第`i+1`个元素到第`i+n`个元素。\n",
" - 使用0-base:`[i, n+i)`\n",
" - 使用1-base:`[i+1, n+i+1)`\n",
"\n",
"1-base有个`+1`部分,所以不推荐。\n",
"\n",
"综合这两种原因,**Python**使用0-base的方法来进行索引。"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.06-lists.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 列表"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在**Python**中,列表是一个有序的序列。\n",
"\n",
"列表用一对 `[]` 生成,中间的元素用 `,` 隔开,其中的元素不需要是同一类型,同时列表的长度也不固定。"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 2.0, 'hello']\n"
]
}
],
"source": [
"l = [1, 2.0, 'hello']\n",
"print l"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"空列表可以用 `[]` 或者 `list()` 生成:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"empty_list = []\n",
"empty_list"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"empty_list = list()\n",
"empty_list"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 列表操作"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"与字符串类似,列表也支持以下的操作:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 长度"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"用 `len` 查看列表长度:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(l)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 加法和乘法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"列表加法,相当于将两个列表按顺序连接:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2, 3, 3.2, 'hello']"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = [1, 2, 3]\n",
"b = [3.2, 'hello']\n",
"a + b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"列表与整数相乘,相当于将列表重复相加:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2.0, 'hello', 1, 2.0, 'hello']"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"l * 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 索引和分片"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"列表和字符串一样可以通过索引和分片来查看它的元素。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"索引:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"10"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = [10, 11, 12, 13, 14]\n",
"a[0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"反向索引:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"14"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[-1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"分片:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[12, 13]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[2:-1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"与字符串不同的是,列表可以通过索引和分片来修改。\n",
"\n",
"对于字符串,如果我们通过索引或者分片来修改,**Python**会报错:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypeError",
"evalue": "'str' object does not support item assignment",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0ms\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m\"hello world\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;31m# 把开头的 h 改成大写\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0ms\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'H'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m: 'str' object does not support item assignment"
]
}
],
"source": [
"s = \"hello world\"\n",
"# 把开头的 h 改成大写\n",
"s[0] = 'H'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"而这种操作对于列表来说是可以的:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[100, 11, 12, 13, 14]\n"
]
}
],
"source": [
"a = [10, 11, 12, 13, 14]\n",
"a[0] = 100\n",
"print a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这种赋值也适用于分片,例如,将列表的第2,3两个元素换掉:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[100, 1, 2, 13, 14]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[1:3] = [1, 2]\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"事实上,对于连续的分片(即步长为 `1` ),**Python**采用的是整段替换的方法,两者的元素个数并不需要相同,例如,将 `[11,12]` 替换为 `[1,2,3,4]`:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[10, 1, 2, 3, 4, 13, 14]\n"
]
}
],
"source": [
"a = [10, 11, 12, 13, 14]\n",
"a[1:3] = [1, 2, 3, 4]\n",
"print a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这意味着,可以用这种方法来删除列表中一个连续的分片:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 2]\n",
"[10, 11, 12]\n"
]
}
],
"source": [
"a = [10, 1, 2, 11, 12]\n",
"print a[1:3]\n",
"a[1:3] = []\n",
"print a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于不连续(间隔step不为1)的片段进行修改时,两者的元素数目必须一致:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1, 11, 2, 13, 3]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = [10, 11, 12, 13, 14]\n",
"a[::2] = [1, 2, 3]\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"否则会报错:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"ename": "ValueError",
"evalue": "attempt to assign sequence of size 0 to extended slice of size 3",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ma\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mValueError\u001b[0m: attempt to assign sequence of size 0 to extended slice of size 3"
]
}
],
"source": [
"a[::2] = []"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 删除元素"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Python**提供了删除列表中元素的方法 'del'。\n",
"\n",
"删除列表中的第一个元素:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['a', 'b', 'c']\n"
]
}
],
"source": [
"a = [1002, 'a', 'b', 'c']\n",
"del a[0]\n",
"print a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"删除第2到最后一个元素:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1002]"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = [1002, 'a', 'b', 'c']\n",
"del a[1:]\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"删除间隔的元素:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2]"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = ['a', 1, 'b', 2, 'c']\n",
"del a[::2]\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 测试从属关系"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"用 `in` 来看某个元素是否在某个序列(不仅仅是列表)中,用not in来判断是否不在某个序列中。"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n",
"False\n"
]
}
],
"source": [
"a = [10, 11, 12, 13, 14]\n",
"print 10 in a\n",
"print 10 not in a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"也可以作用于字符串:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n",
"False\n"
]
}
],
"source": [
"s = 'hello world'\n",
"print 'he' in s\n",
"print 'world' not in s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"列表中可以包含各种对象,甚至可以包含列表:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[12, 13]"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = [10, 'eleven', [12, 13]]\n",
"a[2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"a[2]是列表,可以对它再进行索引:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"13"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[2][1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 列表方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 不改变列表的方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 列表中某个元素个数count"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`l.count(ob)` 返回列表中元素 `ob` 出现的次数。"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = [11, 12, 13, 12, 11]\n",
"a.count(11)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 列表中某个元素位置index"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`l.index(ob)` 返回列表中元素 `ob` 第一次出现的索引位置,如果 `ob` 不在 `l` 中会报错。"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.index(12)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不存在的元素会报错:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "ValueError",
"evalue": "1 is not in list",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ma\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mValueError\u001b[0m: 1 is not in list"
]
}
],
"source": [
"a.index(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 改变列表的方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 向列表添加单个元素"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`l.append(ob)` 将元素 `ob` 添加到列表 `l` 的最后。"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[10, 11, 12, 11]\n"
]
}
],
"source": [
"a = [10, 11, 12]\n",
"a.append(11)\n",
"print a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"append每次只添加一个元素,并不会因为这个元素是序列而将其展开:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[10, 11, 12, 11, [11, 12]]\n"
]
}
],
"source": [
"a.append([11, 12])\n",
"print a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 向列表添加序列"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`l.extend(lst)` 将序列 `lst` 的元素依次添加到列表 `l` 的最后,作用相当于 `l += lst`。"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[10, 11, 12, 11, 1, 2]\n"
]
}
],
"source": [
"a = [10, 11, 12, 11]\n",
"a.extend([1, 2])\n",
"print a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 插入元素"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`l.insert(idx, ob)` 在索引 `idx` 处插入 `ob` ,之后的元素依次后移。"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[10, 11, 12, 'a', 13, 11]\n"
]
}
],
"source": [
"a = [10, 11, 12, 13, 11]\n",
"# 在索引 3 插入 'a'\n",
"a.insert(3, 'a')\n",
"print a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 移除元素"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`l.remove(ob)` 会将列表中第一个出现的 `ob` 删除,如果 `ob` 不在 `l` 中会报错。"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[10, 12, 13, 11]\n"
]
}
],
"source": [
"a = [10, 11, 12, 13, 11]\n",
"# 移除了第一个 11\n",
"a.remove(11)\n",
"print a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 弹出元素"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`l.pop(idx)` 会将索引 `idx` 处的元素删除,并返回这个元素。"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"12"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = [10, 11, 12, 13, 11]\n",
"a.pop(2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 排序"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`l.sort()` 会将列表中的元素按照一定的规则排序:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 2, 10, 11, 11, 13]\n"
]
}
],
"source": [
"a = [10, 1, 11, 13, 11, 2]\n",
"a.sort()\n",
"print a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果不想改变原来列表中的值,可以使用 `sorted` 函数:"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[10, 1, 11, 13, 11, 2]\n",
"[1, 2, 10, 11, 11, 13]\n"
]
}
],
"source": [
"a = [10, 1, 11, 13, 11, 2]\n",
"b = sorted(a)\n",
"print a\n",
"print b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 列表反向"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`l.reverse()` 会将列表中的元素从后向前排列。"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[6, 5, 4, 3, 2, 1]\n"
]
}
],
"source": [
"a = [1, 2, 3, 4, 5, 6]\n",
"a.reverse()\n",
"print a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果不想改变原来列表中的值,可以使用这样的方法:"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 2, 3, 4, 5, 6]\n",
"[6, 5, 4, 3, 2, 1]\n"
]
}
],
"source": [
"a = [1, 2, 3, 4, 5, 6]\n",
"b = a[::-1]\n",
"print a\n",
"print b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果不清楚用法,可以查看帮助:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a.sort?"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.07-mutable-and-immutable-data-types.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 可变和不可变类型"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## 列表是可变的(Mutable)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2, 3, 4]"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = [1,2,3,4]\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"通过索引改变:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[100, 2, 3, 4]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[0] = 100\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"通过方法改变:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[100, 2, 3, 200, 4]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.insert(3, 200)\n",
"a"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[2, 3, 4, 100, 200]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.sort()\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 字符串是不可变的(Immutable)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'hello world'"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = \"hello world\"\n",
"s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"通过索引改变会报错:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"ename": "TypeError",
"evalue": "'str' object does not support item assignment",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ms\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'z'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m: 'str' object does not support item assignment"
]
}
],
"source": [
"s[0] = 'z'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"字符串方法只是返回一个新字符串,并不改变原来的值:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello Mars\n",
"hello world\n"
]
}
],
"source": [
"print s.replace('world', 'Mars')\n",
"print s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果想改变字符串的值,可以用重新赋值的方法:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello Mars\n"
]
}
],
"source": [
"s = \"hello world\"\n",
"s = s.replace('world', 'Mars')\n",
"print s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"或者用 `bytearray` 代替字符串:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"bytearray(b'a12de')"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = bytearray('abcde')\n",
"s[1:3] = '12'\n",
"s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"数据类型分类:\n",
"\n",
"|可变数据类型|不可变数据类型|\n",
"|--|--|\n",
"|`list`, `dictionary`, `set`, `numpy array`, `user defined objects`|`integer`, `float`, `long`, `complex`, `string`, `tuple`, `frozenset`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 字符串不可变的原因"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"其一,列表可以通过以下的方法改变,而字符串不支持这样的变化。"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = [1, 2, 3, 4]\n",
"b = a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"此时, `a` 和 `b` 指向同一块区域,改变 `b` 的值, `a` 也会同时改变:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[100, 2, 3, 4]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b[0] = 100\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"其二,是字符串与整数浮点数一样被认为是基本类型,而基本类型在Python中是不可变的。"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.08-tuples.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 元组"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 基本操作"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"与列表相似,元组`Tuple`也是个有序序列,但是元组是不可变的,用`()`生成。"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(10, 11, 12, 13, 14)"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t = (10, 11, 12, 13, 14)\n",
"t"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以索引,切片:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"10"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t[0]"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(11, 12)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t[1:3]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"但是元组是不可变的:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypeError",
"evalue": "'tuple' object does not support item assignment",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# 会报错\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mt\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m: 'tuple' object does not support item assignment"
]
}
],
"source": [
"# 会报错\n",
"t[0] = 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 单个元素的元组生成"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"由于`()`在表达式中被应用,只含有单个元素的元组容易和表达式混淆,所以采用下列方式定义只有一个元素的元组:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(10,)\n",
"\n"
]
}
],
"source": [
"a = (10,)\n",
"print a\n",
"print type(a)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"a = (10)\n",
"print type(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"将列表转换为元组:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(10, 11, 12, 13, 14)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = [10, 11, 12, 13, 14]\n",
"tuple(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 元组方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"由于元组是不可变的,所以只能有一些不可变的方法,例如计算元素个数 `count` 和元素位置 `index` ,用法与列表一样。"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.count(10)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.index(12)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 为什么需要元组"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"旧式字符串格式化中参数要用元组;\n",
"\n",
"在字典中当作键值;\n",
"\n",
"数据库的返回值……"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.09-speed-comparison-between-list-&-tuple.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 列表与元组的速度比较"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"IPython 中用 `magic` 命令 `%timeit` 来计时。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 比较生成速度"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1000000 loops, best of 3: 456 ns per loop\n"
]
}
],
"source": [
"%timeit [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10000000 loops, best of 3: 23 ns per loop\n"
]
}
],
"source": [
"%timeit (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以看到,元组的生成速度要比列表的生成速度快得多,相差大概一个数量级。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 比较遍历速度"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"产生内容相同的随机列表和元组:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from numpy.random import rand\n",
"values = rand(10000,4)\n",
"lst = [list(row) for row in values]\n",
"tup = tuple(tuple(row) for row in values)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 loops, best of 3: 4.12 ms per loop\n"
]
}
],
"source": [
" %timeit for row in lst: list(row)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 loops, best of 3: 2.07 ms per loop\n"
]
}
],
"source": [
"%timeit for row in tup: tuple(row)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在遍历上,元组和列表的速度表现差不多。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 比较遍历和索引速度:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The slowest run took 12.20 times longer than the fastest. This could mean that an intermediate result is being cached \n",
"100 loops, best of 3: 3.73 ms per loop\n"
]
}
],
"source": [
"%timeit for row in lst: a = row[0] + 1"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 loops, best of 3: 3.82 ms per loop\n"
]
}
],
"source": [
"%timeit for row in tup: a = row[0] + 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"元组的生成速度会比列表快很多,迭代速度快一点,索引速度差不多。"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.10-dictionaries.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 字典 "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"字典 `dictionary` ,在一些编程语言中也称为 `hash` , `map` ,是一种由键值对组成的数据结构。\n",
"\n",
"顾名思义,我们把键想象成字典中的单词,值想象成词对应的定义,那么——\n",
"\n",
"一个词可以对应一个或者多个定义,但是这些定义只能通过这个词来进行查询。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 基本操作"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 空字典"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Python** 使用 `{}` 或者 `dict()` 来创建一个空的字典:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"dict"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = {}\n",
"type(a)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"dict"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = dict()\n",
"type(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"有了dict之后,可以用索引键值的方法向其中添加元素,也可以通过索引来查看元素的值:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 插入键值"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'one': 'this is number 1', 'two': 'this is number 2'}"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[\"one\"] = \"this is number 1\"\n",
"a[\"two\"] = \"this is number 2\"\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 查看键值"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'this is number 1'"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a['one']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 更新键值"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'one': 'this is number 1, too', 'two': 'this is number 2'}"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[\"one\"] = \"this is number 1, too\"\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 初始化字典"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以看到,Python使用`key: value`这样的结构来表示字典中的元素结构,事实上,可以直接使用这样的结构来初始化一个字典:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'this is number 1'"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b = {'one': 'this is number 1', 'two': 'this is number 2'}\n",
"b['one']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 字典没有顺序"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当我们 `print` 一个字典时,**Python**并不一定按照插入键值的先后顺序进行显示,因为字典中的键本身不一定是有序的。"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'two': 'this is number 2', 'one': 'this is number 1, too'}\n"
]
}
],
"source": [
"print a"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'two': 'this is number 2', 'one': 'this is number 1'}\n"
]
}
],
"source": [
"print b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"因此,**Python**中不能用支持用数字索引按顺序查看字典中的值,而且数字本身也有可能成为键值,这样会引起混淆:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "KeyError",
"evalue": "0",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# 会报错\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0ma\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mKeyError\u001b[0m: 0"
]
}
],
"source": [
"# 会报错\n",
"a[0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 键必须是不可变的类型"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"出于hash的目的,Python中要求这些键值对的**键**必须是**不可变**的,而值可以是任意的Python对象。\n",
"\n",
"一个表示近义词的字典:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'immutable': ['fixed',\n",
" 'set',\n",
" 'rigid',\n",
" 'inflexible',\n",
" 'permanent',\n",
" 'established',\n",
" 'carved in stone'],\n",
" 'mutable': ['changeable',\n",
" 'variable',\n",
" 'varying',\n",
" 'fluctuating',\n",
" 'shifting',\n",
" 'inconsistent',\n",
" 'unpredictable',\n",
" 'inconstant',\n",
" 'fickle',\n",
" 'uneven',\n",
" 'unstable',\n",
" 'protean']}"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"synonyms = {}\n",
"synonyms['mutable'] = ['changeable', 'variable', 'varying', 'fluctuating',\n",
" 'shifting', 'inconsistent', 'unpredictable', 'inconstant',\n",
" 'fickle', 'uneven', 'unstable', 'protean']\n",
"synonyms['immutable'] = ['fixed', 'set', 'rigid', 'inflexible', \n",
" 'permanent', 'established', 'carved in stone']\n",
"synonyms"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"另一个例子:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{500: {'mag': 0.05, 'width': 20},\n",
" 760: {'mag': 0.04, 'width': 25},\n",
" 3001: {'mag': 0.05, 'width': 80},\n",
" 4180: {'mag': 0.03, 'width': 30}}"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 定义四个字典\n",
"e1 = {'mag': 0.05, 'width': 20}\n",
"e2 = {'mag': 0.04, 'width': 25}\n",
"e3 = {'mag': 0.05, 'width': 80}\n",
"e4 = {'mag': 0.03, 'width': 30}\n",
"# 以字典作为值传入新的字典\n",
"events = {500: e1, 760: e2, 3001: e3, 4180: e4}\n",
"events"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"键(或者值)的数据类型可以不同:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[{'first': 'Sam', 'last': 'Malone', 'name': 35},\n",
" {'first': 'Woody', 'last': 'Boyd', 'name': 21},\n",
" {'first': 'Norm', 'last': 'Peterson', 'name': 34},\n",
" {'first': 'Diane', 'last': 'Chambers', 'name': 33}]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"people = [\n",
" {'first': 'Sam', 'last': 'Malone', 'name': 35},\n",
" {'first': 'Woody', 'last': 'Boyd', 'name': 21},\n",
" {'first': 'Norm', 'last': 'Peterson', 'name': 34},\n",
" {'first': 'Diane', 'last': 'Chambers', 'name': 33}\n",
"]\n",
"people"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 使用 dict 初始化字典"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"除了通常的定义方式,还可以通过 `dict()` 转化来生成字典:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'foozelator': 123, 'frombicator': 18, 'snitzelhogen': 23, 'spatzleblock': 34}"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"inventory = dict(\n",
" [('foozelator', 123),\n",
" ('frombicator', 18), \n",
" ('spatzleblock', 34), \n",
" ('snitzelhogen', 23)\n",
" ])\n",
"inventory"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"利用索引直接更新键值对:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'foozelator': 123, 'frombicator': 19, 'snitzelhogen': 23, 'spatzleblock': 34}"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"inventory['frombicator'] += 1\n",
"inventory"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 适合做键的类型"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在不可变类型中,整数和字符串是字典中最常用的类型;而浮点数通常不推荐用来做键,原因如下:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "KeyError",
"evalue": "3.3",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mdata\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1.1\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;36m2.2\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m6.6\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;31m# 会报错\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[0mdata\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m3.3\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mKeyError\u001b[0m: 3.3"
]
}
],
"source": [
"data = {}\n",
"data[1.1 + 2.2] = 6.6\n",
"# 会报错\n",
"data[3.3]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"事实上,观察`data`的值就会发现,这个错误是由浮点数的精度问题所引起的:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{3.3000000000000003: 6.6}"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"有时候,也可以使用元组作为键值,例如,可以用元组做键来表示从第一个城市飞往第二个城市航班数的多少:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"connections = {}\n",
"connections[('New York', 'Seattle')] = 100\n",
"connections[('Austin', 'New York')] = 200\n",
"connections[('New York', 'Austin')] = 400"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"元组是有序的,因此 `('New York', 'Austin')` 和 `('Austin', 'New York')` 是两个不同的键:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"200\n",
"400\n"
]
}
],
"source": [
"print connections[('Austin', 'New York')]\n",
"print connections[('New York', 'Austin')]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 字典方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `get` 方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"之前已经见过,用索引可以找到一个键对应的值,但是当字典中没有这个键的时候,Python会报错,这时候可以使用字典的 `get` 方法来处理这种情况,其用法如下:\n",
"\n",
" `d.get(key, default = None)`\n",
"\n",
"返回字典中键 `key` 对应的值,如果没有这个键,返回 `default` 指定的值(默认是 `None` )。"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = {}\n",
"a[\"one\"] = \"this is number 1\"\n",
"a[\"two\"] = \"this is number 2\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"索引不存在的键值会报错:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "KeyError",
"evalue": "'three'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ma\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"three\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mKeyError\u001b[0m: 'three'"
]
}
],
"source": [
"a[\"three\"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"改用get方法:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"None\n"
]
}
],
"source": [
"print a.get(\"three\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"指定默认值参数:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'undefined'"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.get(\"three\", \"undefined\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `pop` 方法删除元素"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`pop` 方法可以用来弹出字典中某个键对应的值,同时也可以指定默认参数:\n",
"\n",
" `d.pop(key, default = None)`\n",
"\n",
"删除并返回字典中键 `key` 对应的值,如果没有这个键,返回 `default` 指定的值(默认是 `None` )。"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'one': 'this is number 1', 'two': 'this is number 2'}"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"弹出并返回值:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"'this is number 2'"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.pop(\"two\")"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'one': 'this is number 1'}"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"弹出不存在的键值:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'not exist'"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.pop(\"two\", 'not exist')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"与列表一样,`del` 函数可以用来删除字典中特定的键值对,例如:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{}"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"del a[\"one\"]\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `update`方法更新字典"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"之前已经知道,可以通过索引来插入、修改单个键值对,但是如果想对多个键值对进行操作,这种方法就显得比较麻烦,好在有 `update` 方法:\n",
"\n",
" `d.update(newd)`\n",
"\n",
"将字典`newd`中的内容更新到`d`中去。"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'born': 1831, 'last': 'Maxwell', 'first': 'Jmes'}\n"
]
}
],
"source": [
"person = {}\n",
"person['first'] = \"Jmes\"\n",
"person['last'] = \"Maxwell\"\n",
"person['born'] = 1831\n",
"print person"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"把'first'改成'James',同时插入'middle'的值'Clerk':"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'middle': 'Clerk', 'born': 1831, 'last': 'Maxwell', 'first': 'James'}\n"
]
}
],
"source": [
"person_modifications = {'first': 'James', 'middle': 'Clerk'}\n",
"person.update(person_modifications)\n",
"print person"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `in`查询字典中是否有该键"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"barn = {'cows': 1, 'dogs': 5, 'cats': 3}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`in` 可以用来判断字典中是否有某个特定的键:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"'chickens' in barn"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"'cows' in barn"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `keys` 方法,`values` 方法和`items` 方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" `d.keys()` \n",
"\n",
"返回一个由所有键组成的列表;\n",
"\n",
" `d.values()` \n",
"\n",
"返回一个由所有值组成的列表;\n",
"\n",
" `d.items()` \n",
"\n",
"返回一个由所有键值对元组组成的列表;"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['cows', 'cats', 'dogs']"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"barn.keys()"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1, 3, 5]"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"barn.values()"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[('cows', 1), ('cats', 3), ('dogs', 5)]"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"barn.items()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.11-sets.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 集合"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"之前看到的列表和字符串都是一种有序序列,而集合 `set` 是一种无序的序列。\n",
"\n",
"因为集合是无序的,所以当集合中存在两个同样的元素的时候,Python只会保存其中的一个(唯一性);同时为了确保其中不包含同样的元素,集合中放入的元素只能是不可变的对象(确定性)。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 集合生成"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以用`set()`函数来显示的生成空集合:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"set"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = set()\n",
"type(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"也可以使用一个列表来初始化一个集合:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1, 2, 3}"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = set([1, 2, 3, 1])\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"集合会自动去除重复元素 `1`。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以看到,集合中的元素是用大括号`{}`包含起来的,这意味着可以用`{}`的形式来创建集合:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1, 2, 3}"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = {1, 2, 3, 1}\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"但是创建空集合的时候只能用`set`来创建,因为在Python中`{}`创建的是一个空的字典:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"dict"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = {}\n",
"type(s)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 集合操作"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"假设有这样两个集合:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = {1, 2, 3, 4}\n",
"b = {3, 4, 5, 6}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 并"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"两个集合的并,返回包含两个集合所有元素的集合(去除重复)。\n",
"\n",
"可以用方法 `a.union(b)` 或者操作 `a | b` 实现。"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1, 2, 3, 4, 5, 6}"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.union(b)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1, 2, 3, 4, 5, 6}"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b.union(a)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1, 2, 3, 4, 5, 6}"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a | b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 交"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"两个集合的交,返回包含两个集合共有元素的集合。\n",
"\n",
"可以用方法 `a.intersection(b)` 或者操作 `a & b` 实现。"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{3, 4}"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.intersection(b)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{3, 4}"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b.intersection(a)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{3, 4}"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a & b"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"set([3, 4])\n"
]
}
],
"source": [
"print(a & b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"注意:一般使用print打印set的结果与表示方法并不一致。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 差"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`a` 和 `b` 的差集,返回只在 `a` 不在 `b` 的元素组成的集合。\n",
"\n",
"可以用方法 `a.difference(b)` 或者操作 `a - b` 实现。"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1, 2}"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.difference(b)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1, 2}"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a - b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"注意,`a - b` 与 `b - a`并不一样,`b - a` 返回的是返回 b 不在 a 的元素组成的集合:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{5, 6}"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b.difference(a)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{5, 6}"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b - a "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 对称差"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`a` 和`b` 的对称差集,返回在 `a` 或在 `b` 中,但是不同时在 `a` 和 `b` 中的元素组成的集合。\n",
"\n",
"可以用方法 `a.symmetric_difference(b)` 或者操作 `a ^ b` 实现(异或操作符)。"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1, 2, 5, 6}"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.symmetric_difference(b)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1, 2, 5, 6}"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b.symmetric_difference(a)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1, 2, 5, 6}"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a ^ b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 包含关系"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"假设现在有这样两个集合:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = {1, 2, 3}\n",
"b = {1, 2}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"要判断 `b` 是不是 `a` 的子集,可以用 `b.issubset(a)` 方法,或者更简单的用操作 `b <= a` :"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b.issubset(a)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b <= a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"与之对应,也可以用 `a.issuperset(b)` 或者 `a >= b` 来判断:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.issuperset(b)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a >= b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"方法只能用来测试子集,但是操作符可以用来判断真子集:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a <= a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"自己不是自己的真子集:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a < a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 集合方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `add` 方法向集合添加单个元素"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"跟列表的 `append` 方法类似,用来向集合添加单个元素。\n",
"\n",
" s.add(a)\n",
"\n",
"将元素 `a` 加入集合 `s` 中。"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1, 2, 3, 5}"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t = {1, 2, 3}\n",
"t.add(5)\n",
"t"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果添加的是已有元素,集合不改变:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1, 2, 3, 5}"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t.add(3)\n",
"t"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `update` 方法向集合添加多个元素"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"跟列表的`extend`方法类似,用来向集合添加多个元素。\n",
"\n",
" s.update(seq)\n",
"\n",
"将`seq`中的元素添加到`s`中。"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{1, 2, 3, 5, 6, 7}"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t.update([5, 6, 7])\n",
"t"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `remove` 方法移除单个元素"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" s.remove(ob)\n",
"\n",
"从集合`s`中移除元素`ob`,如果不存在会报错。"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{2, 3, 5, 6, 7}"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t.remove(1)\n",
"t"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "KeyError",
"evalue": "10",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mremove\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mKeyError\u001b[0m: 10"
]
}
],
"source": [
"t.remove(10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### pop方法弹出元素"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"由于集合没有顺序,不能像列表一样按照位置弹出元素,所以`pop` 方法删除并返回集合中任意一个元素,如果集合中没有元素会报错。"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{3, 5, 6, 7}"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t.pop()"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"set([3, 5, 6, 7])\n"
]
}
],
"source": [
"print t"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "KeyError",
"evalue": "'pop from an empty set'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0ms\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mset\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;31m# 报错\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0ms\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mKeyError\u001b[0m: 'pop from an empty set'"
]
}
],
"source": [
"s = set()\n",
"# 报错\n",
"s.pop()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### discard 方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"作用与 `remove` 一样,但是当元素在集合中不存在的时候不会报错。"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"t.discard(3)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{5, 6, 7}"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不存在的元素不会报错:"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"t.discard(20)"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{5, 6, 7}"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### difference_update方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" a.difference_update(b)\n",
"\n",
"从a中去除所有属于b的元素:"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.12-frozen-sets.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 不可变集合"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对应于元组(`tuple`)与列表(`list`)的关系,对于集合(`set`),**Python**提供了一种叫做不可变集合(`frozen set`)的数据结构。\n",
"\n",
"使用 `frozenset` 来进行创建:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"frozenset({1, 2, 3, 'a'})"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = frozenset([1, 2, 3, 'a', 1])\n",
"s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"与集合不同的是,不可变集合一旦创建就不可以改变。\n",
"\n",
"不可变集合的一个主要应用是用来作为字典的键,例如用一个字典来记录两个城市之间的距离:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{frozenset({'Austin', 'New York'}): 1515,\n",
" frozenset({'Austin', 'Los Angeles'}): 1233,\n",
" frozenset({'Los Angeles', 'New York'}): 2498}"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"flight_distance = {}\n",
"city_pair = frozenset(['Los Angeles', 'New York'])\n",
"flight_distance[city_pair] = 2498\n",
"flight_distance[frozenset(['Austin', 'Los Angeles'])] = 1233\n",
"flight_distance[frozenset(['Austin', 'New York'])] = 1515\n",
"flight_distance"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"由于集合不分顺序,所以不同顺序不会影响查阅结果:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1515"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"flight_distance[frozenset(['New York','Austin'])]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1515"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"flight_distance[frozenset(['Austin','New York'])]"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.13-how-python-assignment-works.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Python 赋值机制"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"先看一个例子:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 100, 3]\n"
]
}
],
"source": [
"x = [1, 2, 3]\n",
"y = x\n",
"x[1] = 100\n",
"print y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"改变变量`x`的值,变量`y`的值也随着改变,这与**Python**内部的赋值机制有关。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 简单类型"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"先来看这一段代码在**Python**中的执行过程。\n",
"\n",
"```python\n",
"x = 500\n",
"y = x\n",
"y = 'foo'\n",
"```\n",
"\n",
"- `x = 500`\n",
"\n",
"**Python**分配了一个 `PyInt` 大小的内存 `pos1` 用来储存对象 `500` ,然后,Python在命名空间中让变量 `x` 指向了这一块内存,注意,整数是不可变类型,所以这块内存的内容是不可变的。\n",
"\n",
"|内存|命名空间|\n",
"|---|---|\n",
"|`pos1 : PyInt(500)` (不可变)| `x : pos1` |\n",
"\n",
"- `y = x `\n",
"\n",
"**Python**并没有使用新的内存来储存变量 `y` 的值,而是在命名空间中,让变量 `y` 与变量 `x` 指向了同一块内存空间。\n",
"\n",
"|内存|命名空间|\n",
"|---|---|\n",
"|`pos1 : PyInt(500)` (不可变)|`x : pos1`
`y : pos1`|\n",
"\n",
"- `y = 'foo'`\n",
"\n",
"**Python**此时分配一个 `PyStr` 大小的内存 `pos2` 来储存对象 `foo` ,然后改变变量 `y` 所指的对象。\n",
"\n",
"|内存|命名空间|\n",
"|---|---|\n",
"|`pos1 : PyInt(500)` (不可变)
`pos2 : PyStr('foo')` (不可变)|`x : pos1`
`y : pos2`|\n",
"\n",
"对这一过程进行验证,可以使用 `id` 函数。\n",
"\n",
" id(x)\n",
"\n",
"返回变量 `x` 的内存地址。"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"48220272L"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = 500\n",
"id(x)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"48220272L"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y = x\n",
"id(y)"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"也可以使用 `is` 来判断是不是指向同一个事物:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x is y"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"现在 `y` 指向另一块内存:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"39148320L"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y = 'foo'\n",
"id(y)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x is y"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"**Python**会为每个出现的对象进行赋值,哪怕它们的值是一样的,例如:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"48220296L"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = 500\n",
"id(x)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"48220224L"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y = 500\n",
"id(y)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x is y"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"不过,为了提高内存利用效率,对于一些简单的对象,如一些数值较小的int对象,**Python**采用了重用对象内存的办法:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"6579504L"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = 2\n",
"id(x)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"6579504L"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y = 2\n",
"id(y)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x is y"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## 容器类型"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"现在来看另一段代码:\n",
"\n",
"``` python\n",
"x = [500, 501, 502]\n",
"y = x\n",
"y[1] = 600\n",
"y = [700, 800]\n",
"```\n",
"\n",
"- `x = [500, 501, 502]`\n",
"\n",
"Python为3个PyInt分配内存 `pos1` , `pos2` , `pos3` (不可变),然后为列表分配一段内存 `pos4` ,它包含3个位置,分别指向这3个内存,最后再让变量 `x` 指向这个列表。\n",
"\n",
"|内存|命名空间|\n",
"|---|---|\n",
"|`pos1 : PyInt(500)` (不可变)
`pos2 : PyInt(501)` (不可变)
`pos3 : PyInt(502)` (不可变)
`pos4 : PyList(pos1, pos2, pos3)` (可变)|`x : pos4`|\n",
"\n",
"- `y = x`\n",
"\n",
"并没有创建新的对象,只需要将 `y` 指向 `pos4` 即可。\n",
"\n",
"|内存|命名空间|\n",
"|---|---|\n",
"|`pos1 : PyInt(500)` (不可变)
`pos2 : PyInt(501)` (不可变)
`pos3 : PyInt(502)` (不可变)
`pos4 : PyList(pos1, pos2, pos3)` (可变)|`x : pos4`
`y : pos4`|\n",
"\n",
"- `y[1] = 600`\n",
"\n",
"原来 `y[1]` 这个位置指向的是 `pos2` ,由于不能修改 `pos2` 的值,所以首先为 `600` 分配新内存 `pos5` 。\n",
"\n",
"再把 `y[1]` 指向的位置修改为 `pos5` 。此时,由于 `pos2` 位置的对象已经没有用了,**Python**会自动调用垃圾处理机制将它回收。\n",
"\n",
"|内存|命名空间|\n",
"|---|---|\n",
"|`pos1 : PyInt(500)` (不可变)
`pos2 :` 垃圾回收
`pos3 : PyInt(502)` (不可变)
`pos4 : PyList(pos1, pos5, pos3)` (可变)
`pos5 : PyInt(600)` (不可变) |`x : pos4`
`y : pos4`|\n",
"\n",
"- `y = [700, 800]`\n",
"\n",
"首先创建这个列表,然后将变量 `y` 指向它。\n",
"\n",
"|内存|命名空间|\n",
"|---|---|\n",
"|`pos1 : PyInt(500)` (不可变)
`pos3 : PyInt(502)` (不可变)
`pos4 : PyList(pos1, pos5, pos3)` (可变)
`pos5 : PyInt(600)` (不可变)
`pos6 : PyInt(700)` (不可变)
`pos7 : PyInt(800)` (不可变)
`pos8 : PyList(pos6, pos7)` (可变)|`x : pos4`
`y : pos8`|\n",
"\n",
"对这一过程进行验证:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"48220224\n",
"48220248\n",
"48220200\n",
"54993032\n"
]
}
],
"source": [
"x = [500, 501, 502]\n",
"print id(x[0])\n",
"print id(x[1])\n",
"print id(x[2])\n",
"print id(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"赋值,`id(y)` 与 `id(x)` 相同。"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"54993032\n"
]
}
],
"source": [
"y = x\n",
"print id(y)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x is y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"修改 `y[1]` ,`id(y)` 并不改变。"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"54993032\n"
]
}
],
"source": [
"y[1] = 600\n",
"print id(y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`id(x[1])` 和 `id(y[1])` 的值改变了。"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"48220272\n",
"48220272\n"
]
}
],
"source": [
"print id(x[1])\n",
"print id(y[1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"更改 `y` 的值,`id(y)` 的值改变"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"54995272\n",
"54993032\n"
]
}
],
"source": [
"y = [700, 800]\n",
"print id(y)\n",
"print id(x)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.14-if-statement.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 判断语句"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 基本用法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"判断,基于一定的条件,决定是否要执行特定的一段代码,例如判断一个数是不是正数:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Hey!\n",
"x is positive\n"
]
}
],
"source": [
"x = 0.5\n",
"if x > 0:\n",
" print \"Hey!\"\n",
" print \"x is positive\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在这里,如果 `x > 0` 为 `False` ,那么程序将不会执行两条 `print` 语句。\n",
"\n",
"虽然都是用 `if` 关键词定义判断,但与**C,Java**等语言不同,**Python**不使用 `{}` 将 `if` 语句控制的区域包含起来。**Python**使用的是缩进方法。同时,也不需要用 `()` 将判断条件括起来。\n",
"\n",
"上面例子中的这两条语句:\n",
"```python\n",
" print \"Hey!\"\n",
" print \"x is positive\"\n",
"```\n",
"就叫做一个代码块,同一个代码块使用同样的缩进值,它们组成了这条 `if` 语句的主体。\n",
"\n",
"不同的缩进值表示不同的代码块,例如:\n",
"\n",
"`x > 0` 时:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Hey!\n",
"x is positive\n",
"This is still part of the block\n",
"This isn't part of the block, and will always print.\n"
]
}
],
"source": [
"x = 0.5\n",
"if x > 0:\n",
" print \"Hey!\"\n",
" print \"x is positive\"\n",
" print \"This is still part of the block\"\n",
"print \"This isn't part of the block, and will always print.\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`x < 0` 时:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"This isn't part of the block, and will always print.\n"
]
}
],
"source": [
"x = -0.5\n",
"if x > 0:\n",
" print \"Hey!\"\n",
" print \"x is positive\"\n",
" print \"This is still part of the block\"\n",
"print \"This isn't part of the block, and will always print.\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在这两个例子中,最后一句并不是`if`语句中的内容,所以不管条件满不满足,它都会被执行。\n",
"\n",
"一个完整的 `if` 结构通常如下所示(注意:条件后的 `:` 是必须要的,缩进值需要一样):\n",
" \n",
" if :\n",
" \n",
" \n",
" elif : \n",
" \n",
" else:\n",
" \n",
"\n",
"当条件1被满足时,执行 `if` 下面的语句,当条件1不满足的时候,转到 `elif` ,看它的条件2满不满足,满足执行 `elif` 下面的语句,不满足则执行 `else` 下面的语句。\n",
"\n",
"对于上面的例子进行扩展:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"x is zero\n"
]
}
],
"source": [
"x = 0\n",
"if x > 0:\n",
" print \"x is positive\"\n",
"elif x == 0:\n",
" print \"x is zero\"\n",
"else:\n",
" print \"x is negative\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`elif` 的个数没有限制,可以是1个或者多个,也可以没有。\n",
"\n",
"`else` 最多只有1个,也可以没有。\n",
"\n",
"可以使用 `and` , `or` , `not` 等关键词结合多个判断条件:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = 10\n",
"y = -5\n",
"x > 0 and y < 0"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"not x > 0"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x < 0 or y < 0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里使用这个简单的例子,假如想判断一个年份是不是闰年,按照闰年的定义,这里只需要判断这个年份是不是能被4整除,但是不能被100整除,或者正好被400整除:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"This is not a leap year.\n"
]
}
],
"source": [
"year = 1900\n",
"if year % 400 == 0:\n",
" print \"This is a leap year!\"\n",
"# 两个条件都满足才执行\n",
"elif year % 4 == 0 and year % 100 != 0:\n",
" print \"This is a leap year!\"\n",
"else:\n",
" print \"This is not a leap year.\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 值的测试"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Python**不仅仅可以使用布尔型变量作为条件,它可以直接在`if`中使用任何表达式作为条件:\n",
"\n",
"大部分表达式的值都会被当作`True`,但以下表达式值会被当作`False`:\n",
"\n",
"- False\n",
"- None\n",
"- 0\n",
"- 空字符串,空列表,空字典,空集合"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The first element is: 3\n"
]
}
],
"source": [
"mylist = [3, 1, 4, 1, 5, 9]\n",
"if mylist:\n",
" print \"The first element is:\", mylist[0]\n",
"else:\n",
" print \"There is no first element.\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"修改为空列表:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"There is no first element.\n"
]
}
],
"source": [
"mylist = []\n",
"if mylist:\n",
" print \"The first element is:\", mylist[0]\n",
"else:\n",
" print \"There is no first element.\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当然这种用法并不推荐,推荐使用 `if len(mylist) > 0:` 来判断一个列表是否为空。"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.15-loops.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 循环"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"循环的作用在于将一段代码重复执行多次。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## while 循环"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" while :\n",
" \n",
"\n",
"**Python**会循环执行``,直到``不满足为止。\n",
"\n",
"例如,计算数字`0`到`1000000`的和:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"499999500000\n"
]
}
],
"source": [
"i = 0\n",
"total = 0\n",
"while i < 1000000:\n",
" total += i\n",
" i += 1\n",
"print total"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"之前提到,空容器会被当成 `False` ,因此可以用 `while` 循环来读取容器中的所有元素:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Perform King Lear\n",
"Perform Macbeth\n",
"Perform Hamlet\n"
]
}
],
"source": [
"plays = set(['Hamlet', 'Macbeth', 'King Lear'])\n",
"while plays:\n",
" play = plays.pop()\n",
" print 'Perform', play"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"循环每次从 `plays` 中弹出一个元素,一直到 `plays` 为空为止。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## for 循环"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" for in :\n",
" \n",
"\n",
"`for` 循环会遍历完``中所有元素为止\n",
"\n",
"上一个例子可以改写成如下形式:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Perform King Lear\n",
"Perform Macbeth\n",
"Perform Hamlet\n"
]
}
],
"source": [
"plays = set(['Hamlet', 'Macbeth', 'King Lear'])\n",
"for play in plays:\n",
" print 'Perform', play"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `for` 循环时,注意尽量不要改变 `plays` 的值,否则可能会产生意想不到的结果。\n",
"\n",
"之前的求和也可以通过 `for` 循环来实现:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4999950000\n"
]
}
],
"source": [
"total = 0\n",
"for i in range(100000):\n",
" total += i\n",
"print total"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"然而这种写法有一个缺点:在循环前,它会生成一个长度为 `100000` 的临时列表。\n",
"\n",
"生成列表的问题在于,会有一定的时间和内存消耗,当数字从 `100000` 变得更大时,时间和内存的消耗会更加明显。\n",
"\n",
"为了解决这个问题,我们可以使用 `xrange` 来代替 `range` 函数,其效果与`range`函数相同,但是 `xrange` 并不会一次性的产生所有的数据:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4999950000\n"
]
}
],
"source": [
"total = 0\n",
"for i in xrange(100000):\n",
" total += i\n",
"print total"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"比较一下两者的运行时间:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10 loops, best of 3: 40.7 ms per loop\n"
]
}
],
"source": [
"%timeit for i in xrange(1000000): i = i"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10 loops, best of 3: 96.6 ms per loop\n"
]
}
],
"source": [
"%timeit for i in range(1000000): i = i"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以看出,`xrange` 用时要比 `range` 少。 "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## continue 语句"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"遇到 `continue` 的时候,程序会返回到循环的最开始重新执行。\n",
"\n",
"例如在循环中忽略一些特定的值:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3\n",
"2\n",
"1\n"
]
}
],
"source": [
"values = [7, 6, 4, 7, 19, 2, 1]\n",
"for i in values:\n",
" if i % 2 != 0:\n",
" # 忽略奇数\n",
" continue\n",
" print i/2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## break 语句"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"遇到 `break` 的时候,程序会跳出循环,不管循环条件是不是满足:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"start\n",
"process\n",
"process\n",
"process\n"
]
}
],
"source": [
"command_list = ['start', \n",
" 'process', \n",
" 'process',\n",
" 'process', \n",
" 'stop', \n",
" 'start', \n",
" 'process', \n",
" 'stop']\n",
"while command_list:\n",
" command = command_list.pop(0)\n",
" if command == 'stop':\n",
" break\n",
" print(command)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在遇到第一个 `'stop'` 之后,程序跳出循环。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## else语句"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"与 `if` 一样, `while` 和 `for` 循环后面也可以跟着 `else` 语句,不过要和`break`一起连用。\n",
"\n",
"- 当循环正常结束时,循环条件不满足, `else` 被执行;\n",
"- 当循环被 `break` 结束时,循环条件仍然满足, `else` 不执行。\n",
"\n",
"不执行:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found: 7\n"
]
}
],
"source": [
"values = [7, 6, 4, 7, 19, 2, 1]\n",
"for x in values:\n",
" if x <= 10:\n",
" print 'Found:', x\n",
" break\n",
"else:\n",
" print 'All values greater than 10'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"执行:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"All values greater than 10\n"
]
}
],
"source": [
"values = [11, 12, 13, 100]\n",
"for x in values:\n",
" if x <= 10:\n",
" print 'Found:', x\n",
" break\n",
"else:\n",
" print 'All values greater than 10'"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.16-list-comprehension.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 列表推导式"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"循环可以用来生成列表:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[100, 441, 16, 49, 144]\n"
]
}
],
"source": [
"values = [10, 21, 4, 7, 12]\n",
"squares = []\n",
"for x in values:\n",
" squares.append(x**2)\n",
"print squares"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"列表推导式可以使用更简单的方法来创建这个列表:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[100, 441, 16, 49, 144]\n"
]
}
],
"source": [
"values = [10, 21, 4, 7, 12]\n",
"squares = [x**2 for x in values]\n",
"print squares"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"还可以在列表推导式中加入条件进行筛选。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"例如在上面的例子中,假如只想保留列表中不大于`10`的数的平方:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[100, 16, 49]\n"
]
}
],
"source": [
"values = [10, 21, 4, 7, 12]\n",
"squares = [x**2 for x in values if x <= 10]\n",
"print squares"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"也可以使用推导式生成集合和字典:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"set([16, 49, 100])\n",
"{10: 100, 4: 16, 7: 49}\n"
]
}
],
"source": [
"square_set = {x**2 for x in values if x <= 10}\n",
"print(square_set)\n",
"square_dict = {x: x**2 for x in values if x <= 10}\n",
"print(square_dict)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"再如,计算上面例子中生成的列表中所有元素的和:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"165\n"
]
}
],
"source": [
"total = sum([x**2 for x in values if x <= 10])\n",
"print(total)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"但是,**Python**会生成这个列表,然后在将它放到垃圾回收机制中(因为没有变量指向它),这毫无疑问是种浪费。\n",
"\n",
"为了解决这种问题,与xrange()类似,**Python**使用产生式表达式来解决这个问题:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"165\n"
]
}
],
"source": [
"total = sum(x**2 for x in values if x <= 10)\n",
"print(total)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"与上面相比,只是去掉了括号,但这里并不会一次性的生成这个列表。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"比较一下两者的用时:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x = range(1000000)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1 loops, best of 3: 3.86 s per loop\n"
]
}
],
"source": [
"%timeit total = sum([i**2 for i in x])"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1 loops, best of 3: 2.58 s per loop\n"
]
}
],
"source": [
"%timeit total = sum(i**2 for i in x)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.17-functions.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 定义函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"函数`function`,通常接受输入参数,并有返回值。\n",
"\n",
"它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def add(x, y):\n",
" \"\"\"Add two numbers\"\"\"\n",
" a = x + y\n",
" return a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"函数通常有一下几个特征:\n",
"- 使用 `def` 关键词来定义一个函数。\n",
"- `def` 后面是函数的名称,括号中是函数的参数,不同的参数用 `,` 隔开, `def foo():` 的形式是必须要有的,参数可以为空;\n",
"- 使用缩进来划分函数的内容;\n",
"- `docstring` 用 `\"\"\"` 包含的字符串,用来解释函数的用途,可省略;\n",
"- `return` 返回特定的值,如果省略,返回 `None` 。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 使用函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用函数时,只需要将参数换成特定的值传给函数。\n",
"\n",
"**Python**并没有限定参数的类型,因此可以使用不同的参数类型:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5\n",
"foobar\n"
]
}
],
"source": [
"print add(2, 3)\n",
"print add('foo', 'bar')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在这个例子中,如果传入的两个参数不可以相加,那么**Python**会将报错:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypeError",
"evalue": "unsupported operand type(s) for +: 'int' and 'str'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mprint\u001b[0m \u001b[0madd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"foo\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m\u001b[0m in \u001b[0;36madd\u001b[1;34m(x, y)\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0madd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;34m\"\"\"Add two numbers\"\"\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0ma\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0ma\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'int' and 'str'"
]
}
],
"source": [
"print add(2, \"foo\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果传入的参数数目与实际不符合,也会报错:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypeError",
"evalue": "add() takes exactly 2 arguments (3 given)",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mprint\u001b[0m \u001b[0madd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m3\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m: add() takes exactly 2 arguments (3 given)"
]
}
],
"source": [
"print add(1, 2, 3)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypeError",
"evalue": "add() takes exactly 2 arguments (1 given)",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mprint\u001b[0m \u001b[0madd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m: add() takes exactly 2 arguments (1 given)"
]
}
],
"source": [
"print add(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"传入参数时,Python提供了两种选项,第一种是上面使用的按照位置传入参数,另一种则是使用关键词模式,显式地指定参数的值:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5\n",
"barfoo\n"
]
}
],
"source": [
"print add(x=2, y=3)\n",
"print add(y=\"foo\", x=\"bar\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以混合这两种模式:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5\n"
]
}
],
"source": [
"print add(2, y=3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 设定参数默认值"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以在函数定义的时候给参数设定默认值,例如:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def quad(x, a=1, b=0, c=0):\n",
" return a*x**2 + b*x + c"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以省略有默认值的参数:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4.0\n"
]
}
],
"source": [
"print quad(2.0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以修改参数的默认值:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10.0\n"
]
}
],
"source": [
"print quad(2.0, b=3)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"12.0\n"
]
}
],
"source": [
"print quad(2.0, 2, c=4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里混合了位置和指定两种参数传入方式,第二个2是传给 `a` 的。\n",
"\n",
"注意,在使用混合语法时,要注意不能给同一个值赋值多次,否则会报错,例如:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypeError",
"evalue": "quad() got multiple values for keyword argument 'a'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mprint\u001b[0m \u001b[0mquad\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m2.0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0ma\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m: quad() got multiple values for keyword argument 'a'"
]
}
],
"source": [
"print quad(2.0, 2, a=2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 接收不定参数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用如下方法,可以使函数接受不定数目的参数:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def add(x, *args):\n",
" total = x\n",
" for arg in args:\n",
" total += arg\n",
" return total"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里,`*args` 表示参数数目不定,可以看成一个元组,把第一个参数后面的参数当作元组中的元素。"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10\n",
"3\n"
]
}
],
"source": [
"print add(1, 2, 3, 4)\n",
"print add(1, 2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这样定义的函数不能使用关键词传入参数,要使用关键词,可以这样:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def add(x, **kwargs):\n",
" total = x\n",
" for arg, value in kwargs.items():\n",
" print \"adding \", arg\n",
" total += value\n",
" return total"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里, `**kwargs` 表示参数数目不定,相当于一个字典,关键词和值对应于键值对。"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"adding y\n",
"adding z\n",
"adding w\n",
"46\n"
]
}
],
"source": [
"print add(10, y=11, z=12, w=13)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"再看这个例子,可以接收任意数目的位置参数和键值对参数:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(2, 3) {'x': 'bar', 'z': 10}\n"
]
}
],
"source": [
"def foo(*args, **kwargs):\n",
" print args, kwargs\n",
"\n",
"foo(2, 3, x='bar', z=10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不过要按顺序传入参数,先传入位置参数 `args` ,在传入关键词参数 `kwargs` 。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 返回多个值"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"函数可以返回多个值:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5.0 0.927295218002\n"
]
}
],
"source": [
"from math import atan2\n",
"\n",
"def to_polar(x, y):\n",
" r = (x**2 + y**2) ** 0.5\n",
" theta = atan2(y, x)\n",
" return r, theta\n",
"\n",
"r, theta = to_polar(3, 4)\n",
"print r, theta"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"事实上,**Python**将返回的两个值变成了元组:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(5.0, 0.9272952180016122)\n"
]
}
],
"source": [
"print to_polar(3, 4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"因为这个元组中有两个值,所以可以使用\n",
"\n",
" r, theta = to_polar(3, 4)\n",
"\n",
"给两个值赋值。\n",
"\n",
"列表也有相似的功能:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1 2 3\n"
]
}
],
"source": [
"a, b, c = [1, 2, 3]\n",
"print a, b, c"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"事实上,不仅仅返回值可以用元组表示,也可以将参数用元组以这种方式传入:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5\n"
]
}
],
"source": [
"def add(x, y):\n",
" \"\"\"Add two numbers\"\"\"\n",
" a = x + y\n",
" return a\n",
" \n",
"z = (2, 3)\n",
"print add(*z)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里的`*`必不可少。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"事实上,还可以通过字典传入参数来执行函数:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5\n"
]
}
],
"source": [
"def add(x, y):\n",
" \"\"\"Add two numbers\"\"\"\n",
" a = x + y\n",
" return a\n",
"\n",
"w = {'x': 2, 'y': 3}\n",
"print add(**w)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## map 方法生成序列"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以通过 `map` 的方式利用函数来生成序列:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[4, 9, 16]\n"
]
}
],
"source": [
"def sqr(x): \n",
" return x ** 2\n",
"\n",
"a = [2,3,4]\n",
"print map(sqr, a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"其用法为:\n",
" \n",
" map(aFun, aSeq)\n",
"\n",
"将函数 `aFun` 应用到序列 `aSeq` 上的每一个元素上,返回一个列表,不管这个序列原来是什么类型。\n",
"\n",
"事实上,根据函数参数的多少,`map` 可以接受多组序列,将其对应的元素作为参数传入函数:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[12, 8, 7]\n"
]
}
],
"source": [
"def add(x, y): \n",
" return x + y\n",
"\n",
"a = (2,3,4)\n",
"b = [10,5,3]\n",
"print map(add,a,b)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.18-modules-and-packages.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 模块和包"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 模块"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python会将所有 `.py` 结尾的文件认定为Python代码文件,考虑下面的脚本 `ex1.py` :"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting ex1.py\n"
]
}
],
"source": [
"%%writefile ex1.py\n",
"\n",
"PI = 3.1416\n",
"\n",
"def sum(lst):\n",
" tot = lst[0]\n",
" for value in lst[1:]:\n",
" tot = tot + value\n",
" return tot\n",
" \n",
"w = [0, 1, 2, 3]\n",
"print sum(w), PI"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以执行它:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6 3.1416\n"
]
}
],
"source": [
"%run ex1.py"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这个脚本可以当作一个模块,可以使用`import`关键词加载并执行它(这里要求`ex1.py`在当前工作目录):"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6 3.1416\n"
]
}
],
"source": [
"import ex1"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ex1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在导入时,**Python**会执行一遍模块中的所有内容。\n",
"\n",
"`ex1.py` 中所有的变量都被载入了当前环境中,不过要使用\n",
"\n",
" ex1.变量名\n",
"\n",
"的方法来查看或者修改这些变量:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3.1416\n"
]
}
],
"source": [
"print ex1.PI"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3.141592653\n"
]
}
],
"source": [
"ex1.PI = 3.141592653\n",
"print ex1.PI"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"还可以用\n",
"\n",
" ex1.函数名\n",
"\n",
"调用模块里面的函数:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"9\n"
]
}
],
"source": [
"print ex1.sum([2, 3, 4])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"为了提高效率,**Python**只会载入模块一次,已经载入的模块再次载入时,Python并不会真正执行载入操作,哪怕模块的内容已经改变。\n",
"\n",
"例如,这里重新导入 `ex1` 时,并不会执行 `ex1.py` 中的 `print` 语句:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import ex1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"需要重新导入模块时,可以使用`reload`强制重新载入它,例如:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6 3.1416\n"
]
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"reload(ex1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"删除之前生成的文件:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import os\n",
"os.remove('ex1.py')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## `__name__` 属性"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"有时候我们想将一个 `.py` 文件既当作脚本,又能当作模块用,这个时候可以使用 `__name__` 这个属性。\n",
"\n",
"只有当文件被当作脚本执行的时候, `__name__`的值才会是 `'__main__'`,所以我们可以:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Writing ex2.py\n"
]
}
],
"source": [
"%%writefile ex2.py\n",
"\n",
"PI = 3.1416\n",
"\n",
"def sum(lst):\n",
" \"\"\" Sum the values in a list\n",
" \"\"\"\n",
" tot = 0\n",
" for value in lst:\n",
" tot = tot + value\n",
" return tot\n",
"\n",
"def add(x, y):\n",
" \" Add two values.\"\n",
" a = x + y\n",
" return a\n",
"\n",
"def test():\n",
" w = [0,1,2,3]\n",
" assert(sum(w) == 6)\n",
" print 'test passed.'\n",
" \n",
"if __name__ == '__main__':\n",
" test()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"运行文件:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"test passed.\n"
]
}
],
"source": [
"%run ex2.py"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当作模块导入, `test()` 不会执行:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import ex2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"但是可以使用其中的变量:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"3.1416"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ex2.PI"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用别名:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"3.1416"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import ex2 as e2\n",
"e2.PI"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 其他导入方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以从模块中导入变量:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from ex2 import add, PI"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `from` 后,可以直接使用 `add` , `PI`:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"5"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"add(2, 3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"或者使用 `*` 导入所有变量:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"7.5"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from ex2 import *\n",
"add(3, 4.5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这种导入方法不是很提倡,因为如果你不确定导入的都有哪些,可能覆盖一些已有的函数。\n",
"\n",
"删除文件:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import os\n",
"os.remove('ex2.py')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 包"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"假设我们有这样的一个文件夹:\n",
"\n",
"foo/\n",
"- `__init__.py` \n",
"- `bar.py` (defines func)\n",
"- `baz.py` (defines zap)\n",
"\n",
"这意味着 foo 是一个包,我们可以这样导入其中的内容:\n",
"\n",
"```python \n",
"from foo.bar import func\n",
"from foo.baz import zap\n",
"```\n",
"\n",
"`bar` 和 `baz` 都是 `foo` 文件夹下的 `.py` 文件。\n",
"\n",
"导入包要求:\n",
"- 文件夹 `foo` 在**Python**的搜索路径中\n",
"- `__init__.py` 表示 `foo` 是一个包,它可以是个空文件。"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## 常用的标准库"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- re 正则表达式\n",
"- copy 复制\n",
"- math, cmath 数学\n",
"- decimal, fraction\n",
"- sqlite3 数据库\n",
"- os, os.path 文件系统\n",
"- gzip, bz2, zipfile, tarfile 压缩文件\n",
"- csv, netrc 各种文件格式\n",
"- xml\n",
"- htmllib\n",
"- ftplib, socket\n",
"- cmd 命令行\n",
"- pdb \n",
"- profile, cProfile, timeit\n",
"- collections, heapq, bisect 数据结构\n",
"- mmap\n",
"- threading, Queue 并行\n",
"- multiprocessing\n",
"- subprocess\n",
"- pickle, cPickle\n",
"- struct"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## PYTHONPATH设置"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python的搜索路径可以通过环境变量PYTHONPATH设置,环境变量的设置方法依操作系统的不同而不同,具体方法可以网上搜索。"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.19-exceptions.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 异常"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## try & except 块"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"写代码的时候,出现错误必不可免,即使代码没有问题,也可能遇到别的问题。\n",
"\n",
"看下面这段代码:\n",
"\n",
"```python \n",
"import math\n",
"\n",
"while True:\n",
" text = raw_input('> ')\n",
" if text[0] == 'q':\n",
" break\n",
" x = float(text)\n",
" y = math.log10(x)\n",
" print \"log10({0}) = {1}\".format(x, y)\n",
"```\n",
"\n",
"这段代码接收命令行的输入,当输入为数字时,计算它的对数并输出,直到输入值为 `q` 为止。\n",
"\n",
"乍看没什么问题,然而当我们输入0或者负数时:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"> -1\n"
]
},
{
"ename": "ValueError",
"evalue": "math domain error",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;32mbreak\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfloat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtext\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 8\u001b[1;33m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmath\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlog10\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 9\u001b[0m \u001b[1;32mprint\u001b[0m \u001b[1;34m\"log10({0}) = {1}\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mValueError\u001b[0m: math domain error"
]
}
],
"source": [
"import math\n",
"\n",
"while True:\n",
" text = raw_input('> ')\n",
" if text[0] == 'q':\n",
" break\n",
" x = float(text)\n",
" y = math.log10(x)\n",
" print \"log10({0}) = {1}\".format(x, y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`log10` 函数会报错,因为不能接受非正值。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"一旦报错,程序就会停止执行,如果不希望程序停止执行,那么我们可以添加一对 `try & except`: "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```python\n",
"import math\n",
"\n",
"while True:\n",
" try:\n",
" text = raw_input('> ')\n",
" if text[0] == 'q':\n",
" break\n",
" x = float(text)\n",
" y = math.log10(x)\n",
" print \"log10({0}) = {1}\".format(x, y)\n",
" except ValueError:\n",
" print \"the value must be greater than 0\"\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"一旦 `try` 块中的内容出现了异常,那么 `try` 块后面的内容会被忽略,**Python**会寻找 `except` 里面有没有对应的内容,如果找到,就执行对应的块,没有则抛出这个异常。\n",
"\n",
"在上面的例子中,`try` 抛出的是 `ValueError`,`except` 中有对应的内容,所以这个异常被 `except` 捕捉到,程序可以继续执行:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"> -1\n",
"the value must be greater than 0\n",
"> 0\n",
"the value must be greater than 0\n",
"> 1\n",
"log10(1.0) = 0.0\n",
"> q\n"
]
}
],
"source": [
"import math\n",
"\n",
"while True:\n",
" try:\n",
" text = raw_input('> ')\n",
" if text[0] == 'q':\n",
" break\n",
" x = float(text)\n",
" y = math.log10(x)\n",
" print \"log10({0}) = {1}\".format(x, y)\n",
" except ValueError:\n",
" print \"the value must be greater than 0\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 捕捉不同的错误类型"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"``` python\n",
"import math\n",
"\n",
"while True:\n",
" try:\n",
" text = raw_input('> ')\n",
" if text[0] == 'q':\n",
" break\n",
" x = float(text)\n",
" y = 1 / math.log10(x)\n",
" print \"log10({0}) = {1}\".format(x, y)\n",
" except ValueError:\n",
" print \"the value must be greater than 0\"\n",
"```\n",
"\n",
"假设我们将这里的 `y` 更改为 `1 / math.log10(x)`,此时输入 `1`:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"> 1\n"
]
},
{
"ename": "ZeroDivisionError",
"evalue": "float division by zero",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[1;32mbreak\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 8\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfloat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtext\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 9\u001b[1;33m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m1\u001b[0m \u001b[1;33m/\u001b[0m \u001b[0mmath\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlog10\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 10\u001b[0m \u001b[1;32mprint\u001b[0m \u001b[1;34m\"log10({0}) = {1}\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 11\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mZeroDivisionError\u001b[0m: float division by zero"
]
}
],
"source": [
"import math\n",
"\n",
"while True:\n",
" try:\n",
" text = raw_input('> ')\n",
" if text[0] == 'q':\n",
" break\n",
" x = float(text)\n",
" y = 1 / math.log10(x)\n",
" print \"log10({0}) = {1}\".format(x, y)\n",
" except ValueError:\n",
" print \"the value must be greater than 0\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"因为我们的 `except` 里面并没有 `ZeroDivisionError`,所以会抛出这个异常,我们可以通过两种方式解决这个问题:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 捕捉所有异常"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"将`except` 的值改成 `Exception` 类,来捕获所有的异常。"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"> 1\n",
"invalid value\n",
"> 0\n",
"invalid value\n",
"> -1\n",
"invalid value\n",
"> 2\n",
"1 / log10(2.0) = 3.32192809489\n",
"> q\n"
]
}
],
"source": [
"import math\n",
"\n",
"while True:\n",
" try:\n",
" text = raw_input('> ')\n",
" if text[0] == 'q':\n",
" break\n",
" x = float(text)\n",
" y = 1 / math.log10(x)\n",
" print \"1 / log10({0}) = {1}\".format(x, y)\n",
" except Exception:\n",
" print \"invalid value\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 指定特定值"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里,我们把 `ZeroDivisionError` 加入 `except` 。"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"> 1\n",
"invalid value\n",
"> -1\n",
"invalid value\n",
"> 0\n",
"invalid value\n",
"> q\n"
]
}
],
"source": [
"import math\n",
"\n",
"while True:\n",
" try:\n",
" text = raw_input('> ')\n",
" if text[0] == 'q':\n",
" break\n",
" x = float(text)\n",
" y = 1 / math.log10(x)\n",
" print \"1 / log10({0}) = {1}\".format(x, y)\n",
" except (ValueError, ZeroDivisionError):\n",
" print \"invalid value\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"或者另加处理:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"> 1\n",
"the value must not be 1\n",
"> -1\n",
"the value must be greater than 0\n",
"> 0\n",
"the value must be greater than 0\n",
"> 2\n",
"1 / log10(2.0) = 3.32192809489\n",
"> q\n"
]
}
],
"source": [
"import math\n",
"\n",
"while True:\n",
" try:\n",
" text = raw_input('> ')\n",
" if text[0] == 'q':\n",
" break\n",
" x = float(text)\n",
" y = 1 / math.log10(x)\n",
" print \"1 / log10({0}) = {1}\".format(x, y)\n",
" except ValueError:\n",
" print \"the value must be greater than 0\"\n",
" except ZeroDivisionError:\n",
" print \"the value must not be 1\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"事实上,我们还可以将这两种方式结合起来,用 `Exception` 来捕捉其他的错误:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"> 1\n",
"the value must not be 1\n",
"> -1\n",
"the value must be greater than 0\n",
"> 0\n",
"the value must be greater than 0\n",
"> q\n"
]
}
],
"source": [
"import math\n",
"\n",
"while True:\n",
" try:\n",
" text = raw_input('> ')\n",
" if text[0] == 'q':\n",
" break\n",
" x = float(text)\n",
" y = 1 / math.log10(x)\n",
" print \"1 / log10({0}) = {1}\".format(x, y)\n",
" except ValueError:\n",
" print \"the value must be greater than 0\"\n",
" except ZeroDivisionError:\n",
" print \"the value must not be 1\"\n",
" except Exception:\n",
" print \"unexpected error\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 得到异常的具体信息"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在上面的例子中,当我们输入不能转换为浮点数的字符串时,它输出的是 `the value must be greater than 0`,这并没有反映出实际情况。"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "ValueError",
"evalue": "could not convert string to float: a",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mfloat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'a'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mValueError\u001b[0m: could not convert string to float: a"
]
}
],
"source": [
"float('a')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"为了得到异常的具体信息,我们将这个 `ValueError` 具现化:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"> 1\n",
"the value must not be 1\n",
"> -1\n",
"the value must be greater than 0\n",
"> aa\n",
"could not convert 'aa' to float\n",
"> q\n"
]
}
],
"source": [
"import math\n",
"\n",
"while True:\n",
" try:\n",
" text = raw_input('> ')\n",
" if text[0] == 'q':\n",
" break\n",
" x = float(text)\n",
" y = 1 / math.log10(x)\n",
" print \"1 / log10({0}) = {1}\".format(x, y)\n",
" except ValueError as exc:\n",
" if exc.message == \"math domain error\":\n",
" print \"the value must be greater than 0\"\n",
" else:\n",
" print \"could not convert '%s' to float\" % text\n",
" except ZeroDivisionError:\n",
" print \"the value must not be 1\"\n",
" except Exception as exc:\n",
" print \"unexpected error:\", exc.message"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"同时,我们也将捕获的其他异常的信息显示出来。\n",
"\n",
"这里,`exc.message` 显示的内容是异常对应的说明,例如\n",
"\n",
" ValueError: could not convert string to float: a\n",
"\n",
"对应的 `message` 是 \n",
"\n",
" could not convert string to float: a\n",
"\n",
"当我们使用 `except Exception` 时,会捕获所有的 `Exception` 和它派生出来的子类,但不是所有的异常都是从 `Exception` 类派生出来的,可能会出现一些不能捕获的情况,因此,更加一般的做法是使用这样的形式:\n",
"\n",
"```python\n",
"try:\n",
" pass\n",
"except:\n",
" pass\n",
"```\n",
"\n",
"这样不指定异常的类型会捕获所有的异常,但是这样的形式并不推荐。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 自定义异常"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"异常是标准库中的类,这意味着我们可以自定义异常类:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class CommandError(ValueError):\n",
" pass"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里我们定义了一个继承自 `ValueError` 的异常类,异常类一般接收一个字符串作为输入,并把这个字符串当作异常信息,例如:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"> bad command\n"
]
},
{
"ename": "CommandError",
"evalue": "Invalid commmand: bad command",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mCommandError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mcommand\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mraw_input\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'> '\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mcommand\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlower\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mvalid_commands\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 6\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mCommandError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'Invalid commmand: %s'\u001b[0m \u001b[1;33m%\u001b[0m \u001b[0mcommand\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mCommandError\u001b[0m: Invalid commmand: bad command"
]
}
],
"source": [
"valid_commands = {'start', 'stop', 'pause'}\n",
"\n",
"while True:\n",
" command = raw_input('> ')\n",
" if command.lower() not in valid_commands:\n",
" raise CommandError('Invalid commmand: %s' % command)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我们使用 `raise` 关键词来抛出异常。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我们可以使用 `try/except` 块来捕捉这个异常:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"``` python\n",
"valid_commands = {'start', 'stop', 'pause'}\n",
"\n",
"while True:\n",
" command = raw_input('> ')\n",
" try:\n",
" if command.lower() not in valid_commands:\n",
" raise CommandError('Invalid commmand: %s' % command)\n",
" except CommandError:\n",
" print 'Bad command string: \"%s\"' % command\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"由于 `CommandError` 继承自 `ValueError`,我们也可以使用 `except ValueError` 来捕获这个异常。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## finally"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"try/catch 块还有一个可选的关键词 finally。\n",
"\n",
"不管 try 块有没有异常, finally 块的内容总是会被执行,而且会在抛出异常前执行,因此可以用来作为安全保证,比如确保打开的文件被关闭。。"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\n",
"finally was called.\n"
]
}
],
"source": [
"try:\n",
" print 1\n",
"finally:\n",
" print 'finally was called.'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在抛出异常前执行:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"finally was called.\n"
]
},
{
"ename": "ZeroDivisionError",
"evalue": "integer division or modulo by zero",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[1;32mprint\u001b[0m \u001b[1;36m1\u001b[0m \u001b[1;33m/\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[1;32mfinally\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;32mprint\u001b[0m \u001b[1;34m'finally was called.'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mZeroDivisionError\u001b[0m: integer division or modulo by zero"
]
}
],
"source": [
"try:\n",
" print 1 / 0\n",
"finally:\n",
" print 'finally was called.'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果异常被捕获了,在最后执行:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"divide by 0.\n",
"finally was called.\n"
]
}
],
"source": [
"try:\n",
" print 1 / 0\n",
"except ZeroDivisionError:\n",
" print 'divide by 0.'\n",
"finally:\n",
" print 'finally was called.'"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.20-warnings.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 警告"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"出现了一些需要让用户知道的问题,但又不想停止程序,这时候我们可以使用警告:\n",
"\n",
"首先导入警告模块:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import warnings"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在需要的地方,我们使用 `warnings` 中的 `warn` 函数:\n",
"\n",
" warn(msg, WarningType = UserWarning)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Anaconda\\lib\\site-packages\\IPython\\kernel\\__main__.py:4: RuntimeWarning: month (13) is not between 1 and 12\n"
]
}
],
"source": [
"def month_warning(m):\n",
" if not 1<= m <= 12:\n",
" msg = \"month (%d) is not between 1 and 12\" % m\n",
" warnings.warn(msg, RuntimeWarning)\n",
"\n",
"month_warning(13)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"有时候我们想要忽略特定类型的警告,可以使用 `warnings` 的 `filterwarnings` 函数:\n",
"\n",
" filterwarnings(action, category)\n",
"\n",
"将 `action` 设置为 `'ignore'` 便可以忽略特定类型的警告:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"warnings.filterwarnings(action = 'ignore', category = RuntimeWarning)\n",
"\n",
"month_warning(13)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 02-python-essentials/02.21-file-IO.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 文件读写"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"写入测试文件:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Writing test.txt\n"
]
}
],
"source": [
"%%writefile test.txt\n",
"this is a test file.\n",
"hello world!\n",
"python is good!\n",
"today is a good day."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 读文件"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `open` 函数或者 `file` 函数来读文件,使用文件名的字符串作为输入参数:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"f = open('test.txt')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"f = file('test.txt')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这两种方式没有太大区别。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"默认以读的方式打开文件,如果文件不存在会报错。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以使用 `read` 方法来读入文件中的所有内容:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"this is a test file.\n",
"hello world!\n",
"python is good!\n",
"today is a good day.\n"
]
}
],
"source": [
"text = f.read()\n",
"print text"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"也可以按照行读入内容,`readlines` 方法返回一个列表,每个元素代表文件中每一行的内容:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['this is a test file.\\n', 'hello world!\\n', 'python is good!\\n', 'today is a good day.']\n"
]
}
],
"source": [
"f = open('test.txt')\n",
"lines = f.readlines()\n",
"print lines"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用完文件之后,需要将文件关闭。"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"f.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"事实上,我们可以将 `f` 放在一个循环中,得到它每一行的内容:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"this is a test file.\n",
"\n",
"hello world!\n",
"\n",
"python is good!\n",
"\n",
"today is a good day.\n"
]
}
],
"source": [
"f = open('test.txt')\n",
"for line in f:\n",
" print line\n",
"f.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"删除刚才创建的文件:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os\n",
"os.remove('test.txt')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 写文件"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我们使用 `open` 函数的写入模式来写文件:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"f = open('myfile.txt', 'w')\n",
"f.write('hello world!')\n",
"f.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `w` 模式时,如果文件不存在会被创建,我们可以查看是否真的写入成功:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello world!\n"
]
}
],
"source": [
"print open('myfile.txt').read()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果文件已经存在, `w` 模式会覆盖之前写的所有内容:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"another hello world!\n"
]
}
],
"source": [
"f = open('myfile.txt', 'w')\n",
"f.write('another hello world!')\n",
"f.close()\n",
"print open('myfile.txt').read()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"除了写入模式,还有追加模式 `a` ,追加模式不会覆盖之前已经写入的内容,而是在之后继续写入:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"another hello world!... and more\n"
]
}
],
"source": [
"f = open('myfile.txt', 'a')\n",
"f.write('... and more')\n",
"f.close()\n",
"print open('myfile.txt').read()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"写入结束之后一定要将文件关闭,否则可能出现内容没有完全写入文件中的情况。\n",
"\n",
"还可以使用读写模式 `w+`:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"world!\n"
]
}
],
"source": [
"f = open('myfile.txt', 'w+')\n",
"f.write('hello world!')\n",
"f.seek(6)\n",
"print f.read()\n",
"f.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里 `f.seek(6)` 移动到文件的第6个字符处,然后 `f.read()` 读出剩下的内容。"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os\n",
"os.remove('myfile.txt')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 二进制文件"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"二进制读写模式 b:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"'\\x86H\\x93\\xe1\\xd8\\xef\\xc0\\xaa(\\x17\\xa9\\xc9\\xa51\\xf1\\x98'\n"
]
}
],
"source": [
"import os\n",
"f = open('binary.bin', 'wb')\n",
"f.write(os.urandom(16))\n",
"f.close()\n",
"\n",
"f = open('binary.bin', 'rb')\n",
"print repr(f.read())\n",
"f.close()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os\n",
"os.remove('binary.bin')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 换行符"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不同操作系统的换行符可能不同:\n",
"\n",
"- `\\r`\n",
"- `\\n`\n",
"- `\\r\\n`\n",
"\n",
"使用 `U` 选项,可以将这三个统一看成 `\\n` 换行符。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 关闭文件"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在**Python**中,如果一个打开的文件不再被其他变量引用时,它会自动关闭这个文件。\n",
"\n",
"所以正常情况下,如果一个文件正常被关闭了,忘记调用文件的 `close` 方法不会有什么问题。\n",
"\n",
"关闭文件可以保证内容已经被写入文件,而不关闭可能会出现意想不到的结果:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"''\n"
]
}
],
"source": [
"f = open('newfile.txt','w')\n",
"f.write('hello world')\n",
"g = open('newfile.txt', 'r')\n",
"print repr(g.read())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"虽然这里写了内容,但是在关闭之前,这个内容并没有被写入磁盘。\n",
"\n",
"使用循环写入的内容也并不完整:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello world: 0\n",
"hello world: 1\n",
"hello world: 2\n",
"hello world: 3\n",
"hello world: 4\n",
"hello world: 5\n",
"hello world: 6\n",
"hello world: 7\n",
"hello world: 8\n",
"hello world: 9\n",
"hello world: 10\n",
"hello world: 11\n",
"hello world: 12\n",
"hello world: 13\n",
"hello world: 14\n",
"hello world: 15\n",
"hello world: 16\n",
"hello world: 17\n",
"hello world: 18\n",
"hello world: 19\n",
"hello world: 20\n",
"hello world: 21\n",
"hello world: 22\n",
"hello world: 23\n",
"hello world: 24\n",
"hello world: 25\n",
"hello world: 26\n",
"hello world: 27\n",
"hello world: 28\n",
"hello world: 29\n",
"hello world: 30\n",
"hello world: 31\n",
"hello world: 32\n",
"hello world: 33\n",
"hello world: 34\n",
"hello world: 35\n",
"hello world: 36\n",
"hello world: 37\n",
"hello world: 38\n",
"hello world: 39\n",
"hello world: 40\n",
"hello world: 41\n",
"hello world: 42\n",
"hello world: 43\n",
"hello world: 44\n",
"hello world: 45\n",
"hello world: 46\n",
"hello world: 47\n",
"hello world: 48\n",
"hello world: 49\n",
"hello world: 50\n",
"hello world: 51\n",
"hello world: 52\n",
"hello world: 53\n",
"hello world: 54\n",
"hello world: 55\n",
"hello world: 56\n",
"hello world: 57\n",
"hello world: 58\n",
"hello world: 59\n",
"hello world: 60\n",
"hello world: 61\n",
"hello world: 62\n",
"hello world: 63\n",
"hello world: 64\n",
"hello world: 65\n",
"hello world: 66\n",
"hello world: 67\n",
"hello world: 68\n",
"hello world: 69\n",
"hello world: 70\n",
"hello world: 71\n",
"hello world: 72\n",
"hello world: 73\n",
"hello world: 74\n",
"hello world: 75\n",
"hello world: 76\n",
"hello world: 77\n",
"hello world: 78\n",
"hello world: 79\n",
"hello world: 80\n",
"hello world: 81\n",
"hello world: 82\n",
"hello world: 83\n",
"hello world: 84\n",
"hello world: 85\n",
"hello world: 86\n",
"hello world: 87\n",
"hello world: 88\n",
"hello world: 89\n",
"hello world: 90\n",
"hello world: 91\n",
"hello world: 92\n",
"hello world: 93\n",
"hello world: 94\n",
"hello world: 95\n",
"hello world: 96\n",
"hello world: 97\n",
"hello world: 98\n",
"hello world: 99\n",
"hello world: 100\n",
"hello world: 101\n",
"hello world: 102\n",
"hello world: 103\n",
"hello world: 104\n",
"hello world: 105\n",
"hello world: 106\n",
"hello world: 107\n",
"hello world: 108\n",
"hello world: 109\n",
"hello world: 110\n",
"hello world: 111\n",
"hello world: 112\n",
"hello world: 113\n",
"hello world: 114\n",
"hello world: 115\n",
"hello world: 116\n",
"hello world: 117\n",
"hello world: 118\n",
"hello world: 119\n",
"hello world: 120\n",
"hello world: 121\n",
"hello world: 122\n",
"hello world: 123\n",
"hello world: 124\n",
"hello world: 125\n",
"hello world: 126\n",
"hello world: 127\n",
"hello world: 128\n",
"hello world: 129\n",
"hello world: 130\n",
"hello world: 131\n",
"hello world: 132\n",
"hello world: 133\n",
"hello world: 134\n",
"hello world: 135\n",
"hello world: 136\n",
"hello world: 137\n",
"hello world: 138\n",
"hello world: 139\n",
"hello world: 140\n",
"hello world: 141\n",
"hello world: 142\n",
"hello world: 143\n",
"hello world: 144\n",
"hello world: 145\n",
"hello world: 146\n",
"hello world: 147\n",
"hello world: 148\n",
"hello world: 149\n",
"hello world: 150\n",
"hello world: 151\n",
"hello world: 152\n",
"hello world: 153\n",
"hello world: 154\n",
"hello world: 155\n",
"hello world: 156\n",
"hello world: 157\n",
"hello world: 158\n",
"hello world: 159\n",
"hello world: 160\n",
"hello world: 161\n",
"hello world: 162\n",
"hello world: 163\n",
"hello world: 164\n",
"hello world: 165\n",
"hello world: 166\n",
"hello world: 167\n",
"hello world: 168\n",
"hello world: 169\n",
"hello world: 170\n",
"hello world: 171\n",
"hello world: 172\n",
"hello world: 173\n",
"hello world: 174\n",
"hello world: 175\n",
"hello world: 176\n",
"hello world: 177\n",
"hello world: 178\n",
"hello world: 179\n",
"hello world: 180\n",
"hello world: 181\n",
"hello world: 182\n",
"hello world: 183\n",
"hello world: 184\n",
"hello world: 185\n",
"hello world: 186\n",
"hello world: 187\n",
"hello world: 188\n",
"hello world: 189\n",
"hello world: 190\n",
"hello world: 191\n",
"hello world: 192\n",
"hello world: 193\n",
"hello world: 194\n",
"hello world: 195\n",
"hello world: 196\n",
"hello world: 197\n",
"hello world: 198\n",
"hello world: 199\n",
"hello world: 200\n",
"hello world: 201\n",
"hello world: 202\n",
"hello world: 203\n",
"hello world: 204\n",
"hello world: 205\n",
"hello world: 206\n",
"hello world: 207\n",
"hello world: 208\n",
"hello world: 209\n",
"hello world: 210\n",
"hello world: 211\n",
"hello world: 212\n",
"hello world: 213\n",
"hello world: 214\n",
"hello world: 215\n",
"hello world: 216\n",
"hello world: 217\n",
"hello world: 218\n",
"hello world: 219\n",
"hello world: 220\n",
"hello world: 221\n",
"hello world: 222\n",
"hello world: 223\n",
"hello world: 224\n",
"hello world: 225\n",
"hello world: 226\n",
"hello world: 227\n",
"hello world: 228\n",
"hello world: 229\n",
"hello world: 230\n",
"hello world: 231\n",
"hello world: 232\n",
"hello world: 233\n",
"hello world: 234\n",
"hello world: 235\n",
"hello world: 236\n",
"hello world: 237\n",
"hello world: 238\n",
"hello world: 239\n",
"hello world: 240\n",
"hello world: 241\n",
"hello world: 242\n",
"hello world: 243\n",
"hello world: 244\n",
"hello world: 245\n",
"hello world: 246\n",
"hello world: 247\n",
"hello world: 248\n",
"hello world: 249\n",
"hello world: 250\n",
"hello world: 251\n",
"hello world: 252\n",
"hello world: 253\n",
"hello world: 254\n",
"hello world: 255\n",
"hello world: 256\n",
"hello world: 257\n",
"hello world: 258\n",
"hello world: 259\n",
"hello world: 260\n",
"hello world: 261\n",
"hello world: 262\n",
"hello world: 263\n",
"hello world: 264\n",
"hello world: 265\n",
"hello world: 266\n",
"hello world: 267\n",
"hello world: 268\n",
"hello world: 269\n",
"hello world: 270\n",
"hello world: 271\n",
"hello world: 272\n",
"hello world: 273\n",
"hello world: 274\n",
"hello world: 275\n",
"hello world: 276\n",
"hello world: 277\n",
"hello world: 278\n",
"hello world: 279\n",
"hello world: 280\n",
"hello world: 281\n",
"hello world: 282\n",
"hello world: 283\n",
"hello world: 284\n",
"hello world: 285\n",
"hello world: 286\n",
"hello world: 287\n",
"hello world: 288\n",
"hello world: 289\n",
"hello world: 290\n",
"hello world: 291\n",
"hello world: 292\n",
"hello world: 293\n",
"hello world: 294\n",
"hello world: 295\n",
"hello world: 296\n",
"hello world: 297\n",
"hello world: 298\n",
"hello world: 299\n",
"hello world: 300\n",
"hello world: 301\n",
"hello world: 302\n",
"hello world: 303\n",
"hello world: 304\n",
"hello world: 305\n",
"hello world: 306\n",
"hello world: 307\n",
"hello world: 308\n",
"hello world: 309\n",
"hello world: 310\n",
"hello world: 311\n",
"hello world: 312\n",
"hello world: 313\n",
"hello world: 314\n",
"hello world: 315\n",
"hello world: 316\n",
"hello world: 317\n",
"hello world: 318\n",
"hello world: 319\n",
"hello world: 320\n",
"hello world: 321\n",
"hello world: 322\n",
"hello world: 323\n",
"hello world: 324\n",
"hello world: 325\n",
"hello world: 326\n",
"hello world: 327\n",
"hello world: 328\n",
"hello world: 329\n",
"hello world: 330\n",
"hello world: 331\n",
"hello world: 332\n",
"hello world: 333\n",
"hello world: 334\n",
"hello world: 335\n",
"hello world: 336\n",
"hello world: 337\n",
"hello world: 338\n",
"hello world: 339\n",
"hello world: 340\n",
"hello world: 341\n",
"hello world: 342\n",
"hello world: 343\n",
"hello world: 344\n",
"hello world: 345\n",
"hello world: 346\n",
"hello world: 347\n",
"hello world: 348\n",
"hello world: 349\n",
"hello world: 350\n",
"hello world: 351\n",
"hello world: 352\n",
"hello world: 353\n",
"hello world: 354\n",
"hello world: 355\n",
"hello world: 356\n",
"hello world: 357\n",
"hello world: 358\n",
"hello world: 359\n",
"hello world: 360\n",
"hello world: 361\n",
"hello world: 362\n",
"hello world: 363\n",
"hello world: 364\n",
"hello world: 365\n",
"hello world: 366\n",
"hello world: 367\n",
"hello world: 368\n",
"hello world: 369\n",
"hello world: 370\n",
"hello world: 371\n",
"hello world: 372\n",
"hello world: 373\n",
"hello world: 374\n",
"hello world: 375\n",
"hello world: 376\n",
"hello world: 377\n",
"hello world: 378\n",
"hello world: 379\n",
"hello world: 380\n",
"hello world: 381\n",
"hello world: 382\n",
"hello world: 383\n",
"hello world: 384\n",
"hello world: 385\n",
"hello world: 386\n",
"hello world: 387\n",
"hello world: 388\n",
"hello world: 389\n",
"hello world: 390\n",
"hello world: 391\n",
"hello world: 392\n",
"hello world: 393\n",
"hello world: 394\n",
"hello world: 395\n",
"hello world: 396\n",
"hello world: 397\n",
"hello world: 398\n",
"hello world: 399\n",
"hello world: 400\n",
"hello world: 401\n",
"hello world: 402\n",
"hello world: 403\n",
"hello world: 404\n",
"hello world: 405\n",
"hello world: 406\n",
"hello world: 407\n",
"hello world: 408\n",
"hello world: 409\n",
"hello world: 410\n",
"hello world: 411\n",
"hello world: 412\n",
"hello world: 413\n",
"hello world: 414\n",
"hello world: 415\n",
"hello world: 416\n",
"hello world: 417\n",
"hello world: 418\n",
"hello world: 419\n",
"hello world: 420\n",
"hello world: 421\n",
"hello world: 422\n",
"hello world: 423\n",
"hello world: 424\n",
"hello world: 425\n",
"hello world: 426\n",
"hello world: 427\n",
"hello world: 428\n",
"hello world: 429\n",
"hello world: 430\n",
"hello world: 431\n",
"hello world: 432\n",
"hello world: 433\n",
"hello world: 434\n",
"hello world: 435\n",
"hello world: 436\n",
"hello world: 437\n",
"hello world: 438\n",
"hello world: 439\n",
"hello world: 440\n",
"hello world: 441\n",
"hello world: 442\n",
"hello world: 443\n",
"hello world: 444\n",
"hello world: 445\n",
"hello world: 446\n",
"hello world: 447\n",
"hello world: 448\n",
"hello world: 449\n",
"hello world: 450\n",
"hello world: 451\n",
"hello world: 452\n",
"hello world: 453\n",
"hello world: 454\n",
"hello world: 455\n",
"hello world: 456\n",
"hello world: 457\n",
"hello world: 458\n",
"hello world: 459\n",
"hello world: 460\n",
"hello world: 461\n",
"hello world: 462\n",
"hello world: 463\n",
"hello world: 464\n",
"hello world: 465\n",
"hello world: 466\n",
"hello world: 467\n",
"hello world: 468\n",
"hello world: 469\n",
"hello world: 470\n",
"hello world: 471\n",
"hello world: 472\n",
"hello world: 473\n",
"hello world: 474\n",
"hello world: 475\n",
"hello world: 476\n",
"hello world: 477\n",
"hello world: 478\n",
"hello world: 479\n",
"hello world: 480\n",
"hello world: 481\n",
"hello world: 482\n",
"hello world: 483\n",
"hello world: 484\n",
"hello world: 485\n",
"hello world: 486\n",
"hello world: 487\n",
"hello world: 488\n",
"hello world: 489\n",
"hello world: 490\n",
"hello world: 491\n",
"hello world: 492\n",
"hello world: 493\n",
"hello world: 494\n",
"hello world: 495\n",
"hello world: 496\n",
"hello world: 497\n",
"hello world: 498\n",
"hello world: 499\n",
"hello world: 500\n",
"hello world: 501\n",
"hello world: 502\n",
"hello world: 503\n",
"hello world: 504\n",
"hello world: 505\n",
"hello world: 506\n",
"hello world: 507\n",
"hello world: 508\n",
"hello world: 509\n",
"hello world: 510\n",
"hello world: 511\n",
"hello world: 512\n",
"hello world: 513\n",
"hello world: 514\n",
"hello world: 515\n",
"hello world: 516\n",
"hello world: 517\n",
"hello world: 518\n",
"hello world: 519\n",
"hello world: 520\n",
"hello world: 521\n",
"hello world: 522\n",
"hello world: 523\n",
"hello world: 524\n",
"hello world: 525\n",
"hello world: 526\n",
"hello world: 527\n",
"hello world: 528\n",
"hello world: 529\n",
"hello world: 530\n",
"hello world: 531\n",
"hello world: 532\n",
"hello world: 533\n",
"hello world: 534\n",
"hello world: 535\n",
"hello world: 536\n",
"hello world: 537\n",
"hello world: 538\n",
"hello world: 539\n",
"hello world: 540\n",
"hello world: 541\n",
"hello world: 542\n",
"hello world: 543\n",
"hello world: 544\n",
"hello world: 545\n",
"hello world: 546\n",
"hello world: 547\n",
"hello world: 548\n",
"hello world: 549\n",
"hello world: 550\n",
"hello world: 551\n",
"hello world: 552\n",
"hello world: 553\n",
"hello world: 554\n",
"hello world: 555\n",
"hello world: 556\n",
"hello world: 557\n",
"hello world: 558\n",
"hello world: 559\n",
"hello world: 560\n",
"hello world: 561\n",
"hello world: 562\n",
"hello world: 563\n",
"hello world: 564\n",
"hello world: 565\n",
"hello world: 566\n",
"hello world: 567\n",
"hello world: 568\n",
"hello world: 569\n",
"hello world: 570\n",
"hello world: 571\n",
"hello world: 572\n",
"hello world: 573\n",
"hello world: 574\n",
"hello world: 575\n",
"hello world: 576\n",
"hello world: 577\n",
"hello world: 578\n",
"hello world: 579\n",
"hello world: 580\n",
"hello world: 581\n",
"hello world: 582\n",
"hello world: 583\n",
"hello world: 584\n",
"hello world: 585\n",
"hello world: 586\n",
"hello world: 587\n",
"hello world: 588\n",
"hello world: 589\n",
"hello world: 590\n",
"hello world: 591\n",
"hello world: 592\n",
"hello world: 593\n",
"hello world: 594\n",
"hello world: 595\n",
"hello world: 596\n",
"hello world: 597\n",
"hello world: 598\n",
"hello world: 599\n",
"hello world: 600\n",
"hello world: 601\n",
"hello world: 602\n",
"hello world: 603\n",
"hello world: 604\n",
"hello world: 605\n",
"hello world: 606\n",
"hello world: 607\n",
"hello world: 608\n",
"hello world: 609\n",
"hello world: 610\n",
"hello world: 611\n",
"hello world: 612\n",
"hello world: 613\n",
"hello world: 614\n",
"hello world: 615\n",
"hello world: 616\n",
"hello world: 617\n",
"hello world: 618\n",
"hello world: 619\n",
"hello world: 620\n",
"hello world: 621\n",
"hello world: 622\n",
"hello world: 623\n",
"hello world: 624\n",
"hello world: 625\n",
"hello world: 626\n",
"hello world: 627\n",
"hello world: 628\n",
"hello world: 629\n",
"hello world: 630\n",
"hello world: 631\n",
"hello world: 632\n",
"hello world: 633\n",
"hello world: 634\n",
"hello world: 635\n",
"hello world: 636\n",
"hello world: 637\n",
"hello world: 638\n",
"hello world: 639\n",
"hello world: 640\n",
"hello world: 641\n",
"hello world: 642\n",
"hello world: 643\n",
"hello world: 644\n",
"hello world: 645\n",
"hello world: 646\n",
"hello world: 647\n",
"hello world: 648\n",
"hello world: 649\n",
"hello world: 650\n",
"hello world: 651\n",
"hello world: 652\n",
"hello world: 653\n",
"hello world: 654\n",
"hello world: 655\n",
"hello world: 656\n",
"hello world: 657\n",
"hello world: 658\n",
"hello world: 659\n",
"hello world: 660\n",
"hello world: 661\n",
"hello world: 662\n",
"hello world: 663\n",
"hello world: 664\n",
"hello world: 665\n",
"hello world: 666\n",
"hello world: 667\n",
"hello world: 668\n",
"hello world: 669\n",
"hello world: 670\n",
"hello world: 671\n",
"hello world: 672\n",
"hello world: 673\n",
"hello world: 674\n",
"hello world: 675\n",
"hello world: 676\n",
"hello world: 677\n",
"hello world: 678\n",
"hello world: 679\n",
"hello world: 680\n",
"hello world: 681\n",
"hello world: 682\n",
"hello world: 683\n",
"hello world: 684\n",
"hello world: 685\n",
"hello world: 686\n",
"hello world: 687\n",
"hello world: 688\n",
"hello world: 689\n",
"hello world: 690\n",
"hello world: 691\n",
"hello world: 692\n",
"hello world: 693\n",
"hello world: 694\n",
"hello world: 695\n",
"hello world: 696\n",
"hello world: 697\n",
"hello world: 698\n",
"hello world: 699\n",
"hello world: 700\n",
"hello world: 701\n",
"hello world: 702\n",
"hello world: 703\n",
"hello world: 704\n",
"hello world: 705\n",
"hello world: 706\n",
"hello world: 707\n",
"hello world: 708\n",
"hello world: 709\n",
"hello world: 710\n",
"hello world: 711\n",
"hello world: 712\n",
"hello world: 713\n",
"hello world: 714\n",
"hello world: 715\n",
"hello world: 716\n",
"hello world: 717\n",
"hello world: 718\n",
"hello world: 719\n",
"hello world: 720\n",
"hello world: 721\n",
"hello world: 722\n",
"hello world: 723\n",
"hello world: 724\n",
"hello world: 725\n",
"hello world: 726\n",
"hello world: 727\n",
"hello world: 728\n",
"hello world: 729\n",
"hello world: 730\n",
"hello world: 731\n",
"hello world: 732\n",
"hello world: 733\n",
"hello world: 734\n",
"hello world: 735\n",
"hello world: 736\n",
"hello world: 737\n",
"hello world: 738\n",
"hello world: 739\n",
"hello world: 740\n",
"hello world: 741\n",
"hello world: 742\n",
"hello world: 743\n",
"hello world: 744\n",
"hello world: 745\n",
"hello world: 746\n",
"hello world: 747\n",
"hello world: 748\n",
"hello world: 749\n",
"hello world: 750\n",
"hello world: 751\n",
"hello world: 752\n",
"hello world: 753\n",
"hello world: 754\n",
"hello world: 755\n",
"hello world: 756\n",
"hello world: 757\n",
"hello world: 758\n",
"hello world: 759\n",
"hello world: 760\n",
"hello world: 761\n",
"hello world: 762\n",
"hello world: 763\n",
"hello world: 764\n",
"hello world: 765\n",
"hello world: 766\n",
"hello world: 767\n",
"hello world: 768\n",
"hello world: 769\n",
"hello world: 770\n",
"hello world: 771\n",
"hello world: 772\n",
"hello world: 773\n",
"hello world: 774\n",
"hello world: 775\n",
"hello world: 776\n",
"hello world: 777\n",
"hello world: 778\n",
"hello world: 779\n",
"hello world: 780\n",
"hello world: 781\n",
"hello world: 782\n",
"hello world: 783\n",
"hello world: 784\n",
"hello world: 785\n",
"hello world: 786\n",
"hello world: 787\n",
"hello world: 788\n",
"hello world: 789\n",
"hello world: 790\n",
"hello world: 791\n",
"hello world: 792\n",
"hello world: 793\n",
"hello world: 794\n",
"hello world: 795\n",
"hello world: 796\n",
"hello world: 797\n",
"hello world: 798\n",
"hello world: 799\n",
"hello world: 800\n",
"hello world: 801\n",
"hello world: 802\n",
"hello world: 803\n",
"hello world: 804\n",
"hello world: 805\n",
"hello world: 806\n",
"hello world: 807\n",
"hello world: 808\n",
"hello world: 809\n",
"hello world: 810\n",
"hello world: 811\n",
"hello world: 812\n",
"hello world: 813\n",
"hello world: 814\n",
"hello world: 815\n",
"hello world: 816\n",
"hello world: 817\n",
"hello world: 818\n",
"hello world: 819\n",
"hello world: 820\n",
"hello world: 821\n",
"hello world: 822\n",
"hello world: 823\n",
"hello world: 824\n",
"hello world: 825\n",
"hello world: 826\n",
"hello world: 827\n",
"hello world: 828\n",
"hello world: 829\n",
"hello world: 830\n",
"hello world: 831\n",
"hello world: 832\n",
"hello world: 833\n",
"hello world: 834\n",
"hello world: 835\n",
"hello world: 836\n",
"hello world: 837\n",
"hello world: 838\n",
"hello world: 839\n",
"hello world: 840\n",
"hello world: 841\n",
"hello world: 842\n",
"hello world: 843\n",
"hello world: 844\n",
"hello world: 845\n",
"hello world: 846\n",
"hello world: 847\n",
"hello world: 848\n",
"hello world: 849\n",
"hello world: 850\n",
"hello world: 851\n",
"hello world: 852\n",
"hello world: 853\n",
"hello world: 854\n",
"hello world: 855\n",
"hello world: 856\n",
"hello world: 857\n",
"hello world: 858\n",
"hello world: 859\n",
"hello world: 860\n",
"hello world: 861\n",
"hello world: 862\n",
"hello world: 863\n",
"hello world: 864\n",
"hello world: 865\n",
"hello world: 866\n",
"hello world: 867\n",
"hello world: 868\n",
"hello world: 869\n",
"hello world: 870\n",
"hello world: 871\n",
"hello world: 872\n",
"hello world: 873\n",
"hello world: 874\n",
"hello world: 875\n",
"hello world: 876\n",
"hello world: 877\n",
"hello world: 878\n",
"hello world: 879\n",
"hello world: 880\n",
"hello world: 881\n",
"hello world: 882\n",
"hello world: 883\n",
"hello world: 884\n",
"hello world: 885\n",
"hello world: 886\n",
"hello world: 887\n",
"hello world: 888\n",
"hello world: 889\n",
"hello world: 890\n",
"hello world: 891\n",
"hello world: 892\n",
"hello world: 893\n",
"hello world: 894\n",
"hello world: 895\n",
"hello world: 896\n",
"hello world: 897\n",
"hello world: 898\n",
"hello world: 899\n",
"hello world: 900\n",
"hello world: 901\n",
"hello world: 902\n",
"hello world: 903\n",
"hello world: 904\n",
"hello world: 905\n",
"hello world: 906\n",
"hello world: 907\n",
"hello world: 908\n",
"hello world: 909\n",
"hello world: 910\n",
"hello world: 911\n",
"hello world: 912\n",
"hello world: 913\n",
"hello world: 914\n",
"hello world: 915\n",
"hello world: 916\n",
"hello world: 917\n",
"hello world: 918\n",
"hello world: 919\n",
"hello world: 920\n",
"hello world: 921\n",
"hello world: 922\n",
"hello world: 923\n",
"hello world: 924\n",
"hello world: 925\n",
"hello world: 926\n",
"hello world: 927\n",
"hello world: 928\n",
"hello world: 929\n",
"hello world: 930\n",
"hello world: 931\n",
"hello world: 932\n",
"hello world: 933\n",
"hello world: 934\n",
"hello world: 935\n",
"hello world: 936\n",
"hello world: 937\n",
"hello world: 938\n",
"hello world: 939\n",
"hello world: 940\n",
"hello world: 941\n",
"hello world: 942\n",
"hello world: 943\n",
"hello world: 944\n",
"hello world: 945\n",
"hello world: 946\n",
"hello world: 947\n",
"hello world: 948\n",
"hello world: 949\n",
"hello world: 950\n",
"hello world: 951\n",
"hello world: 952\n",
"hello world: 953\n",
"hello world: 954\n",
"hello world: 955\n",
"hello world: 956\n",
"hello world: 957\n",
"hello world: 958\n",
"hello world: 959\n",
"hello world: 960\n",
"hello world: 961\n",
"hello world: 962\n",
"hello world: 963\n",
"hello world: 964\n",
"hello world: 965\n",
"hello world: 966\n",
"hello world: 967\n",
"hello world: 968\n",
"hello world: 969\n",
"hello world: 970\n",
"hello world: 971\n",
"hello world: 972\n",
"hello world: 973\n",
"hello world: 974\n",
"hello world: 975\n",
"hello world: 976\n",
"hello world: 977\n",
"hello world: 978\n",
"hello world: 979\n",
"hello world: 980\n",
"hello world: 981\n",
"hello world: 982\n",
"hello world: 983\n",
"hello world: 984\n",
"hello world: 985\n",
"hello world: 986\n",
"hello world: 987\n",
"hello world: 988\n",
"hello world: 989\n",
"hello world: 990\n",
"hello world: 991\n",
"hello world: 992\n",
"hello world: 993\n",
"hello world: 994\n",
"hello world: 995\n",
"hello world: 996\n",
"hello world: 997\n",
"hello world: 998\n",
"hello world: 999\n",
"hello world: 1000\n",
"hello world: 1001\n",
"hello world: 1002\n",
"hello world: 1003\n",
"hello world: 1004\n",
"hello world: 1005\n",
"hello world: 1006\n",
"hello world: 1007\n",
"hello world: 1008\n",
"hello world: 1009\n",
"hello world: 1010\n",
"hello world: 1011\n",
"hello world: 1012\n",
"hello world: 1013\n",
"hello world: 1014\n",
"hello world: 1015\n",
"hello world: 1016\n",
"hello world: 1017\n",
"hello world: 1018\n",
"hello world: 1019\n",
"hello world: 1020\n",
"hello world: 1021\n",
"hello world: 1022\n",
"hello world: 1023\n",
"hello world: 1024\n",
"hello world: 1025\n",
"hello world: 1026\n",
"hello world: 1027\n",
"hello world: 1028\n",
"hello world: 1029\n",
"hello world: 1030\n",
"hello world: 1031\n",
"hello world: 1032\n",
"hello world: 1033\n",
"hello world: 1034\n",
"hello world: 1035\n",
"hello world: 1036\n",
"hello world: 1037\n",
"hello world: 1038\n",
"hello world: 1039\n",
"hello world: 1040\n",
"hello world: 1041\n",
"hello world: 1042\n",
"hello world: 1043\n",
"hello world: 1044\n",
"hello world: 1045\n",
"hello world: 1046\n",
"hello world: 1047\n",
"hello world: 1048\n",
"hello world: 1049\n",
"hello world: 1050\n",
"hello world: 1051\n",
"hello world: 1052\n",
"hello world: 1053\n",
"hello world: 1054\n",
"hello world: 1055\n",
"hello world: 1056\n",
"hello world: 1057\n",
"hello world: 1058\n",
"hello world: 1059\n",
"hello world: 1060\n",
"hello world: 1061\n",
"hello world: 1062\n",
"hello world: 1063\n",
"hello world: 1064\n",
"hello world: 1065\n",
"hello world: 1066\n",
"hello world: 1067\n",
"hello world: 1068\n",
"hello world: 1069\n",
"hello world: 1070\n",
"hello world: 1071\n",
"hello world: 1072\n",
"hello world: 1073\n",
"hello world: 1074\n",
"hello world: 1075\n",
"hello world: 1076\n",
"hello world: 1077\n",
"hello world: 1078\n",
"hello world: 1079\n",
"hello world: 1080\n",
"hello world: 1081\n",
"hello world: 1082\n",
"hello world: 1083\n",
"hello world: 1084\n",
"hello world: 1085\n",
"hello world: 1086\n",
"hello world: 1087\n",
"hello world: 1088\n",
"hello world: 1089\n",
"hello world: 1090\n",
"hello world: 1091\n",
"hello world: 1092\n",
"hello world: 1093\n",
"hello world: 1094\n",
"hello world: 1095\n",
"hello world: 1096\n",
"hello world: 1097\n",
"hello world: 1098\n",
"hello world: 1099\n",
"hello world: 1100\n",
"hello world: 1101\n",
"hello world: 1102\n",
"hello world: 1103\n",
"hello world: 1104\n",
"hello world: 1105\n",
"hello world: 1106\n",
"hello world: 1107\n",
"hello world: 1108\n",
"hello world: 1109\n",
"hello world: 1110\n",
"hello world: 1111\n",
"hello world: 1112\n",
"hello world: 1113\n",
"hello world: 1114\n",
"hello world: 1115\n",
"hello world: 1116\n",
"hello world: 1117\n",
"hello world: 1118\n",
"hello world: 1119\n",
"hello world: 1120\n",
"hello world: 1121\n",
"hello world: 1122\n",
"hello world: 1123\n",
"hello world: 1124\n",
"hello world: 1125\n",
"hello world: 1126\n",
"hello world: 1127\n",
"hello world: 1128\n",
"hello world: 1129\n",
"hello world: 1130\n",
"hello world: 1131\n",
"hello world: 1132\n",
"hello world: 1133\n",
"hello world: 1134\n",
"hello world: 1135\n",
"hello world: 1136\n",
"hello world: 1137\n",
"hello world: 1138\n",
"hello world: 1139\n",
"hello world: 1140\n",
"hello world: 1141\n",
"hello world: 1142\n",
"hello world: 1143\n",
"hello world: 1144\n",
"hello world: 1145\n",
"hello world: 1146\n",
"hello world: 1147\n",
"hello world: 1148\n",
"hello world: 1149\n",
"hello world: 1150\n",
"hello world: 1151\n",
"hello world: 1152\n",
"hello world: 1153\n",
"hello world: 1154\n",
"hello world: 1155\n",
"hello world: 1156\n",
"hello world: 1157\n",
"hello world: 1158\n",
"hello world: 1159\n",
"hello world: 1160\n",
"hello world: 1161\n",
"hello world: 1162\n",
"hello world: 1163\n",
"hello world: 1164\n",
"hello world: 1165\n",
"hello world: 1166\n",
"hello world: 1167\n",
"hello world: 1168\n",
"hello world: 1169\n",
"hello world: 1170\n",
"hello world: 1171\n",
"hello world: 1172\n",
"hello world: 1173\n",
"hello world: 1174\n",
"hello world: 1175\n",
"hello world: 1176\n",
"hello world: 1177\n",
"hello world: 1178\n",
"hello world: 1179\n",
"hello world: 1180\n",
"hello world: 1181\n",
"hello world: 1182\n",
"hello world: 1183\n",
"hello world: 1184\n",
"hello world: 1185\n",
"hello world: 1186\n",
"hello world: 1187\n",
"hello world: 1188\n",
"hello world: 1189\n",
"hello world: 1190\n",
"hello world: 1191\n",
"hello world: 1192\n",
"hello world: 1193\n",
"hello world: 1194\n",
"hello world: 1195\n",
"hello world: 1196\n",
"hello world: 1197\n",
"hello world: 1198\n",
"hello world: 1199\n",
"hello world: 1200\n",
"hello world: 1201\n",
"hello world: 1202\n",
"hello world: 1203\n",
"hello world: 1204\n",
"hello world: 1205\n",
"hello world: 1206\n",
"hello world: 1207\n",
"hello world: 1208\n",
"hello world: 1209\n",
"hello world: 1210\n",
"hello world: 1211\n",
"hello world: 1212\n",
"hello world: 1213\n",
"hello world: 1214\n",
"hello world: 1215\n",
"hello world: 1216\n",
"hello world: 1217\n",
"hello world: 1218\n",
"hello world: 1219\n",
"hello world: 1220\n",
"hello world: 1221\n",
"hello world: 1222\n",
"hello world: 1223\n",
"hello world: 1224\n",
"hello world: 1225\n",
"hello world: 1226\n",
"hello world: 1227\n",
"hello world: 1228\n",
"hello world: 1229\n",
"hello world: 1230\n",
"hello world: 1231\n",
"hello world: 1232\n",
"hello world: 1233\n",
"hello world: 1234\n",
"hello world: 1235\n",
"hello world: 1236\n",
"hello world: 1237\n",
"hello world: 1238\n",
"hello world: 1239\n",
"hello world: 1240\n",
"hello world: 1241\n",
"hello world: 1242\n",
"hello world: 1243\n",
"hello world: 1244\n",
"hello world: 1245\n",
"hello world: 1246\n",
"hello world: 1247\n",
"hello world: 1248\n",
"hello world: 1249\n",
"hello world: 1250\n",
"hello world: 1251\n",
"hello world: 1252\n",
"hello world: 1253\n",
"hello world: 1254\n",
"hello world: 1255\n",
"hello world: 1256\n",
"hello world: 1257\n",
"hello world: 1258\n",
"hello world: 1259\n",
"hello world: 1260\n",
"hello world: 1261\n",
"hello world: 1262\n",
"hello world: 1263\n",
"hello world: 1264\n",
"hello world: 1265\n",
"hello world: 1266\n",
"hello world: 1267\n",
"hello world: 1268\n",
"hello world: 1269\n",
"hello world: 1270\n",
"hello world: 1271\n",
"hello world: 1272\n",
"hello world: 1273\n",
"hello world: 1274\n",
"hello world: 1275\n",
"hello world: 1276\n",
"hello world: 1277\n",
"hello world: 1278\n",
"hello world: 1279\n",
"hello world: 1280\n",
"hello world: 1281\n",
"hello world: 1282\n",
"hello world: 1283\n",
"hello world: 1284\n",
"hello world: 1285\n",
"hello world: 1286\n",
"hello world: 1287\n",
"hello world: 1288\n",
"hello world: 1289\n",
"hello world: 1290\n",
"hello world: 1291\n",
"hello world: 1292\n",
"hello world: 1293\n",
"hello world: 1294\n",
"hello world: 1295\n",
"hello world: 1296\n",
"hello world: 1297\n",
"hello world: 1298\n",
"hello world: 1299\n",
"hello world: 1300\n",
"hello world: 1301\n",
"hello world: 1302\n",
"hello world: 1303\n",
"hello world: 1304\n",
"hello world: 1305\n",
"hello world: 1306\n",
"hello world: 1307\n",
"hello world: 1308\n",
"hello world: 1309\n",
"hello world: 1310\n",
"hello world: 1311\n",
"hello world: 1312\n",
"hello world: 1313\n",
"hello world: 1314\n",
"hello world: 1315\n",
"hello world: 1316\n",
"hello world: 1317\n",
"hello world: 1318\n",
"hello world: 1319\n",
"hello world: 1320\n",
"hello world: 1321\n",
"hello world: 1322\n",
"hello world: 1323\n",
"hello world: 1324\n",
"hello world: 1325\n",
"hello world: 1326\n",
"hello world: 1327\n",
"hello world: 1328\n",
"hello world: 1329\n",
"hello world: 1330\n",
"hello world: 1331\n",
"hello world: 1332\n",
"hello world: 1333\n",
"hello world: 1334\n",
"hello world: 1335\n",
"hello world: 1336\n",
"hello world: 1337\n",
"hello world: 1338\n",
"hello world: 1339\n",
"hello world: 1340\n",
"hello world: 1341\n",
"hello world: 1342\n",
"hello world: 1343\n",
"hello world: 1344\n",
"hello world: 1345\n",
"hello world: 1346\n",
"hello world: 1347\n",
"hello world: 1348\n",
"hello world: 1349\n",
"hello world: 1350\n",
"hello world: 1351\n",
"hello world: 1352\n",
"hello world: 1353\n",
"hello world: 1354\n",
"hello world: 1355\n",
"hello world: 1356\n",
"hello world: 1357\n",
"hello world: 1358\n",
"hello world: 1359\n",
"hello world: 1360\n",
"hello world: 1361\n",
"hello world: 1362\n",
"hello world: 1363\n",
"hello world: 1364\n",
"hello world: 1365\n",
"hello world: 1366\n",
"hello world: 1367\n",
"hello world: 1368\n",
"hello world: 1369\n",
"hello world: 1370\n",
"hello world: 1371\n",
"hello world: 1372\n",
"hello world: 1373\n",
"hello world: 1374\n",
"hello world: 1375\n",
"hello world: 1376\n",
"hello world: 1377\n",
"hello world: 1378\n",
"hello world: 1379\n",
"hello world: 1380\n",
"hello world: 1381\n",
"hello world: 1382\n",
"hello world: 1383\n",
"hello world: 1384\n",
"hello world: 1385\n",
"hello world: 1386\n",
"hello world: 1387\n",
"hello world: 1388\n",
"hello world: 1389\n",
"hello world: 1390\n",
"hello world: 1391\n",
"hello world: 1392\n",
"hello world: 1393\n",
"hello world: 1394\n",
"hello world: 1395\n",
"hello world: 1396\n",
"hello world: 1397\n",
"hello world: 1398\n",
"hello world: 1399\n",
"hello world: 1400\n",
"hello world: 1401\n",
"hello world: 1402\n",
"hello world: 1403\n",
"hello world: 1404\n",
"hello world: 1405\n",
"hello world: 1406\n",
"hello world: 1407\n",
"hello world: 1408\n",
"hello world: 1409\n",
"hello world: 1410\n",
"hello world: 1411\n",
"hello world: 1412\n",
"hello world: 1413\n",
"hello world: 1414\n",
"hello world: 1415\n",
"hello world: 1416\n",
"hello world: 1417\n",
"hello world: 1418\n",
"hello world: 1419\n",
"hello world: 1420\n",
"hello world: 1421\n",
"hello world: 1422\n",
"hello world: 1423\n",
"hello world: 1424\n",
"hello world: 1425\n",
"hello world: 1426\n",
"hello world: 1427\n",
"hello world: 1428\n",
"hello world: 1429\n",
"hello world: 1430\n",
"hello world: 1431\n",
"hello world: 1432\n",
"hello world: 1433\n",
"hello world: 1434\n",
"hello world: 1435\n",
"hello world: 1436\n",
"hello world: 1437\n",
"hello world: 1438\n",
"hello world: 1439\n",
"hello world: 1440\n",
"hello world: 1441\n",
"hello world: 1442\n",
"hello world: 1443\n",
"hello world: 1444\n",
"hello world: 1445\n",
"hello world: 1446\n",
"hello world: 1447\n",
"hello world: 1448\n",
"hello world: 1449\n",
"hello world: 1450\n",
"hello world: 1451\n",
"hello world: 1452\n",
"hello world: 1453\n",
"hello world: 1454\n",
"hello world: 1455\n",
"hello world: 1456\n",
"hello world: 1457\n",
"hello world: 1458\n",
"hello world: 1459\n",
"hello world: 1460\n",
"hello world: 1461\n",
"hello world: 1462\n",
"hello world: 1463\n",
"hello world: 1464\n",
"hello world: 1465\n",
"hello world: 1466\n",
"hello world: 1467\n",
"hello world: 1468\n",
"hello world: 1469\n",
"hello world: 1470\n",
"hello world: 1471\n",
"hello world: 1472\n",
"hello world: 1473\n",
"hello world: 1474\n",
"hello world: 1475\n",
"hello world: 1476\n",
"hello world: 1477\n",
"hello world: 1478\n",
"hello world: 1479\n",
"hello world: 1480\n",
"hello world: 1481\n",
"hello world: 1482\n",
"hello world: 1483\n",
"hello world: 1484\n",
"hello world: 1485\n",
"hello world: 1486\n",
"hello world: 1487\n",
"hello world: 1488\n",
"hello world: 1489\n",
"hello world: 1490\n",
"hello world: 1491\n",
"hello world: 1492\n",
"hello world: 1493\n",
"hello world: 1494\n",
"hello world: 1495\n",
"hello world: 1496\n",
"hello world: 1497\n",
"hello world: 1498\n",
"hello world: 1499\n",
"hello world: 1500\n",
"hello world: 1501\n",
"hello world: 1502\n",
"hello world: 1503\n",
"hello world: 1504\n",
"hello world: 1505\n",
"hello world: 1506\n",
"hello world: 1507\n",
"hello world: 1508\n",
"hello world: 1509\n",
"hello world: 1510\n",
"hello world: 1511\n",
"hello world: 1512\n",
"hello world: 1513\n",
"hello world: 1514\n",
"hello world: 1515\n",
"hello world: 1516\n",
"hello world: 1517\n",
"hello world: 1518\n",
"hello world: 1519\n",
"hello world: 1520\n",
"hello world: 1521\n",
"hello world: 1522\n",
"hello world: 1523\n",
"hello world: 1524\n",
"hello world: 1525\n",
"hello world: 1526\n",
"hello world: 1527\n",
"hello world: 1528\n",
"hello world: 1529\n",
"hello world: 1530\n",
"hello world: 1531\n",
"hello world: 1532\n",
"hello world: 1533\n",
"hello world: 1534\n",
"hello world: 1535\n",
"hello world: 1536\n",
"hello world: 1537\n",
"hello world: 1538\n",
"hello world: 1539\n",
"hello world: 1540\n",
"hello world: 1541\n",
"hello world: 1542\n",
"hello world: 1543\n",
"hello world: 1544\n",
"hello world: 1545\n",
"hello world: 1546\n",
"hello world: 1547\n",
"hello world: 1548\n",
"hello world: 1549\n",
"hello world: 1550\n",
"hello world: 1551\n",
"hello world: 1552\n",
"hello world: 1553\n",
"hello world: 1554\n",
"hello world: 1555\n",
"hello world: 1556\n",
"hello world: 1557\n",
"hello world: 1558\n",
"hello world: 1559\n",
"hello world: 1560\n",
"hello world: 1561\n",
"hello world: 1562\n",
"hello world: 1563\n",
"hello world: 1564\n",
"hello world: 1565\n",
"hello world: 1566\n",
"hello world: 1567\n",
"hello world: 1568\n",
"hello world: 1569\n",
"hello world: 1570\n",
"hello world: 1571\n",
"hello world: 1572\n",
"hello world: 1573\n",
"hello world: 1574\n",
"hello world: 1575\n",
"hello world: 1576\n",
"hello world: 1577\n",
"hello world: 1578\n",
"hello world: 1579\n",
"hello world: 1580\n",
"hello world: 1581\n",
"hello world: 1582\n",
"hello world: 1583\n",
"hello world: 1584\n",
"hello world: 1585\n",
"hello world: 1586\n",
"hello world: 1587\n",
"hello world: 1588\n",
"hello world: 1589\n",
"hello world: 1590\n",
"hello world: 1591\n",
"hello world: 1592\n",
"hello world: 1593\n",
"hello world: 1594\n",
"hello world: 1595\n",
"hello world: 1596\n",
"hello world: 1597\n",
"hello world: 1598\n",
"hello world: 1599\n",
"hello world: 1600\n",
"hello world: 1601\n",
"hello world: 1602\n",
"hello world: 1603\n",
"hello world: 1604\n",
"hello world: 1605\n",
"hello world: 1606\n",
"hello world: 1607\n",
"hello world: 1608\n",
"hello world: 1609\n",
"hello world: 1610\n",
"hello world: 1611\n",
"hello world: 1612\n",
"hello world: 1613\n",
"hello world: 1614\n",
"hello world: 1615\n",
"hello world: 1616\n",
"hello world: 1617\n",
"hello world: 1618\n",
"hello world: 1619\n",
"hello world: 1620\n",
"hello world: 1621\n",
"hello world: 1622\n",
"hello world: 1623\n",
"hello world: 1624\n",
"hello world: 1625\n",
"hello world: 1626\n",
"hello world: 1627\n",
"hello world: 1628\n",
"hello world: 1629\n",
"hello world: 1630\n",
"hello world: 1631\n",
"hello world: 1632\n",
"hello world: 1633\n",
"hello world: 1634\n",
"hello world: 1635\n",
"hello world: 1636\n",
"hello world: 1637\n",
"hello world: 1638\n",
"hello world: 1639\n",
"hello world: 1640\n",
"hello world: 1641\n",
"hello world: 1642\n",
"hello world: 1643\n",
"hello world: 1644\n",
"hello world: 1645\n",
"hello world: 1646\n",
"hello world: 1647\n",
"hello world: 1648\n",
"hello world: 1649\n",
"hello world: 1650\n",
"hello world: 1651\n",
"hello world: 1652\n",
"hello world: 1653\n",
"hello world: 1654\n",
"hello world: 1655\n",
"hello world: 1656\n",
"hello world: 1657\n",
"hello world: 1658\n",
"hello world: 1659\n",
"hello world: 1660\n",
"hello world: 1661\n",
"hello world: 1662\n",
"hello world: 1663\n",
"hello world: 1664\n",
"hello world: 1665\n",
"hello world: 1666\n",
"hello world: 1667\n",
"hello world: 1668\n",
"hello world: 1669\n",
"hello world: 1670\n",
"hello world: 1671\n",
"hello world: 1672\n",
"hello world: 1673\n",
"hello world: 1674\n",
"hello world: 1675\n",
"hello world: 1676\n",
"hello world: 1677\n",
"hello world: 1678\n",
"hello world: 1679\n",
"hello world: 1680\n",
"hello world: 1681\n",
"hello world: 1682\n",
"hello world: 1683\n",
"hello world: 1684\n",
"hello world: 1685\n",
"hello world: 1686\n",
"hello world: 1687\n",
"hello world: 1688\n",
"hello world: 1689\n",
"hello world: 1690\n",
"hello world: 1691\n",
"hello world: 1692\n",
"hello world: 1693\n",
"hello world: 1694\n",
"hello world: 1695\n",
"hello world: 1696\n",
"hello world: 1697\n",
"hello world: 1698\n",
"hello world: 1699\n",
"hello world: 1700\n",
"hello world: 1701\n",
"hello world: 1702\n",
"hello world: 1703\n",
"hello world: 1704\n",
"hello world: 1705\n",
"hello world: 1706\n",
"hello world: 1707\n",
"hello world: 1708\n",
"hello world: 1709\n",
"hello world: 1710\n",
"hello world: 1711\n",
"hello world: 1712\n",
"hello world: 1713\n",
"hello world: 1714\n",
"hello world: 1715\n",
"hello world: 1716\n",
"hello world: 1717\n",
"hello world: 1718\n",
"hello world: 1719\n",
"hello world: 1720\n",
"hello world: 1721\n",
"hello world: 1722\n",
"hello world: 1723\n",
"hello world: 1724\n",
"hello world: 1725\n",
"hello world: 1726\n",
"hello world: 1727\n",
"hello world: 1728\n",
"hello world: 1729\n",
"hello world: 1730\n",
"hello world: 1731\n",
"hello world: 1732\n",
"hello world: 1733\n",
"hello world: 1734\n",
"hello world: 1735\n",
"hello world: 1736\n",
"hello world: 1737\n",
"hello world: 1738\n",
"hello world: 1739\n",
"hello world: 1740\n",
"hello world: 1741\n",
"hello world: 1742\n",
"hello world: 1743\n",
"hello world: 1744\n",
"hello world: 1745\n",
"hello world: 1746\n",
"hello world: 1747\n",
"hello world: 1748\n",
"hello world: 1749\n",
"hello world: 1750\n",
"hello world: 1751\n",
"hello world: 1752\n",
"hello world: 1753\n",
"hello world: 1754\n",
"hello world: 1755\n",
"hello world: 1756\n",
"hello world: 1757\n",
"hello world: 1758\n",
"hello world: 1759\n",
"hello world: 1760\n",
"hello world: 1761\n",
"hello world: 1762\n",
"hello world: 1763\n",
"hello world: 1764\n",
"hello world: 1765\n",
"hello world: 1766\n",
"hello world: 1767\n",
"hello world: 1768\n",
"hello world: 1769\n",
"hello world: 1770\n",
"hello world: 1771\n",
"hello world: 1772\n",
"hello world: 1773\n",
"hello world: 1774\n",
"hello world: 1775\n",
"hello world: 1776\n",
"hello world: 1777\n",
"hello world: 1778\n",
"hello world: 1779\n",
"hello world: 1780\n",
"hello world: 1781\n",
"hello world: 1782\n",
"hello world: 1783\n",
"hello world: 1784\n",
"hello world: 1785\n",
"hello world: 1786\n",
"hello world: 1787\n",
"hello world: 1788\n",
"hello world: 1789\n",
"hello world: 1790\n",
"hello world: 1791\n",
"hello world: 1792\n",
"hello world: 1793\n",
"hello world: 1794\n",
"hello world: 1795\n",
"hello world: 1796\n",
"hello world: 1797\n",
"hello world: 1798\n",
"hello world: 1799\n",
"hello world: 1800\n",
"hello world: 1801\n",
"hello world: 1802\n",
"hello world: 1803\n",
"hello world: 1804\n",
"hello world: 1805\n",
"hello world: 1806\n",
"hello world: 1807\n",
"hello world: 1808\n",
"hello world: 1809\n",
"hello world: 1810\n",
"hello world: 1811\n",
"hello world: 1812\n",
"hello world: 1813\n",
"hello world: 1814\n",
"hello world: 1815\n",
"hello world: 1816\n",
"hello world: 1817\n",
"hello world: 1818\n",
"hello world: 1819\n",
"hello world: 1820\n",
"hello world: 1821\n",
"hello world: 1822\n",
"hello world: 1823\n",
"hello world: 1824\n",
"hello world: 1825\n",
"hello world: 1826\n",
"hello world: 1827\n",
"hello world: 1828\n",
"hello world: 1829\n",
"hello world: 1830\n",
"hello world: 1831\n",
"hello world: 1832\n",
"hello world: 1833\n",
"hello world: 1834\n",
"hello world: 1835\n",
"hello world: 1836\n",
"hello world: 1837\n",
"hello world: 1838\n",
"hello world: 1839\n",
"hello world: 1840\n",
"hello world: 1841\n",
"hello world: 1842\n",
"hello world: 1843\n",
"hello world: 1844\n",
"hello world: 1845\n",
"hello world: 1846\n",
"hello world: 1847\n",
"hello world: 1848\n",
"hello world: 1849\n",
"hello world: 1850\n",
"hello world: 1851\n",
"hello world: 1852\n",
"hello world: 1853\n",
"hello world: 1854\n",
"hello world: 1855\n",
"hello world: 1856\n",
"hello world: 1857\n",
"hello world: 1858\n",
"hello world: 1859\n",
"hello world: 1860\n",
"hello world: 1861\n",
"hello world: 1862\n",
"hello world: 1863\n",
"hello world: 1864\n",
"hello world: 1865\n",
"hello world: 1866\n",
"hello world: 1867\n",
"hello world: 1868\n",
"hello world: 1869\n",
"hello world: 1870\n",
"hello world: 1871\n",
"hello world: 1872\n",
"hello world: 1873\n",
"hello world: 1874\n",
"hello world: 1875\n",
"hello world: 1876\n",
"hello world: 1877\n",
"hello world: 1878\n",
"hello world: 1879\n",
"hello world: 1880\n",
"hello world: 1881\n",
"hello world: 1882\n",
"hello world: 1883\n",
"hello world: 1884\n",
"hello world: 1885\n",
"hello world: 1886\n",
"hello world: 1887\n",
"hello world: 1888\n",
"hello world: 1889\n",
"hello world: 1890\n",
"hello world: 1891\n",
"hello world: 1892\n",
"hello world: 1893\n",
"hello world: 1894\n",
"hello world: 1895\n",
"hello world: 1896\n",
"hello world: 1897\n",
"hello world: 1898\n",
"hello world: 1899\n",
"hello world: 1900\n",
"hello world: 1901\n",
"hello world: 1902\n",
"hello world: 1903\n",
"hello world: 1904\n",
"hello world: 1905\n",
"hello world: 1906\n",
"hello world: 1907\n",
"hello world: 1908\n",
"hello world: 1909\n",
"hello world: 1910\n",
"hello world: 1911\n",
"hello world: 1912\n",
"hello world: 1913\n",
"hello world: 1914\n",
"hello world: 1915\n",
"hello world: 1916\n",
"hello world: 1917\n",
"hello world: 1918\n",
"hello world: 1919\n",
"hello world: 1920\n",
"hello world: 1921\n",
"hello world: 1922\n",
"hello world: 1923\n",
"hello world: 1924\n",
"hello world: 1925\n",
"hello world: 1926\n",
"hello world: 1927\n",
"hello world: 1928\n",
"hello world: 1929\n",
"hello world: 1930\n",
"hello world: 1931\n",
"hello world: 1932\n",
"hello world: 1933\n",
"hello world: 1934\n",
"hello world: 1935\n",
"hello world: 1936\n",
"hello world: 1937\n",
"hello world: 1938\n",
"hello world: 1939\n",
"hello world: 1940\n",
"hello world: 1941\n",
"hello world: 1942\n",
"hello world: 1943\n",
"hello world: 1944\n",
"hello world: 1945\n",
"hello world: 1946\n",
"hello world: 1947\n",
"hello world: 1948\n",
"hello world: 1949\n",
"hello world: 1950\n",
"hello world: 1951\n",
"hello world: 1952\n",
"hello world: 1953\n",
"hello world: 1954\n",
"hello world: 1955\n",
"hello world: 1956\n",
"hello world: 1957\n",
"hello world: 1958\n",
"hello world: 1959\n",
"hello world: 1960\n",
"hello world: 1961\n",
"hello world: 1962\n",
"hello world: 1963\n",
"hello world: 1964\n",
"hello world: 1965\n",
"hello world: 1966\n",
"hello world: 1967\n",
"hello world: 1968\n",
"hello world: 1969\n",
"hello world: 1970\n",
"hello world: 1971\n",
"hello world: 1972\n",
"hello world: 1973\n",
"hello world: 1974\n",
"hello world: 1975\n",
"hello world: 1976\n",
"hello world: 1977\n",
"hello world: 1978\n",
"hello world: 1979\n",
"hello world: 1980\n",
"hello world: 1981\n",
"hello world: 1982\n",
"hello world: 1983\n",
"hello world: 1984\n",
"hello world: 1985\n",
"hello world: 1986\n",
"hello world: 1987\n",
"hello world: 1988\n",
"hello world: 1989\n",
"hello world: 1990\n",
"hello world: 1991\n",
"hello world: 1992\n",
"hello world: 1993\n",
"hello world: 1994\n",
"hello world: 1995\n",
"hello world: 1996\n",
"hello world: 1997\n",
"hello world: 1998\n",
"hello world: 1999\n",
"hello world: 2000\n",
"hello world: 2001\n",
"hello world: 2002\n",
"hello world: 2003\n",
"hello world: 2004\n",
"hello world: 2005\n",
"hello world: 2006\n",
"hello world: 2007\n",
"hello world: 2008\n",
"hello world: 2009\n",
"hello world: 2010\n",
"hello world: 2011\n",
"hello world: 2012\n",
"hello world: 2013\n",
"hello world: 2014\n",
"hello world: 2015\n",
"hello world: 2016\n",
"hello world: 2017\n",
"hello world: 2018\n",
"hello world: 2019\n",
"hello world: 2020\n",
"hello world: 2021\n",
"hello world: 2022\n",
"hello world: 2023\n",
"hello world: 2024\n",
"hello world: 2025\n",
"hello world: 2026\n",
"hello world: 2027\n",
"hello world: 2028\n",
"hello world: 2029\n",
"hello world: 2030\n",
"hello world: 2031\n",
"hello world: 2032\n",
"hello world: 2033\n",
"hello world: 2034\n",
"hello world: 2035\n",
"hello world: 2036\n",
"hello world: 2037\n",
"hello world: 2038\n",
"hello world: 2039\n",
"hello world: 2040\n",
"hello world: 2041\n",
"hello world: 2042\n",
"hello world: 2043\n",
"hello world: 2044\n",
"hello world: 2045\n",
"hello world: 2046\n",
"hello world: 2047\n",
"hello world: 2048\n",
"hello world: 2049\n",
"hello world: 2050\n",
"hello world: 2051\n",
"hello world: 2052\n",
"hello world: 2053\n",
"hello world: 2054\n",
"hello world: 2055\n",
"hello world: 2056\n",
"hello world: 2057\n",
"hello world: 2058\n",
"hello world: 2059\n",
"hello world: 2060\n",
"hello world: 2061\n",
"hello world: 2062\n",
"hello world: 2063\n",
"hello world: 2064\n",
"hello world: 2065\n",
"hello world: 2066\n",
"hello world: 2067\n",
"hello world: 2068\n",
"hello world: 2069\n",
"hello world: 2070\n",
"hello world: 2071\n",
"hello world: 2072\n",
"hello world: 2073\n",
"hello world: 2074\n",
"hello world: 2075\n",
"hello world: 2076\n",
"hello world: 2077\n",
"hello world: 2078\n",
"hello world: 2079\n",
"hello world: 2080\n",
"hello world: 2081\n",
"hello world: 2082\n",
"hello world: 2083\n",
"hello world: 2084\n",
"hello world: 2085\n",
"hello world: 2086\n",
"hello world: 2087\n",
"hello world: 2088\n",
"hello world: 2089\n",
"hello world: 2090\n",
"hello world: 2091\n",
"hello world: 2092\n",
"hello world: 2093\n",
"hello world: 2094\n",
"hello world: 2095\n",
"hello world: 2096\n",
"hello world: 2097\n",
"hello world: 2098\n",
"hello world: 2099\n",
"hello world: 2100\n",
"hello world: 2101\n",
"hello world: 2102\n",
"hello world: 2103\n",
"hello world: 2104\n",
"hello world: 2105\n",
"hello world: 2106\n",
"hello world: 2107\n",
"hello world: 2108\n",
"hello world: 2109\n",
"hello world: 2110\n",
"hello world: 2111\n",
"hello world: 2112\n",
"hello world: 2113\n",
"hello world: 2114\n",
"hello world: 2115\n",
"hello world: 2116\n",
"hello world: 2117\n",
"hello world: 2118\n",
"hello world: 2119\n",
"hello world: 2120\n",
"hello world: 2121\n",
"hello world: 2122\n",
"hello world: 2123\n",
"hello world: 2124\n",
"hello world: 2125\n",
"hello world: 2126\n",
"hello world: 2127\n",
"hello world: 2128\n",
"hello world: 2129\n",
"hello world: 2130\n",
"hello world: 2131\n",
"hello world: 2132\n",
"hello world: 2133\n",
"hello world: 2134\n",
"hello world: 2135\n",
"hello world: 2136\n",
"hello world: 2137\n",
"hello world: 2138\n",
"hello world: 2139\n",
"hello world: 2140\n",
"hello world: 2141\n",
"hello world: 2142\n",
"hello world: 2143\n",
"hello world: 2144\n",
"hello world: 2145\n",
"hello world: 2146\n",
"hello world: 2147\n",
"hello world: 2148\n",
"hello world: 2149\n",
"hello world: 2150\n",
"hello world: 2151\n",
"hello world: 2152\n",
"hello world: 2153\n",
"hello world: 2154\n",
"hello world: 2155\n",
"hello world: 2156\n",
"hello world: 2157\n",
"hello world: 2158\n",
"hello world: 2159\n",
"hello world: 2160\n",
"hello world: 2161\n",
"hello world: 2162\n",
"hello world: 2163\n",
"hello world: 2164\n",
"hello world: 2165\n",
"hello world: 2166\n",
"hello world: 2167\n",
"hello world: 2168\n",
"hello world: 2169\n",
"hello world: 2170\n",
"hello world: 2171\n",
"hello world: 2172\n",
"hello world: 2173\n",
"hello world: 2174\n",
"hello world: 2175\n",
"hello world: 2176\n",
"hello world: 2177\n",
"hello world: 2178\n",
"hello world: 2179\n",
"hello world: 2180\n",
"hello world: 2181\n",
"hello world: 2182\n",
"hello world: 2183\n",
"hello world: 2184\n",
"hello world: 2185\n",
"hello world: 2186\n",
"hello world: 2187\n",
"hello world: 2188\n",
"hello world: 2189\n",
"hello world: 2190\n",
"hello world: 2191\n",
"hello world: 2192\n",
"hello world: 2193\n",
"hello world: 2194\n",
"hello world: 2195\n",
"hello world: 2196\n",
"hello world: 2197\n",
"hello world: 2198\n",
"hello world: 2199\n",
"hello world: 2200\n",
"hello world: 2201\n",
"hello world: 2202\n",
"hello world: 2203\n",
"hello world: 2204\n",
"hello world: 2205\n",
"hello world: 2206\n",
"hello world: 2207\n",
"hello world: 2208\n",
"hello world: 2209\n",
"hello world: 2210\n",
"hello world: 2211\n",
"hello world: 2212\n",
"hello world: 2213\n",
"hello world: 2214\n",
"hello world: 2215\n",
"hello world: 2216\n",
"hello world: 2217\n",
"hello world: 2218\n",
"hello world: 2219\n",
"hello world: 2220\n",
"hello world: 2221\n",
"hello world: 2222\n",
"hello world: 2223\n",
"hello world: 2224\n",
"hello world: 2225\n",
"hello world: 2226\n",
"hello world: 2227\n",
"hello world: 2228\n",
"hello world: 2229\n",
"hello world: 2230\n",
"hello world: 2231\n",
"hello world: 2232\n",
"hello world: 2233\n",
"hello world: 2234\n",
"hello world: 2235\n",
"hello world: 2236\n",
"hello world: 2237\n",
"hello world: 2238\n",
"hello world: 2239\n",
"hello world: 2240\n",
"hello world: 2241\n",
"hello world: 2242\n",
"hello world: 2243\n",
"hello world: 2244\n",
"hello world: 2245\n",
"hello world: 2246\n",
"hello world: 2247\n",
"hello world: 2248\n",
"hello world: 2249\n",
"hello world: 2250\n",
"hello world: 2251\n",
"hello world: 2252\n",
"hello world: 2253\n",
"hello world: 2254\n",
"hello world: 2255\n",
"hello world: 2256\n",
"hello world: 2257\n",
"hello world: 2258\n",
"hello world: 2259\n",
"hello world: 2260\n",
"hello world: 2261\n",
"hello world: 2262\n",
"hello world: 2263\n",
"hello world: 2264\n",
"hello world: 2265\n",
"hello world: 2266\n",
"hello world: 2267\n",
"hello world: 2268\n",
"hello world: 2269\n",
"hello world: 2270\n",
"hello world: 2271\n",
"hello world: 2272\n",
"hello world: 2273\n",
"hello world: 2274\n",
"hello world: 2275\n",
"hello world: 2276\n",
"hello world: 2277\n",
"hello world: 2278\n",
"hello world: 2279\n",
"hello world: 2280\n",
"hello world: 2281\n",
"hello world: 2282\n",
"hello world: 2283\n",
"hello world: 2284\n",
"hello world: 2285\n",
"hello world: 2286\n",
"hello world: 2287\n",
"hello world: 2288\n",
"hello world: 2289\n",
"hello world: 2290\n",
"hello world: 2291\n",
"hello world: 2292\n",
"hello world: 2293\n",
"hello world: 2294\n",
"hello world: 2295\n",
"hello world: 2296\n",
"hello world: 2297\n",
"hello world: 2298\n",
"hello world: 2299\n",
"hello world: 2300\n",
"hello world: 2301\n",
"hello world: 2302\n",
"hello world: 2303\n",
"hello world: 2304\n",
"hello world: 2305\n",
"hello world: 2306\n",
"hello world: 2307\n",
"hello world: 2308\n",
"hello world: 2309\n",
"hello world: 2310\n",
"hello world: 2311\n",
"hello world: 2312\n",
"hello world: 2313\n",
"hello world: 2314\n",
"hello world: 2315\n",
"hello world: 2316\n",
"hello world: 2317\n",
"hello world: 2318\n",
"hello world: 2319\n",
"hello world: 2320\n",
"hello world: 2321\n",
"hello world: 2322\n",
"hello world: 2323\n",
"hello world: 2324\n",
"hello world: 2325\n",
"hello world: 2326\n",
"hello world: 2327\n",
"hello world: 2328\n",
"hello world: 2329\n",
"hello world: 2330\n",
"hello world: 2331\n",
"hello world: 2332\n",
"hello world: 2333\n",
"hello world: 2334\n",
"hello world: 2335\n",
"hello world: 2336\n",
"hello world: 2337\n",
"hello world: 2338\n",
"hello world: 2339\n",
"hello world: 2340\n",
"hello world: 2341\n",
"hello world: 2342\n",
"hello world: 2343\n",
"hello world: 2344\n",
"hello world: 2345\n",
"hello world: 2346\n",
"hello world: 2347\n",
"hello world: 2348\n",
"hello world: 2349\n",
"hello world: 2350\n",
"hello world: 2351\n",
"hello world: 2352\n",
"hello world: 2353\n",
"hello world: 2354\n",
"hello world: 2355\n",
"hello world: 2356\n",
"hello world: 2357\n",
"hello world: 2358\n",
"hello world: 2359\n",
"hello world: 2360\n",
"hello world: 2361\n",
"hello world: 2362\n",
"hello world: 2363\n",
"hello world: 2364\n",
"hello world: 2365\n",
"hello world: 2366\n",
"hello world: 2367\n",
"hello world: 2368\n",
"hello world: 2369\n",
"hello world: 2370\n",
"hello world: 2371\n",
"hello world: 2372\n",
"hello world: 2373\n",
"hello world: 2374\n",
"hello world: 2375\n",
"hello world: 2376\n",
"hello world: 2377\n",
"hello world: 2378\n",
"hello world: 2379\n",
"hello world: 2380\n",
"hello world: 2381\n",
"hello world: 2382\n",
"hello world: 2383\n",
"hello world: 2384\n",
"hello world: 2385\n",
"hello world: 2386\n",
"hello world: 2387\n",
"hello world: 2388\n",
"hello world: 2389\n",
"hello world: 2390\n",
"hello world: 2391\n",
"hello world: 2392\n",
"hello world: 2393\n",
"hello world: 2394\n",
"hello world: 2395\n",
"hello world: 2396\n",
"hello world: 2397\n",
"hello world: 2398\n",
"hello world: 2399\n",
"hello world: 2400\n",
"hello world: 2401\n",
"hello world: 2402\n",
"hello world: 2403\n",
"hello world: 2404\n",
"hello world: 2405\n",
"hello world: 2406\n",
"hello world: 2407\n",
"hello world: 2408\n",
"hello world: 2409\n",
"hello world: 2410\n",
"hello world: 2411\n",
"hello world: 2412\n",
"hello world: 2413\n",
"hello world: 2414\n",
"hello world: 2415\n",
"hello world: 2416\n",
"hello world: 2417\n",
"hello world: 2418\n",
"hello world: 2419\n",
"hello world: 2420\n",
"hello world: 2421\n",
"hello world: 2422\n",
"hello world: 2423\n",
"hello world: 2424\n",
"hello world: 2425\n",
"hello world: 2426\n",
"hello world: 2427\n",
"hello world: 2428\n",
"hello world: 2429\n",
"hello world: 2430\n",
"hello world: 2431\n",
"hello world: 2432\n",
"hello world: 2433\n",
"hello world: 2434\n",
"hello world: 2435\n",
"hello world: 2436\n",
"hello world: 2437\n",
"hello world: 2438\n",
"hello world: 2439\n",
"hello world: 2440\n",
"hello world: 2441\n",
"hello world: 2442\n",
"hello world: 2443\n",
"hello world: 2444\n",
"hello world: 2445\n",
"hello world: 2446\n",
"hello world: 2447\n",
"hello world: 2448\n",
"hello world: 2449\n",
"hello world: 2450\n",
"hello world: 2451\n",
"hello world: 2452\n",
"hello world: 2453\n",
"hello world: 2454\n",
"hello world: 2455\n",
"hello world: 2456\n",
"hello world: 2457\n",
"hello world: 2458\n",
"hello world: 2459\n",
"hello world: 2460\n",
"hello world: 2461\n",
"hello world: 2462\n",
"hello world: 2463\n",
"hello world: 2464\n",
"hello world: 2465\n",
"hello world: 2466\n",
"hello world: 2467\n",
"hello world: 2468\n",
"hello world: 2469\n",
"hello world: 2470\n",
"hello world: 2471\n",
"hello world: 2472\n",
"hello world: 2473\n",
"hello world: 2474\n",
"hello world: 2475\n",
"hello world: 2476\n",
"hello world: 2477\n",
"hello world: 2478\n",
"hello world: 2479\n",
"hello world: 2480\n",
"hello world: 2481\n",
"hello world: 2482\n",
"hello world: 2483\n",
"hello world: 2484\n",
"hello world: 2485\n",
"hello world: 2486\n",
"hello world: 2487\n",
"hello world: 2488\n",
"hello world: 2489\n",
"hello world: 2490\n",
"hello world: 2491\n",
"hello world: 2492\n",
"hello world: 2493\n",
"hello world: 2494\n",
"hello world: 2495\n",
"hello world: 2496\n",
"hello world: 2497\n",
"hello world: 2498\n",
"hello world: 2499\n",
"hello world: 2500\n",
"hello world: 2501\n",
"hello world: 2502\n",
"hello world: 2503\n",
"hello world: 2504\n",
"hello world: 2505\n",
"hello world: 2506\n",
"hello world: 2507\n",
"hello world: 2508\n",
"hello world: 2509\n",
"hello world: 2510\n",
"hello world: 2511\n",
"hello world: 2512\n",
"hello world: 2513\n",
"hello world: 2514\n",
"hello world: 2515\n",
"hello world: 2516\n",
"hello world: 2517\n",
"hello world: 2518\n",
"hello world: 2519\n",
"hello world: 2520\n",
"hello world: 2521\n",
"hello world: 2522\n",
"hello world: 2523\n",
"hello world: 2524\n",
"hello world: 2525\n",
"hello world: 2526\n",
"hello world: 2527\n",
"hello world: 2528\n",
"hello world: 2529\n",
"hello world: 2530\n",
"hello world: 2531\n",
"hello world: 2532\n",
"hello world: 2533\n",
"hello world: 2534\n",
"hello world: 2535\n",
"hello world: 2536\n",
"hello world: 2537\n",
"hello world: 2538\n",
"hello world: 2539\n",
"hello world: 2540\n",
"hello world: 2541\n",
"hello world: 2542\n",
"hello world: 2543\n",
"hello world: 2544\n",
"hello world: 2545\n",
"hello world: 2546\n",
"hello world: 2547\n",
"hello world: 2548\n",
"hello world: 2549\n",
"hello world: 2550\n",
"hello world: 2551\n",
"hello world: 2552\n",
"hello world: 2553\n",
"hello world: 2554\n",
"hello world: 2555\n",
"hello world: 2556\n",
"hello world: 2557\n",
"hello world: 2558\n",
"hello world: 2559\n",
"hello world: 2560\n",
"hello world: 2561\n",
"hello world: 2562\n",
"hello world: 2563\n",
"hello world: 2564\n",
"hello world: 2565\n",
"hello world: 2566\n",
"hello world: 2567\n",
"hello world: 2568\n",
"hello world: 2569\n",
"hello world: 2570\n",
"hello world: 2571\n",
"hello world: 2572\n",
"hello world: 2573\n",
"hello world: 2574\n",
"hello world: 2575\n",
"hello world: 2576\n",
"hello world: 2577\n",
"hello world: 2578\n",
"hello world: 2579\n",
"hello world: 2580\n",
"hello world: 2581\n",
"hello world: 2582\n",
"hello world: 2583\n",
"hello world: 2584\n",
"hello world: 2585\n",
"hello world: 2586\n",
"hello world: 2587\n",
"hello world: 2588\n",
"hello world: 2589\n",
"hello world: 2590\n",
"hello world: 2591\n",
"hello world: 2592\n",
"hello world: 2593\n",
"hello world: 2594\n",
"hello world: 2595\n",
"hello world: 2596\n",
"hello world: 2597\n",
"hello world: 2598\n",
"hello world: 2599\n",
"hello world: 2600\n",
"hello world: 2601\n",
"hello world: 2602\n",
"hello world: 2603\n",
"hello world: 2604\n",
"hello world: 2605\n",
"hello world: 2606\n",
"hello world: 2607\n",
"hello world: 2608\n",
"hello world: 2609\n",
"hello world: 2610\n",
"hello world: 2611\n",
"hello world: 2612\n",
"hello world: 2613\n",
"hello world: 2614\n",
"hello world: 2615\n",
"hello world: 2616\n",
"hello world: 2617\n",
"hello world: 2618\n",
"hello world: 2619\n",
"hello world: 2620\n",
"hello world: 2621\n",
"hello world: 2622\n",
"hello world: 2623\n",
"hello world: 2624\n",
"hello world: 2625\n",
"hello world: 2626\n",
"hello world: 2627\n",
"hello world: 2628\n",
"hello world: 2629\n",
"hello world: 2630\n",
"hello world: 2631\n",
"hello world: 2632\n",
"hello world: 2633\n",
"hello world: 2634\n",
"hello world: 2635\n",
"hello world: 2636\n",
"hello world: 2637\n",
"hello world: 2638\n",
"hello world: 2639\n",
"hello world: 2640\n",
"hello world: 2641\n",
"hello world: 2642\n",
"hello world: 2643\n",
"hello world: 2644\n",
"hello world: 2645\n",
"hello world: 2646\n",
"hello world: 2647\n",
"hello world: 2648\n",
"hello world: 2649\n",
"hello world: 2650\n",
"hello world: 2651\n",
"hello world: 2652\n",
"hello world: 2653\n",
"hello world: 2654\n",
"hello world: 2655\n",
"hello world: 2656\n",
"hello world: 2657\n",
"hello world: 2658\n",
"hello world: 2659\n",
"hello world: 2660\n",
"hello world: 2661\n",
"hello world: 2662\n",
"hello world: 2663\n",
"hello world: 2664\n",
"hello world: 2665\n",
"hello world: 2666\n",
"hello world: 2667\n",
"hello world: 2668\n",
"hello world: 2669\n",
"hello world: 2670\n",
"hello world: 2671\n",
"hello world: 2672\n",
"hello world: 2673\n",
"hello world: 2674\n",
"hello world: 2675\n",
"hello world: 2676\n",
"hello world: 2677\n",
"hello world: 2678\n",
"hello world: 2679\n",
"hello world: 2680\n",
"hello world: 2681\n",
"hello world: 2682\n",
"hello world: 2683\n",
"hello world: 2684\n",
"hello world: 2685\n",
"hello world: 2686\n",
"hello world: 2687\n",
"hello world: 2688\n",
"hello world: 2689\n",
"hello world: 2690\n",
"hello world: 2691\n",
"hello world: 2692\n",
"hello world: 2693\n",
"hello world: 2694\n",
"hello world: 2695\n",
"hello world: 2696\n",
"hello world: 2697\n",
"hello world: 2698\n",
"hello world: 2699\n",
"hello world: 2700\n",
"hello world: 2701\n",
"hello world: 2702\n",
"hello world: 2703\n",
"hello world: 2704\n",
"hello world: 2705\n",
"hello world: 2706\n",
"hello world: 2707\n",
"hello world: 2708\n",
"hello world: 2709\n",
"hello world: 2710\n",
"hello world: 2711\n",
"hello world: 2712\n",
"hello world: 2713\n",
"hello world: 2714\n",
"hello world: 2715\n",
"hello world: 2716\n",
"hello world: 2717\n",
"hello world: 2718\n",
"hello world: 2719\n",
"hello world: 2720\n",
"hello world: 2721\n",
"hello world: 2722\n",
"hello world: 2723\n",
"hello world: 2724\n",
"hello world: 2725\n",
"hello world: 2726\n",
"hello world: 2727\n",
"hello world: 2728\n",
"hello world: 2729\n",
"hello world: 2730\n",
"hello world: 2731\n",
"hello world: 2732\n",
"hello world: 2733\n",
"hello world: 2734\n",
"hello world: 2735\n",
"hello world: 2736\n",
"hello world: 2737\n",
"hello world: 2738\n",
"hello world: 2739\n",
"hello world: 2740\n",
"hello world: 2741\n",
"hello world: 2742\n",
"hello world: 2743\n",
"hello world: 2744\n",
"hello world: 2745\n",
"hello world: 2746\n",
"hello world: 2747\n",
"hello world: 2748\n",
"hello world: 2749\n",
"hello world: 2750\n",
"hello world: 2751\n",
"hello world: 2752\n",
"hello world: 2753\n",
"hello world: 2754\n",
"hello world: 2755\n",
"hello world: 2756\n",
"hello world: 2757\n",
"hello world: 2758\n",
"hello world: 2759\n",
"hello world: 2760\n",
"hello world: 2761\n",
"hello world: 2762\n",
"hello world: 2763\n",
"hello world: 2764\n",
"hello world: 2765\n",
"hello world: 2766\n",
"hello world: 2767\n",
"hello world: 2768\n",
"hello world: 2769\n",
"hello world: 2770\n",
"hello world: 2771\n",
"hello world: 2772\n",
"hello world: 2773\n",
"hello world: 2774\n",
"hello world: 2775\n",
"hello world: 2776\n",
"hello world: 2777\n",
"hello world: 2778\n",
"hello world: 2779\n",
"hello world: 2780\n",
"hello world: 2781\n",
"hello world: 2782\n",
"hello world: 2783\n",
"hello world: 2784\n",
"hello world: 2785\n",
"hello world: 2786\n",
"hello world: 2787\n",
"hello world: 2788\n",
"hello world: 2789\n",
"hello world: 2790\n",
"hello world: 2791\n",
"hello \n"
]
}
],
"source": [
"f = open('newfile.txt','w')\n",
"for i in range(3000):\n",
" f.write('hello world: ' + str(i) + '\\n')\n",
"\n",
"g = open('newfile.txt', 'r')\n",
"print g.read()\n",
"f.close()\n",
"g.close()"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import os\n",
"os.remove('newfile.txt')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"出现异常时候的读写:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "ZeroDivisionError",
"evalue": "float division by zero",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'newfile.txt'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'w'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m3000\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m1.0\u001b[0m \u001b[1;33m/\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mi\u001b[0m \u001b[1;33m-\u001b[0m \u001b[1;36m1000\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'hello world: '\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mstr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;34m'\\n'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mZeroDivisionError\u001b[0m: float division by zero"
]
}
],
"source": [
"f = open('newfile.txt','w')\n",
"for i in range(3000):\n",
" x = 1.0 / (i - 1000)\n",
" f.write('hello world: ' + str(i) + '\\n')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看已有内容:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello world: 0\n",
"hello world: 1\n",
"hello world: 2\n",
"hello world: 3\n",
"hello world: 4\n",
"hello world: 5\n",
"hello world: 6\n",
"hello world: 7\n",
"hello world: 8\n",
"hello world: 9\n",
"hello world: 10\n",
"hello world: 11\n",
"hello world: 12\n",
"hello world: 13\n",
"hello world: 14\n",
"hello world: 15\n",
"hello world: 16\n",
"hello world: 17\n",
"hello world: 18\n",
"hello world: 19\n",
"hello world: 20\n",
"hello world: 21\n",
"hello world: 22\n",
"hello world: 23\n",
"hello world: 24\n",
"hello world: 25\n",
"hello world: 26\n",
"hello world: 27\n",
"hello world: 28\n",
"hello world: 29\n",
"hello world: 30\n",
"hello world: 31\n",
"hello world: 32\n",
"hello world: 33\n",
"hello world: 34\n",
"hello world: 35\n",
"hello world: 36\n",
"hello world: 37\n",
"hello world: 38\n",
"hello world: 39\n",
"hello world: 40\n",
"hello world: 41\n",
"hello world: 42\n",
"hello world: 43\n",
"hello world: 44\n",
"hello world: 45\n",
"hello world: 46\n",
"hello world: 47\n",
"hello world: 48\n",
"hello world: 49\n",
"hello world: 50\n",
"hello world: 51\n",
"hello world: 52\n",
"hello world: 53\n",
"hello world: 54\n",
"hello world: 55\n",
"hello world: 56\n",
"hello world: 57\n",
"hello world: 58\n",
"hello world: 59\n",
"hello world: 60\n",
"hello world: 61\n",
"hello world: 62\n",
"hello world: 63\n",
"hello world: 64\n",
"hello world: 65\n",
"hello world: 66\n",
"hello world: 67\n",
"hello world: 68\n",
"hello world: 69\n",
"hello world: 70\n",
"hello world: 71\n",
"hello world: 72\n",
"hello world: 73\n",
"hello world: 74\n",
"hello world: 75\n",
"hello world: 76\n",
"hello world: 77\n",
"hello world: 78\n",
"hello world: 79\n",
"hello world: 80\n",
"hello world: 81\n",
"hello world: 82\n",
"hello world: 83\n",
"hello world: 84\n",
"hello world: 85\n",
"hello world: 86\n",
"hello world: 87\n",
"hello world: 88\n",
"hello world: 89\n",
"hello world: 90\n",
"hello world: 91\n",
"hello world: 92\n",
"hello world: 93\n",
"hello world: 94\n",
"hello world: 95\n",
"hello world: 96\n",
"hello world: 97\n",
"hello world: 98\n",
"hello world: 99\n",
"hello world: 100\n",
"hello world: 101\n",
"hello world: 102\n",
"hello world: 103\n",
"hello world: 104\n",
"hello world: 105\n",
"hello world: 106\n",
"hello world: 107\n",
"hello world: 108\n",
"hello world: 109\n",
"hello world: 110\n",
"hello world: 111\n",
"hello world: 112\n",
"hello world: 113\n",
"hello world: 114\n",
"hello world: 115\n",
"hello world: 116\n",
"hello world: 117\n",
"hello world: 118\n",
"hello world: 119\n",
"hello world: 120\n",
"hello world: 121\n",
"hello world: 122\n",
"hello world: 123\n",
"hello world: 124\n",
"hello world: 125\n",
"hello world: 126\n",
"hello world: 127\n",
"hello world: 128\n",
"hello world: 129\n",
"hello world: 130\n",
"hello world: 131\n",
"hello world: 132\n",
"hello world: 133\n",
"hello world: 134\n",
"hello world: 135\n",
"hello world: 136\n",
"hello world: 137\n",
"hello world: 138\n",
"hello world: 139\n",
"hello world: 140\n",
"hello world: 141\n",
"hello world: 142\n",
"hello world: 143\n",
"hello world: 144\n",
"hello world: 145\n",
"hello world: 146\n",
"hello world: 147\n",
"hello world: 148\n",
"hello world: 149\n",
"hello world: 150\n",
"hello world: 151\n",
"hello world: 152\n",
"hello world: 153\n",
"hello world: 154\n",
"hello world: 155\n",
"hello world: 156\n",
"hello world: 157\n",
"hello world: 158\n",
"hello world: 159\n",
"hello world: 160\n",
"hello world: 161\n",
"hello world: 162\n",
"hello world: 163\n",
"hello world: 164\n",
"hello world: 165\n",
"hello world: 166\n",
"hello world: 167\n",
"hello world: 168\n",
"hello world: 169\n",
"hello world: 170\n",
"hello world: 171\n",
"hello world: 172\n",
"hello world: 173\n",
"hello world: 174\n",
"hello world: 175\n",
"hello world: 176\n",
"hello world: 177\n",
"hello world: 178\n",
"hello world: 179\n",
"hello world: 180\n",
"hello world: 181\n",
"hello world: 182\n",
"hello world: 183\n",
"hello world: 184\n",
"hello world: 185\n",
"hello world: 186\n",
"hello world: 187\n",
"hello world: 188\n",
"hello world: 189\n",
"hello world: 190\n",
"hello world: 191\n",
"hello world: 192\n",
"hello world: 193\n",
"hello world: 194\n",
"hello world: 195\n",
"hello world: 196\n",
"hello world: 197\n",
"hello world: 198\n",
"hello world: 199\n",
"hello world: 200\n",
"hello world: 201\n",
"hello world: 202\n",
"hello world: 203\n",
"hello world: 204\n",
"hello world: 205\n",
"hello world: 206\n",
"hello world: 207\n",
"hello world: 208\n",
"hello world: 209\n",
"hello world: 210\n",
"hello world: 211\n",
"hello world: 212\n",
"hello world: 213\n",
"hello world: 214\n",
"hello world: 215\n",
"hello world: 216\n",
"hello world: 217\n",
"hello world: 218\n",
"hello world: 219\n",
"hello world: 220\n",
"hello world: 221\n",
"hello world: 222\n",
"hello world: 223\n",
"hello world: 224\n",
"hello world: 225\n",
"hello world: 226\n",
"hello world: 227\n",
"hello world: 228\n",
"hello world: 229\n",
"hello world: 230\n",
"hello world: 231\n",
"hello world: 232\n",
"hello world: 233\n",
"hello world: 234\n",
"hello world: 235\n",
"hello world: 236\n",
"hello world: 237\n",
"hello world: 238\n",
"hello world: 239\n",
"hello world: 240\n",
"hello world: 241\n",
"hello world: 242\n",
"hello world: 243\n",
"hello world: 244\n",
"hello world: 245\n",
"hello world: 246\n",
"hello world: 247\n",
"hello world: 248\n",
"hello world: 249\n",
"hello world: 250\n",
"hello world: 251\n",
"hello world: 252\n",
"hello world: 253\n",
"hello world: 254\n",
"hello world: 255\n",
"hello world: 256\n",
"hello world: 257\n",
"hello world: 258\n",
"hello world: 259\n",
"hello world: 260\n",
"hello world: 261\n",
"hello world: 262\n",
"hello world: 263\n",
"hello world: 264\n",
"hello world: 265\n",
"hello world: 266\n",
"hello world: 267\n",
"hello world: 268\n",
"hello world: 269\n",
"hello world: 270\n",
"hello world: 271\n",
"hello world: 272\n",
"hello world: 273\n",
"hello world: 274\n",
"hello world: 275\n",
"hello world: 276\n",
"hello world: 277\n",
"hello world: 278\n",
"hello world: 279\n",
"hello world: 280\n",
"hello world: 281\n",
"hello world: 282\n",
"hello world: 283\n",
"hello world: 284\n",
"hello world: 285\n",
"hello world: 286\n",
"hello world: 287\n",
"hello world: 288\n",
"hello world: 289\n",
"hello world: 290\n",
"hello world: 291\n",
"hello world: 292\n",
"hello world: 293\n",
"hello world: 294\n",
"hello world: 295\n",
"hello world: 296\n",
"hello world: 297\n",
"hello world: 298\n",
"hello world: 299\n",
"hello world: 300\n",
"hello world: 301\n",
"hello world: 302\n",
"hello world: 303\n",
"hello world: 304\n",
"hello world: 305\n",
"hello world: 306\n",
"hello world: 307\n",
"hello world: 308\n",
"hello world: 309\n",
"hello world: 310\n",
"hello world: 311\n",
"hello world: 312\n",
"hello world: 313\n",
"hello world: 314\n",
"hello world: 315\n",
"hello world: 316\n",
"hello world: 317\n",
"hello world: 318\n",
"hello world: 319\n",
"hello world: 320\n",
"hello world: 321\n",
"hello world: 322\n",
"hello world: 323\n",
"hello world: 324\n",
"hello world: 325\n",
"hello world: 326\n",
"hello world: 327\n",
"hello world: 328\n",
"hello world: 329\n",
"hello world: 330\n",
"hello world: 331\n",
"hello world: 332\n",
"hello world: 333\n",
"hello world: 334\n",
"hello world: 335\n",
"hello world: 336\n",
"hello world: 337\n",
"hello world: 338\n",
"hello world: 339\n",
"hello world: 340\n",
"hello world: 341\n",
"hello world: 342\n",
"hello world: 343\n",
"hello world: 344\n",
"hello world: 345\n",
"hello world: 346\n",
"hello world: 347\n",
"hello world: 348\n",
"hello world: 349\n",
"hello world: 350\n",
"hello world: 351\n",
"hello world: 352\n",
"hello world: 353\n",
"hello world: 354\n",
"hello world: 355\n",
"hello world: 356\n",
"hello world: 357\n",
"hello world: 358\n",
"hello world: 359\n",
"hello world: 360\n",
"hello world: 361\n",
"hello world: 362\n",
"hello world: 363\n",
"hello world: 364\n",
"hello world: 365\n",
"hello world: 366\n",
"hello world: 367\n",
"hello world: 368\n",
"hello world: 369\n",
"hello world: 370\n",
"hello world: 371\n",
"hello world: 372\n",
"hello world: 373\n",
"hello world: 374\n",
"hello world: 375\n",
"hello world: 376\n",
"hello world: 377\n",
"hello world: 378\n",
"hello world: 379\n",
"hello world: 380\n",
"hello world: 381\n",
"hello world: 382\n",
"hello world: 383\n",
"hello world: 384\n",
"hello world: 385\n",
"hello world: 386\n",
"hello world: 387\n",
"hello world: 388\n",
"hello world: 389\n",
"hello world: 390\n",
"hello world: 391\n",
"hello world: 392\n",
"hello world: 393\n",
"hello world: 394\n",
"hello world: 395\n",
"hello world: 396\n",
"hello world: 397\n",
"hello world: 398\n",
"hello world: 399\n",
"hello world: 400\n",
"hello world: 401\n",
"hello world: 402\n",
"hello world: 403\n",
"hello world: 404\n",
"hello world: 405\n",
"hello world: 406\n",
"hello world: 407\n",
"hello world: 408\n",
"hello world: 409\n",
"hello world: 410\n",
"hello world: 411\n",
"hello world: 412\n",
"hello world: 413\n",
"hello world: 414\n",
"hello world: 415\n",
"hello world: 416\n",
"hello world: 417\n",
"hello world: 418\n",
"hello world: 419\n",
"hello world: 420\n",
"hello world: 421\n",
"hello world: 422\n",
"hello world: 423\n",
"hello world: 424\n",
"hello world: 425\n",
"hello world: 426\n",
"hello world: 427\n",
"hello world: 428\n",
"hello world: 429\n",
"hello world: 430\n",
"hello world: 431\n",
"hello world: 432\n",
"hello world: 433\n",
"hello world: 434\n",
"hello world: 435\n",
"hello world: 436\n",
"hello world: 437\n",
"hello world: 438\n",
"hello world: 439\n",
"hello world: 440\n",
"hello world: 441\n",
"hello world: 442\n",
"hello world: 443\n",
"hello world: 444\n",
"hello world: 445\n",
"hello world: 446\n",
"hello world: 447\n",
"hello world: 448\n",
"hello world: 449\n",
"hello world: 450\n",
"hello world: 451\n",
"hello world: 452\n",
"hello world: 453\n",
"hello world: 454\n",
"hello world: 455\n",
"hello world: 456\n",
"hello world: 457\n",
"hello world: 458\n",
"hello world: 459\n",
"hello world: 460\n",
"hello world: 461\n",
"hello world: 462\n",
"hello world: 463\n",
"hello world: 464\n",
"hello world: 465\n",
"hello world: 466\n",
"hello world: 467\n",
"hello world: 468\n",
"hello world: 469\n",
"hello world: 470\n",
"hello world: 471\n",
"hello world: 472\n",
"hello world: 473\n",
"hello world: 474\n",
"hello world: 475\n",
"hello world: 476\n",
"hello world: 477\n",
"hello world: 478\n",
"hello world: 479\n",
"hello world: 480\n",
"hello world: 481\n",
"hello world: 482\n",
"hello world: 483\n",
"hello world: 484\n",
"hello world: 485\n",
"hello world: 486\n",
"hello world: 487\n",
"hello world: 488\n",
"hello world: 489\n",
"hello world: 490\n",
"hello world: 491\n",
"hello world: 492\n",
"hello world: 493\n",
"hello world: 494\n",
"hello world: 495\n",
"hello world: 496\n",
"hello world: 497\n",
"hello world: 498\n",
"hello world: 499\n",
"hello world: 500\n",
"hello world: 501\n",
"hello world: 502\n",
"hello world: 503\n",
"hello world: 504\n",
"hello world: 505\n",
"hello world: 506\n",
"hello world: 507\n",
"hello world: 508\n",
"hello world: 509\n",
"hello world: 510\n",
"hello world: 511\n",
"hello world: 512\n",
"hello world: 513\n",
"hello world: 514\n",
"hello world: 515\n",
"hello world: 516\n",
"hello world: 517\n",
"hello world: 518\n",
"hello world: 519\n",
"hello world: 520\n",
"hello world: 521\n",
"hello world: 522\n",
"hello world: 523\n",
"hello world: 524\n",
"hello world: 525\n",
"hello world: 526\n",
"hello world: 527\n",
"hello world: 528\n",
"hello world: 529\n",
"hello world: 530\n",
"hello world: 531\n",
"hello world: 532\n",
"hello world: 533\n",
"hello world: 534\n",
"hello world: 535\n",
"hello world: 536\n",
"hello world: 537\n",
"hello world: 538\n",
"hello world: 539\n",
"hello world: 540\n",
"hello world: 541\n",
"hello world: 542\n",
"hello world: 543\n",
"hello world: 544\n",
"hello world: 545\n",
"hello world: 546\n",
"hello world: 547\n",
"hello world: 548\n",
"hello world: 549\n",
"hello world: 550\n",
"hello world: 551\n",
"hello world: 552\n",
"hello world: 553\n",
"hello world: 554\n",
"hello world: 555\n",
"hello world: 556\n",
"hello world: 557\n",
"hello world: 558\n",
"hello world: 559\n",
"hello world: 560\n",
"hello world: 561\n",
"hello world: 562\n",
"hello world: 563\n",
"hello world: 564\n",
"hello world: 565\n",
"hello world: 566\n",
"hello world: 567\n",
"hello world: 568\n",
"hello world: 569\n",
"hello world: 570\n",
"hello world: 571\n",
"hello world: 572\n",
"hello world: 573\n",
"hello world: 574\n",
"hello world: 575\n",
"hello world: 576\n",
"hello world: 577\n",
"hello world: 578\n",
"hello world: 579\n",
"hello world: 580\n",
"hello world: 581\n",
"hello world: 582\n",
"hello world: 583\n",
"hello world: 584\n",
"hello world: 585\n",
"hello world: 586\n",
"hello world: 587\n",
"hello world: 588\n",
"hello world: 589\n",
"hello world: 590\n",
"hello world: 591\n",
"hello world: 592\n",
"hello world: 593\n",
"hello world: 594\n",
"hello world: 595\n",
"hello world: 596\n",
"hello world: 597\n",
"hello world: 598\n",
"hello world: 599\n",
"hello world: 600\n",
"hello world: 601\n",
"hello world: 602\n",
"hello world: 603\n",
"hello world: 604\n",
"hello world: 605\n",
"hello world: 606\n",
"hello world: 607\n",
"hello world: 608\n",
"hello world: 609\n",
"hello world: 610\n",
"hello world: 611\n",
"hello world: 612\n",
"hello world: 613\n",
"hello world: 614\n",
"hello world: 615\n",
"hello world: 616\n",
"hello world: 617\n",
"hello world: 618\n",
"hello world: 619\n",
"hello world: 620\n",
"hello world: 621\n",
"hello world: 622\n",
"hello world: 623\n",
"hello world: 624\n",
"hello world: 625\n",
"hello world: 626\n",
"hello world: 627\n",
"hello world: 628\n",
"hello world: 629\n",
"hello world: 630\n",
"hello world: 631\n",
"hello world: 632\n",
"hello world: 633\n",
"hello world: 634\n",
"hello world: 635\n",
"hello world: 636\n",
"hello world: 637\n",
"hello world: 638\n",
"hello world: 639\n",
"hello world: 640\n",
"hello world: 641\n",
"hello world: 642\n",
"hello world: 643\n",
"hello world: 644\n",
"hello world: 645\n",
"hello world: 646\n",
"hello world: 647\n",
"hello world: 648\n",
"hello world: 649\n",
"hello world: 650\n",
"hello world: 651\n",
"hello world: 652\n",
"hello world: 653\n",
"hello world: 654\n",
"hello world: 655\n",
"hello world: 656\n",
"hello world: 657\n",
"hello world: 658\n",
"hello world: 659\n",
"hello world: 660\n",
"hello world: 661\n",
"hello world: 662\n",
"hello world: 663\n",
"hello world: 664\n",
"hello world: 665\n",
"hello world: 666\n",
"hello world: 667\n",
"hello world: 668\n",
"hello world: 669\n",
"hello world: 670\n",
"hello world: 671\n",
"hello world: 672\n",
"hello world: 673\n",
"hello world: 674\n",
"hello world: 675\n",
"hello world: 676\n",
"hello world: 677\n",
"hello world: 678\n",
"hello world: 679\n",
"hello world: 680\n",
"hello world: 681\n",
"hello world: 682\n",
"hello world: 683\n",
"hello world: 684\n",
"hello world: 685\n",
"hello world: 686\n",
"hello world: 687\n",
"hello world: 688\n",
"hello world: 689\n",
"hello world: 690\n",
"hello world: 691\n",
"hello world: 692\n",
"hello world: 693\n",
"hello world: 694\n",
"hello world: 695\n",
"hello world: 696\n",
"hello world: 697\n",
"hello world: 698\n",
"hello world: 699\n",
"hello world: 700\n",
"hello world: 701\n",
"hello world: 702\n",
"hello world: 703\n",
"hello world: 704\n",
"hello world: 705\n",
"hello world: 706\n",
"hello world: 707\n",
"hello world: 708\n",
"hello world: 709\n",
"hello world: 710\n",
"hello world: 711\n",
"hello world: 712\n",
"hello world: 713\n",
"hello world: 714\n",
"hello world: 715\n",
"hello world: 716\n",
"hello world: 717\n",
"hello world: 718\n",
"hello world: 719\n",
"hello world: 720\n",
"hello world: 721\n",
"hello world: 722\n",
"hello world: 723\n",
"hello world: 724\n",
"hello world: 725\n",
"hello world: 726\n",
"hello world: 727\n",
"hello world: 728\n",
"hello world: 729\n",
"hello world: 730\n",
"hello world: 731\n",
"hello world: 732\n",
"hello world: 733\n",
"hello world: 734\n",
"hello world: 735\n",
"hello world: 736\n",
"hello world: 737\n",
"hello world: 738\n",
"hello world: 739\n",
"hello world: 740\n",
"hello world: 741\n",
"hello world: 742\n",
"hello world: 743\n",
"hello world: 744\n",
"hello world: 745\n",
"hello world: 746\n",
"hello world: 747\n",
"hello world: 748\n",
"hello world: 749\n",
"hello world: 750\n",
"hello world: 751\n",
"hello world: 752\n",
"hello world: 753\n",
"hello world: 754\n",
"hello world: 755\n",
"hello world: 756\n",
"hello world: 757\n",
"hello world: 758\n",
"hello world: 759\n",
"hello world: 760\n",
"hello world: 761\n",
"hello world: 762\n",
"hello world: 763\n",
"hello world: 764\n",
"hello world: 765\n",
"hello world: 766\n",
"hello world: 767\n",
"hello world: 768\n",
"hello world: 769\n",
"hello world: 770\n",
"hello world: 771\n",
"hello world: 772\n",
"hello world: 773\n",
"hello world: 774\n",
"hello world: 775\n",
"hello world: 776\n",
"hello world: 777\n",
"hello world: 778\n",
"hello world: 779\n",
"hello world: 780\n",
"hello world: 781\n",
"hello world: 782\n",
"hello world: 783\n",
"hello world: 784\n",
"hello world: 785\n",
"hello world: 786\n",
"hello world: 787\n",
"hello world: 788\n",
"hello world: 789\n",
"hello world: 790\n",
"hello world: 791\n",
"hello world: 792\n",
"hello world: 793\n",
"hello world: 794\n",
"hello world: 795\n",
"hello world: 796\n",
"hello world: 797\n",
"hello world: 798\n",
"hello world: 799\n",
"hello world: 800\n",
"hello world: 801\n",
"hello world: 802\n",
"hello world: 803\n",
"hello world: 804\n",
"hello world: 805\n",
"hello world: 806\n",
"hello world: 807\n",
"hello world: 808\n",
"hello world: 809\n",
"hello world: 810\n",
"hello world: 811\n",
"hello world: 812\n",
"hello world: 813\n",
"hello world: 814\n",
"hello world: 815\n",
"hello world: 816\n",
"hello world: 817\n",
"hello world: 818\n",
"hello world: 819\n",
"hello world: 820\n",
"hello world: 821\n",
"hello world: 822\n",
"hello world: 823\n",
"hello world: 824\n",
"hello world: 825\n",
"hello world: 826\n",
"hello world: 827\n",
"hello world: 828\n",
"hello world: 829\n",
"hello world: 830\n",
"hello world: 831\n",
"hello world: 832\n",
"hello world: 833\n",
"hello world: 834\n",
"hello world: 835\n",
"hello world: 836\n",
"hello world: 837\n",
"hello world: 838\n",
"hello world: 839\n",
"hello world: 840\n",
"hello world: 841\n",
"hello world: 842\n",
"hello world: 843\n",
"hello world: 844\n",
"hello world: 845\n",
"hello world: 846\n",
"hello world: 847\n",
"hello world: 848\n",
"hello world: 849\n",
"hello world: 850\n",
"hello world: 851\n",
"hello world: 852\n",
"hello world: 853\n",
"hello world: 854\n",
"hello world: 855\n",
"hello world: 856\n",
"hello world: 857\n",
"hello world: 858\n",
"hello world: 859\n",
"hello world: 860\n",
"hello world: 861\n",
"hello world: 862\n",
"hello world: 863\n",
"hello world: 864\n",
"hello world: 865\n",
"hello world: 866\n",
"hello world: 867\n",
"hello world: 868\n",
"hello world: 869\n",
"hello world: 870\n",
"hello world: 871\n",
"hello world: 872\n",
"hello world: 873\n",
"hello world: 874\n",
"hello world: 875\n",
"hello world: 876\n",
"hello world: 877\n",
"hello world: 878\n",
"hello world: 879\n",
"hello world: 880\n",
"hello world: 881\n",
"hello world: 882\n",
"hello world: 883\n",
"hello world: 884\n",
"hello world: 885\n",
"hello world: 886\n",
"hello world: 887\n",
"hello world: 888\n",
"hello world: 889\n",
"hello world: 890\n",
"hello world: 891\n",
"hello world: 892\n",
"hello world: 893\n",
"hello world: 894\n",
"hello world: 895\n",
"hello world: 896\n",
"hello world: 897\n",
"hello world: 898\n",
"hello world: 899\n",
"hello world: 900\n",
"hello world: 901\n",
"hello world: 902\n",
"hello world: 903\n",
"hello world: 904\n",
"hello world: 905\n",
"hello world: 906\n",
"hello world: 907\n",
"hello world: 908\n",
"hello world: 909\n",
"hello world: 910\n",
"hello world: 911\n",
"hello world: 912\n",
"hello world: 913\n",
"hello world: 914\n",
"hello world: 915\n",
"hello world: 916\n",
"hello world: 917\n",
"hello world: 918\n",
"hello world: 919\n",
"hello world: 920\n",
"hello world: 921\n",
"hello world: 922\n",
"hello world: 923\n",
"hello world: 924\n",
"hello world: 925\n",
"hello world: 926\n",
"hello world: 927\n",
"hello world: 928\n",
"hello world: 929\n",
"hello world: 930\n",
"hello world: 931\n",
"hello world: 932\n",
"hello world: 933\n",
"hello world: 934\n",
"hello world: 935\n",
"hello world: 936\n",
"hello world: 937\n",
"hello world: 938\n",
"hello world: 939\n",
"hello world: 940\n",
"hello world: 941\n",
"hello world: 942\n",
"hello world: 943\n",
"hello world: 944\n",
"hello world: 945\n",
"hello world: 946\n",
"hello world: 947\n",
"hello world: 948\n",
"hello world: 949\n",
"hello world: 950\n",
"hello world: 951\n",
"hello world: 952\n",
"hello world: 953\n",
"hello world: 954\n",
"hello world: 955\n",
"hello world: 956\n",
"hello world: 957\n",
"hello world: 958\n",
"hello world: 959\n",
"hello world: 960\n",
"hello world: 961\n",
"hello world: 962\n",
"hello world: 963\n",
"hello world: 964\n",
"hello world: 965\n",
"hello world: 966\n",
"hello world: 967\n",
"hello world: 968\n",
"hello world: 969\n",
"hell\n"
]
}
],
"source": [
"g = open('newfile.txt', 'r')\n",
"print g.read()\n",
"f.close()\n",
"g.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以看到,出现异常的时候,磁盘的写入并没有完成,为此我们可以使用 `try/except/finally` 块来关闭文件,这里 `finally` 确保关闭文件,所有的写入已经完成。"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"something bad happened\n"
]
}
],
"source": [
"f = open('newfile.txt','w')\n",
"try:\n",
" for i in range(3000):\n",
" x = 1.0 / (i - 1000)\n",
" f.write('hello world: ' + str(i) + '\\n')\n",
"except Exception:\n",
" print \"something bad happened\"\n",
"finally:\n",
" f.close()"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello world: 0\n",
"hello world: 1\n",
"hello world: 2\n",
"hello world: 3\n",
"hello world: 4\n",
"hello world: 5\n",
"hello world: 6\n",
"hello world: 7\n",
"hello world: 8\n",
"hello world: 9\n",
"hello world: 10\n",
"hello world: 11\n",
"hello world: 12\n",
"hello world: 13\n",
"hello world: 14\n",
"hello world: 15\n",
"hello world: 16\n",
"hello world: 17\n",
"hello world: 18\n",
"hello world: 19\n",
"hello world: 20\n",
"hello world: 21\n",
"hello world: 22\n",
"hello world: 23\n",
"hello world: 24\n",
"hello world: 25\n",
"hello world: 26\n",
"hello world: 27\n",
"hello world: 28\n",
"hello world: 29\n",
"hello world: 30\n",
"hello world: 31\n",
"hello world: 32\n",
"hello world: 33\n",
"hello world: 34\n",
"hello world: 35\n",
"hello world: 36\n",
"hello world: 37\n",
"hello world: 38\n",
"hello world: 39\n",
"hello world: 40\n",
"hello world: 41\n",
"hello world: 42\n",
"hello world: 43\n",
"hello world: 44\n",
"hello world: 45\n",
"hello world: 46\n",
"hello world: 47\n",
"hello world: 48\n",
"hello world: 49\n",
"hello world: 50\n",
"hello world: 51\n",
"hello world: 52\n",
"hello world: 53\n",
"hello world: 54\n",
"hello world: 55\n",
"hello world: 56\n",
"hello world: 57\n",
"hello world: 58\n",
"hello world: 59\n",
"hello world: 60\n",
"hello world: 61\n",
"hello world: 62\n",
"hello world: 63\n",
"hello world: 64\n",
"hello world: 65\n",
"hello world: 66\n",
"hello world: 67\n",
"hello world: 68\n",
"hello world: 69\n",
"hello world: 70\n",
"hello world: 71\n",
"hello world: 72\n",
"hello world: 73\n",
"hello world: 74\n",
"hello world: 75\n",
"hello world: 76\n",
"hello world: 77\n",
"hello world: 78\n",
"hello world: 79\n",
"hello world: 80\n",
"hello world: 81\n",
"hello world: 82\n",
"hello world: 83\n",
"hello world: 84\n",
"hello world: 85\n",
"hello world: 86\n",
"hello world: 87\n",
"hello world: 88\n",
"hello world: 89\n",
"hello world: 90\n",
"hello world: 91\n",
"hello world: 92\n",
"hello world: 93\n",
"hello world: 94\n",
"hello world: 95\n",
"hello world: 96\n",
"hello world: 97\n",
"hello world: 98\n",
"hello world: 99\n",
"hello world: 100\n",
"hello world: 101\n",
"hello world: 102\n",
"hello world: 103\n",
"hello world: 104\n",
"hello world: 105\n",
"hello world: 106\n",
"hello world: 107\n",
"hello world: 108\n",
"hello world: 109\n",
"hello world: 110\n",
"hello world: 111\n",
"hello world: 112\n",
"hello world: 113\n",
"hello world: 114\n",
"hello world: 115\n",
"hello world: 116\n",
"hello world: 117\n",
"hello world: 118\n",
"hello world: 119\n",
"hello world: 120\n",
"hello world: 121\n",
"hello world: 122\n",
"hello world: 123\n",
"hello world: 124\n",
"hello world: 125\n",
"hello world: 126\n",
"hello world: 127\n",
"hello world: 128\n",
"hello world: 129\n",
"hello world: 130\n",
"hello world: 131\n",
"hello world: 132\n",
"hello world: 133\n",
"hello world: 134\n",
"hello world: 135\n",
"hello world: 136\n",
"hello world: 137\n",
"hello world: 138\n",
"hello world: 139\n",
"hello world: 140\n",
"hello world: 141\n",
"hello world: 142\n",
"hello world: 143\n",
"hello world: 144\n",
"hello world: 145\n",
"hello world: 146\n",
"hello world: 147\n",
"hello world: 148\n",
"hello world: 149\n",
"hello world: 150\n",
"hello world: 151\n",
"hello world: 152\n",
"hello world: 153\n",
"hello world: 154\n",
"hello world: 155\n",
"hello world: 156\n",
"hello world: 157\n",
"hello world: 158\n",
"hello world: 159\n",
"hello world: 160\n",
"hello world: 161\n",
"hello world: 162\n",
"hello world: 163\n",
"hello world: 164\n",
"hello world: 165\n",
"hello world: 166\n",
"hello world: 167\n",
"hello world: 168\n",
"hello world: 169\n",
"hello world: 170\n",
"hello world: 171\n",
"hello world: 172\n",
"hello world: 173\n",
"hello world: 174\n",
"hello world: 175\n",
"hello world: 176\n",
"hello world: 177\n",
"hello world: 178\n",
"hello world: 179\n",
"hello world: 180\n",
"hello world: 181\n",
"hello world: 182\n",
"hello world: 183\n",
"hello world: 184\n",
"hello world: 185\n",
"hello world: 186\n",
"hello world: 187\n",
"hello world: 188\n",
"hello world: 189\n",
"hello world: 190\n",
"hello world: 191\n",
"hello world: 192\n",
"hello world: 193\n",
"hello world: 194\n",
"hello world: 195\n",
"hello world: 196\n",
"hello world: 197\n",
"hello world: 198\n",
"hello world: 199\n",
"hello world: 200\n",
"hello world: 201\n",
"hello world: 202\n",
"hello world: 203\n",
"hello world: 204\n",
"hello world: 205\n",
"hello world: 206\n",
"hello world: 207\n",
"hello world: 208\n",
"hello world: 209\n",
"hello world: 210\n",
"hello world: 211\n",
"hello world: 212\n",
"hello world: 213\n",
"hello world: 214\n",
"hello world: 215\n",
"hello world: 216\n",
"hello world: 217\n",
"hello world: 218\n",
"hello world: 219\n",
"hello world: 220\n",
"hello world: 221\n",
"hello world: 222\n",
"hello world: 223\n",
"hello world: 224\n",
"hello world: 225\n",
"hello world: 226\n",
"hello world: 227\n",
"hello world: 228\n",
"hello world: 229\n",
"hello world: 230\n",
"hello world: 231\n",
"hello world: 232\n",
"hello world: 233\n",
"hello world: 234\n",
"hello world: 235\n",
"hello world: 236\n",
"hello world: 237\n",
"hello world: 238\n",
"hello world: 239\n",
"hello world: 240\n",
"hello world: 241\n",
"hello world: 242\n",
"hello world: 243\n",
"hello world: 244\n",
"hello world: 245\n",
"hello world: 246\n",
"hello world: 247\n",
"hello world: 248\n",
"hello world: 249\n",
"hello world: 250\n",
"hello world: 251\n",
"hello world: 252\n",
"hello world: 253\n",
"hello world: 254\n",
"hello world: 255\n",
"hello world: 256\n",
"hello world: 257\n",
"hello world: 258\n",
"hello world: 259\n",
"hello world: 260\n",
"hello world: 261\n",
"hello world: 262\n",
"hello world: 263\n",
"hello world: 264\n",
"hello world: 265\n",
"hello world: 266\n",
"hello world: 267\n",
"hello world: 268\n",
"hello world: 269\n",
"hello world: 270\n",
"hello world: 271\n",
"hello world: 272\n",
"hello world: 273\n",
"hello world: 274\n",
"hello world: 275\n",
"hello world: 276\n",
"hello world: 277\n",
"hello world: 278\n",
"hello world: 279\n",
"hello world: 280\n",
"hello world: 281\n",
"hello world: 282\n",
"hello world: 283\n",
"hello world: 284\n",
"hello world: 285\n",
"hello world: 286\n",
"hello world: 287\n",
"hello world: 288\n",
"hello world: 289\n",
"hello world: 290\n",
"hello world: 291\n",
"hello world: 292\n",
"hello world: 293\n",
"hello world: 294\n",
"hello world: 295\n",
"hello world: 296\n",
"hello world: 297\n",
"hello world: 298\n",
"hello world: 299\n",
"hello world: 300\n",
"hello world: 301\n",
"hello world: 302\n",
"hello world: 303\n",
"hello world: 304\n",
"hello world: 305\n",
"hello world: 306\n",
"hello world: 307\n",
"hello world: 308\n",
"hello world: 309\n",
"hello world: 310\n",
"hello world: 311\n",
"hello world: 312\n",
"hello world: 313\n",
"hello world: 314\n",
"hello world: 315\n",
"hello world: 316\n",
"hello world: 317\n",
"hello world: 318\n",
"hello world: 319\n",
"hello world: 320\n",
"hello world: 321\n",
"hello world: 322\n",
"hello world: 323\n",
"hello world: 324\n",
"hello world: 325\n",
"hello world: 326\n",
"hello world: 327\n",
"hello world: 328\n",
"hello world: 329\n",
"hello world: 330\n",
"hello world: 331\n",
"hello world: 332\n",
"hello world: 333\n",
"hello world: 334\n",
"hello world: 335\n",
"hello world: 336\n",
"hello world: 337\n",
"hello world: 338\n",
"hello world: 339\n",
"hello world: 340\n",
"hello world: 341\n",
"hello world: 342\n",
"hello world: 343\n",
"hello world: 344\n",
"hello world: 345\n",
"hello world: 346\n",
"hello world: 347\n",
"hello world: 348\n",
"hello world: 349\n",
"hello world: 350\n",
"hello world: 351\n",
"hello world: 352\n",
"hello world: 353\n",
"hello world: 354\n",
"hello world: 355\n",
"hello world: 356\n",
"hello world: 357\n",
"hello world: 358\n",
"hello world: 359\n",
"hello world: 360\n",
"hello world: 361\n",
"hello world: 362\n",
"hello world: 363\n",
"hello world: 364\n",
"hello world: 365\n",
"hello world: 366\n",
"hello world: 367\n",
"hello world: 368\n",
"hello world: 369\n",
"hello world: 370\n",
"hello world: 371\n",
"hello world: 372\n",
"hello world: 373\n",
"hello world: 374\n",
"hello world: 375\n",
"hello world: 376\n",
"hello world: 377\n",
"hello world: 378\n",
"hello world: 379\n",
"hello world: 380\n",
"hello world: 381\n",
"hello world: 382\n",
"hello world: 383\n",
"hello world: 384\n",
"hello world: 385\n",
"hello world: 386\n",
"hello world: 387\n",
"hello world: 388\n",
"hello world: 389\n",
"hello world: 390\n",
"hello world: 391\n",
"hello world: 392\n",
"hello world: 393\n",
"hello world: 394\n",
"hello world: 395\n",
"hello world: 396\n",
"hello world: 397\n",
"hello world: 398\n",
"hello world: 399\n",
"hello world: 400\n",
"hello world: 401\n",
"hello world: 402\n",
"hello world: 403\n",
"hello world: 404\n",
"hello world: 405\n",
"hello world: 406\n",
"hello world: 407\n",
"hello world: 408\n",
"hello world: 409\n",
"hello world: 410\n",
"hello world: 411\n",
"hello world: 412\n",
"hello world: 413\n",
"hello world: 414\n",
"hello world: 415\n",
"hello world: 416\n",
"hello world: 417\n",
"hello world: 418\n",
"hello world: 419\n",
"hello world: 420\n",
"hello world: 421\n",
"hello world: 422\n",
"hello world: 423\n",
"hello world: 424\n",
"hello world: 425\n",
"hello world: 426\n",
"hello world: 427\n",
"hello world: 428\n",
"hello world: 429\n",
"hello world: 430\n",
"hello world: 431\n",
"hello world: 432\n",
"hello world: 433\n",
"hello world: 434\n",
"hello world: 435\n",
"hello world: 436\n",
"hello world: 437\n",
"hello world: 438\n",
"hello world: 439\n",
"hello world: 440\n",
"hello world: 441\n",
"hello world: 442\n",
"hello world: 443\n",
"hello world: 444\n",
"hello world: 445\n",
"hello world: 446\n",
"hello world: 447\n",
"hello world: 448\n",
"hello world: 449\n",
"hello world: 450\n",
"hello world: 451\n",
"hello world: 452\n",
"hello world: 453\n",
"hello world: 454\n",
"hello world: 455\n",
"hello world: 456\n",
"hello world: 457\n",
"hello world: 458\n",
"hello world: 459\n",
"hello world: 460\n",
"hello world: 461\n",
"hello world: 462\n",
"hello world: 463\n",
"hello world: 464\n",
"hello world: 465\n",
"hello world: 466\n",
"hello world: 467\n",
"hello world: 468\n",
"hello world: 469\n",
"hello world: 470\n",
"hello world: 471\n",
"hello world: 472\n",
"hello world: 473\n",
"hello world: 474\n",
"hello world: 475\n",
"hello world: 476\n",
"hello world: 477\n",
"hello world: 478\n",
"hello world: 479\n",
"hello world: 480\n",
"hello world: 481\n",
"hello world: 482\n",
"hello world: 483\n",
"hello world: 484\n",
"hello world: 485\n",
"hello world: 486\n",
"hello world: 487\n",
"hello world: 488\n",
"hello world: 489\n",
"hello world: 490\n",
"hello world: 491\n",
"hello world: 492\n",
"hello world: 493\n",
"hello world: 494\n",
"hello world: 495\n",
"hello world: 496\n",
"hello world: 497\n",
"hello world: 498\n",
"hello world: 499\n",
"hello world: 500\n",
"hello world: 501\n",
"hello world: 502\n",
"hello world: 503\n",
"hello world: 504\n",
"hello world: 505\n",
"hello world: 506\n",
"hello world: 507\n",
"hello world: 508\n",
"hello world: 509\n",
"hello world: 510\n",
"hello world: 511\n",
"hello world: 512\n",
"hello world: 513\n",
"hello world: 514\n",
"hello world: 515\n",
"hello world: 516\n",
"hello world: 517\n",
"hello world: 518\n",
"hello world: 519\n",
"hello world: 520\n",
"hello world: 521\n",
"hello world: 522\n",
"hello world: 523\n",
"hello world: 524\n",
"hello world: 525\n",
"hello world: 526\n",
"hello world: 527\n",
"hello world: 528\n",
"hello world: 529\n",
"hello world: 530\n",
"hello world: 531\n",
"hello world: 532\n",
"hello world: 533\n",
"hello world: 534\n",
"hello world: 535\n",
"hello world: 536\n",
"hello world: 537\n",
"hello world: 538\n",
"hello world: 539\n",
"hello world: 540\n",
"hello world: 541\n",
"hello world: 542\n",
"hello world: 543\n",
"hello world: 544\n",
"hello world: 545\n",
"hello world: 546\n",
"hello world: 547\n",
"hello world: 548\n",
"hello world: 549\n",
"hello world: 550\n",
"hello world: 551\n",
"hello world: 552\n",
"hello world: 553\n",
"hello world: 554\n",
"hello world: 555\n",
"hello world: 556\n",
"hello world: 557\n",
"hello world: 558\n",
"hello world: 559\n",
"hello world: 560\n",
"hello world: 561\n",
"hello world: 562\n",
"hello world: 563\n",
"hello world: 564\n",
"hello world: 565\n",
"hello world: 566\n",
"hello world: 567\n",
"hello world: 568\n",
"hello world: 569\n",
"hello world: 570\n",
"hello world: 571\n",
"hello world: 572\n",
"hello world: 573\n",
"hello world: 574\n",
"hello world: 575\n",
"hello world: 576\n",
"hello world: 577\n",
"hello world: 578\n",
"hello world: 579\n",
"hello world: 580\n",
"hello world: 581\n",
"hello world: 582\n",
"hello world: 583\n",
"hello world: 584\n",
"hello world: 585\n",
"hello world: 586\n",
"hello world: 587\n",
"hello world: 588\n",
"hello world: 589\n",
"hello world: 590\n",
"hello world: 591\n",
"hello world: 592\n",
"hello world: 593\n",
"hello world: 594\n",
"hello world: 595\n",
"hello world: 596\n",
"hello world: 597\n",
"hello world: 598\n",
"hello world: 599\n",
"hello world: 600\n",
"hello world: 601\n",
"hello world: 602\n",
"hello world: 603\n",
"hello world: 604\n",
"hello world: 605\n",
"hello world: 606\n",
"hello world: 607\n",
"hello world: 608\n",
"hello world: 609\n",
"hello world: 610\n",
"hello world: 611\n",
"hello world: 612\n",
"hello world: 613\n",
"hello world: 614\n",
"hello world: 615\n",
"hello world: 616\n",
"hello world: 617\n",
"hello world: 618\n",
"hello world: 619\n",
"hello world: 620\n",
"hello world: 621\n",
"hello world: 622\n",
"hello world: 623\n",
"hello world: 624\n",
"hello world: 625\n",
"hello world: 626\n",
"hello world: 627\n",
"hello world: 628\n",
"hello world: 629\n",
"hello world: 630\n",
"hello world: 631\n",
"hello world: 632\n",
"hello world: 633\n",
"hello world: 634\n",
"hello world: 635\n",
"hello world: 636\n",
"hello world: 637\n",
"hello world: 638\n",
"hello world: 639\n",
"hello world: 640\n",
"hello world: 641\n",
"hello world: 642\n",
"hello world: 643\n",
"hello world: 644\n",
"hello world: 645\n",
"hello world: 646\n",
"hello world: 647\n",
"hello world: 648\n",
"hello world: 649\n",
"hello world: 650\n",
"hello world: 651\n",
"hello world: 652\n",
"hello world: 653\n",
"hello world: 654\n",
"hello world: 655\n",
"hello world: 656\n",
"hello world: 657\n",
"hello world: 658\n",
"hello world: 659\n",
"hello world: 660\n",
"hello world: 661\n",
"hello world: 662\n",
"hello world: 663\n",
"hello world: 664\n",
"hello world: 665\n",
"hello world: 666\n",
"hello world: 667\n",
"hello world: 668\n",
"hello world: 669\n",
"hello world: 670\n",
"hello world: 671\n",
"hello world: 672\n",
"hello world: 673\n",
"hello world: 674\n",
"hello world: 675\n",
"hello world: 676\n",
"hello world: 677\n",
"hello world: 678\n",
"hello world: 679\n",
"hello world: 680\n",
"hello world: 681\n",
"hello world: 682\n",
"hello world: 683\n",
"hello world: 684\n",
"hello world: 685\n",
"hello world: 686\n",
"hello world: 687\n",
"hello world: 688\n",
"hello world: 689\n",
"hello world: 690\n",
"hello world: 691\n",
"hello world: 692\n",
"hello world: 693\n",
"hello world: 694\n",
"hello world: 695\n",
"hello world: 696\n",
"hello world: 697\n",
"hello world: 698\n",
"hello world: 699\n",
"hello world: 700\n",
"hello world: 701\n",
"hello world: 702\n",
"hello world: 703\n",
"hello world: 704\n",
"hello world: 705\n",
"hello world: 706\n",
"hello world: 707\n",
"hello world: 708\n",
"hello world: 709\n",
"hello world: 710\n",
"hello world: 711\n",
"hello world: 712\n",
"hello world: 713\n",
"hello world: 714\n",
"hello world: 715\n",
"hello world: 716\n",
"hello world: 717\n",
"hello world: 718\n",
"hello world: 719\n",
"hello world: 720\n",
"hello world: 721\n",
"hello world: 722\n",
"hello world: 723\n",
"hello world: 724\n",
"hello world: 725\n",
"hello world: 726\n",
"hello world: 727\n",
"hello world: 728\n",
"hello world: 729\n",
"hello world: 730\n",
"hello world: 731\n",
"hello world: 732\n",
"hello world: 733\n",
"hello world: 734\n",
"hello world: 735\n",
"hello world: 736\n",
"hello world: 737\n",
"hello world: 738\n",
"hello world: 739\n",
"hello world: 740\n",
"hello world: 741\n",
"hello world: 742\n",
"hello world: 743\n",
"hello world: 744\n",
"hello world: 745\n",
"hello world: 746\n",
"hello world: 747\n",
"hello world: 748\n",
"hello world: 749\n",
"hello world: 750\n",
"hello world: 751\n",
"hello world: 752\n",
"hello world: 753\n",
"hello world: 754\n",
"hello world: 755\n",
"hello world: 756\n",
"hello world: 757\n",
"hello world: 758\n",
"hello world: 759\n",
"hello world: 760\n",
"hello world: 761\n",
"hello world: 762\n",
"hello world: 763\n",
"hello world: 764\n",
"hello world: 765\n",
"hello world: 766\n",
"hello world: 767\n",
"hello world: 768\n",
"hello world: 769\n",
"hello world: 770\n",
"hello world: 771\n",
"hello world: 772\n",
"hello world: 773\n",
"hello world: 774\n",
"hello world: 775\n",
"hello world: 776\n",
"hello world: 777\n",
"hello world: 778\n",
"hello world: 779\n",
"hello world: 780\n",
"hello world: 781\n",
"hello world: 782\n",
"hello world: 783\n",
"hello world: 784\n",
"hello world: 785\n",
"hello world: 786\n",
"hello world: 787\n",
"hello world: 788\n",
"hello world: 789\n",
"hello world: 790\n",
"hello world: 791\n",
"hello world: 792\n",
"hello world: 793\n",
"hello world: 794\n",
"hello world: 795\n",
"hello world: 796\n",
"hello world: 797\n",
"hello world: 798\n",
"hello world: 799\n",
"hello world: 800\n",
"hello world: 801\n",
"hello world: 802\n",
"hello world: 803\n",
"hello world: 804\n",
"hello world: 805\n",
"hello world: 806\n",
"hello world: 807\n",
"hello world: 808\n",
"hello world: 809\n",
"hello world: 810\n",
"hello world: 811\n",
"hello world: 812\n",
"hello world: 813\n",
"hello world: 814\n",
"hello world: 815\n",
"hello world: 816\n",
"hello world: 817\n",
"hello world: 818\n",
"hello world: 819\n",
"hello world: 820\n",
"hello world: 821\n",
"hello world: 822\n",
"hello world: 823\n",
"hello world: 824\n",
"hello world: 825\n",
"hello world: 826\n",
"hello world: 827\n",
"hello world: 828\n",
"hello world: 829\n",
"hello world: 830\n",
"hello world: 831\n",
"hello world: 832\n",
"hello world: 833\n",
"hello world: 834\n",
"hello world: 835\n",
"hello world: 836\n",
"hello world: 837\n",
"hello world: 838\n",
"hello world: 839\n",
"hello world: 840\n",
"hello world: 841\n",
"hello world: 842\n",
"hello world: 843\n",
"hello world: 844\n",
"hello world: 845\n",
"hello world: 846\n",
"hello world: 847\n",
"hello world: 848\n",
"hello world: 849\n",
"hello world: 850\n",
"hello world: 851\n",
"hello world: 852\n",
"hello world: 853\n",
"hello world: 854\n",
"hello world: 855\n",
"hello world: 856\n",
"hello world: 857\n",
"hello world: 858\n",
"hello world: 859\n",
"hello world: 860\n",
"hello world: 861\n",
"hello world: 862\n",
"hello world: 863\n",
"hello world: 864\n",
"hello world: 865\n",
"hello world: 866\n",
"hello world: 867\n",
"hello world: 868\n",
"hello world: 869\n",
"hello world: 870\n",
"hello world: 871\n",
"hello world: 872\n",
"hello world: 873\n",
"hello world: 874\n",
"hello world: 875\n",
"hello world: 876\n",
"hello world: 877\n",
"hello world: 878\n",
"hello world: 879\n",
"hello world: 880\n",
"hello world: 881\n",
"hello world: 882\n",
"hello world: 883\n",
"hello world: 884\n",
"hello world: 885\n",
"hello world: 886\n",
"hello world: 887\n",
"hello world: 888\n",
"hello world: 889\n",
"hello world: 890\n",
"hello world: 891\n",
"hello world: 892\n",
"hello world: 893\n",
"hello world: 894\n",
"hello world: 895\n",
"hello world: 896\n",
"hello world: 897\n",
"hello world: 898\n",
"hello world: 899\n",
"hello world: 900\n",
"hello world: 901\n",
"hello world: 902\n",
"hello world: 903\n",
"hello world: 904\n",
"hello world: 905\n",
"hello world: 906\n",
"hello world: 907\n",
"hello world: 908\n",
"hello world: 909\n",
"hello world: 910\n",
"hello world: 911\n",
"hello world: 912\n",
"hello world: 913\n",
"hello world: 914\n",
"hello world: 915\n",
"hello world: 916\n",
"hello world: 917\n",
"hello world: 918\n",
"hello world: 919\n",
"hello world: 920\n",
"hello world: 921\n",
"hello world: 922\n",
"hello world: 923\n",
"hello world: 924\n",
"hello world: 925\n",
"hello world: 926\n",
"hello world: 927\n",
"hello world: 928\n",
"hello world: 929\n",
"hello world: 930\n",
"hello world: 931\n",
"hello world: 932\n",
"hello world: 933\n",
"hello world: 934\n",
"hello world: 935\n",
"hello world: 936\n",
"hello world: 937\n",
"hello world: 938\n",
"hello world: 939\n",
"hello world: 940\n",
"hello world: 941\n",
"hello world: 942\n",
"hello world: 943\n",
"hello world: 944\n",
"hello world: 945\n",
"hello world: 946\n",
"hello world: 947\n",
"hello world: 948\n",
"hello world: 949\n",
"hello world: 950\n",
"hello world: 951\n",
"hello world: 952\n",
"hello world: 953\n",
"hello world: 954\n",
"hello world: 955\n",
"hello world: 956\n",
"hello world: 957\n",
"hello world: 958\n",
"hello world: 959\n",
"hello world: 960\n",
"hello world: 961\n",
"hello world: 962\n",
"hello world: 963\n",
"hello world: 964\n",
"hello world: 965\n",
"hello world: 966\n",
"hello world: 967\n",
"hello world: 968\n",
"hello world: 969\n",
"hello world: 970\n",
"hello world: 971\n",
"hello world: 972\n",
"hello world: 973\n",
"hello world: 974\n",
"hello world: 975\n",
"hello world: 976\n",
"hello world: 977\n",
"hello world: 978\n",
"hello world: 979\n",
"hello world: 980\n",
"hello world: 981\n",
"hello world: 982\n",
"hello world: 983\n",
"hello world: 984\n",
"hello world: 985\n",
"hello world: 986\n",
"hello world: 987\n",
"hello world: 988\n",
"hello world: 989\n",
"hello world: 990\n",
"hello world: 991\n",
"hello world: 992\n",
"hello world: 993\n",
"hello world: 994\n",
"hello world: 995\n",
"hello world: 996\n",
"hello world: 997\n",
"hello world: 998\n",
"hello world: 999\n",
"\n"
]
}
],
"source": [
"g = open('newfile.txt', 'r')\n",
"print g.read()\n",
"g.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## with 方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"事实上,**Python**提供了更安全的方法,当 `with` 块的内容结束后,**Python**会自动调用它的`close` 方法,确保读写的安全:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "ZeroDivisionError",
"evalue": "float division by zero",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'newfile.txt'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'w'\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m3000\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m1.0\u001b[0m \u001b[1;33m/\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mi\u001b[0m \u001b[1;33m-\u001b[0m \u001b[1;36m1000\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'hello world: '\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mstr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;34m'\\n'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mZeroDivisionError\u001b[0m: float division by zero"
]
}
],
"source": [
"with open('newfile.txt','w') as f:\n",
" for i in range(3000):\n",
" x = 1.0 / (i - 1000)\n",
" f.write('hello world: ' + str(i) + '\\n')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"与 `try/exception/finally` 效果相同,但更简单。"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello world: 0\n",
"hello world: 1\n",
"hello world: 2\n",
"hello world: 3\n",
"hello world: 4\n",
"hello world: 5\n",
"hello world: 6\n",
"hello world: 7\n",
"hello world: 8\n",
"hello world: 9\n",
"hello world: 10\n",
"hello world: 11\n",
"hello world: 12\n",
"hello world: 13\n",
"hello world: 14\n",
"hello world: 15\n",
"hello world: 16\n",
"hello world: 17\n",
"hello world: 18\n",
"hello world: 19\n",
"hello world: 20\n",
"hello world: 21\n",
"hello world: 22\n",
"hello world: 23\n",
"hello world: 24\n",
"hello world: 25\n",
"hello world: 26\n",
"hello world: 27\n",
"hello world: 28\n",
"hello world: 29\n",
"hello world: 30\n",
"hello world: 31\n",
"hello world: 32\n",
"hello world: 33\n",
"hello world: 34\n",
"hello world: 35\n",
"hello world: 36\n",
"hello world: 37\n",
"hello world: 38\n",
"hello world: 39\n",
"hello world: 40\n",
"hello world: 41\n",
"hello world: 42\n",
"hello world: 43\n",
"hello world: 44\n",
"hello world: 45\n",
"hello world: 46\n",
"hello world: 47\n",
"hello world: 48\n",
"hello world: 49\n",
"hello world: 50\n",
"hello world: 51\n",
"hello world: 52\n",
"hello world: 53\n",
"hello world: 54\n",
"hello world: 55\n",
"hello world: 56\n",
"hello world: 57\n",
"hello world: 58\n",
"hello world: 59\n",
"hello world: 60\n",
"hello world: 61\n",
"hello world: 62\n",
"hello world: 63\n",
"hello world: 64\n",
"hello world: 65\n",
"hello world: 66\n",
"hello world: 67\n",
"hello world: 68\n",
"hello world: 69\n",
"hello world: 70\n",
"hello world: 71\n",
"hello world: 72\n",
"hello world: 73\n",
"hello world: 74\n",
"hello world: 75\n",
"hello world: 76\n",
"hello world: 77\n",
"hello world: 78\n",
"hello world: 79\n",
"hello world: 80\n",
"hello world: 81\n",
"hello world: 82\n",
"hello world: 83\n",
"hello world: 84\n",
"hello world: 85\n",
"hello world: 86\n",
"hello world: 87\n",
"hello world: 88\n",
"hello world: 89\n",
"hello world: 90\n",
"hello world: 91\n",
"hello world: 92\n",
"hello world: 93\n",
"hello world: 94\n",
"hello world: 95\n",
"hello world: 96\n",
"hello world: 97\n",
"hello world: 98\n",
"hello world: 99\n",
"hello world: 100\n",
"hello world: 101\n",
"hello world: 102\n",
"hello world: 103\n",
"hello world: 104\n",
"hello world: 105\n",
"hello world: 106\n",
"hello world: 107\n",
"hello world: 108\n",
"hello world: 109\n",
"hello world: 110\n",
"hello world: 111\n",
"hello world: 112\n",
"hello world: 113\n",
"hello world: 114\n",
"hello world: 115\n",
"hello world: 116\n",
"hello world: 117\n",
"hello world: 118\n",
"hello world: 119\n",
"hello world: 120\n",
"hello world: 121\n",
"hello world: 122\n",
"hello world: 123\n",
"hello world: 124\n",
"hello world: 125\n",
"hello world: 126\n",
"hello world: 127\n",
"hello world: 128\n",
"hello world: 129\n",
"hello world: 130\n",
"hello world: 131\n",
"hello world: 132\n",
"hello world: 133\n",
"hello world: 134\n",
"hello world: 135\n",
"hello world: 136\n",
"hello world: 137\n",
"hello world: 138\n",
"hello world: 139\n",
"hello world: 140\n",
"hello world: 141\n",
"hello world: 142\n",
"hello world: 143\n",
"hello world: 144\n",
"hello world: 145\n",
"hello world: 146\n",
"hello world: 147\n",
"hello world: 148\n",
"hello world: 149\n",
"hello world: 150\n",
"hello world: 151\n",
"hello world: 152\n",
"hello world: 153\n",
"hello world: 154\n",
"hello world: 155\n",
"hello world: 156\n",
"hello world: 157\n",
"hello world: 158\n",
"hello world: 159\n",
"hello world: 160\n",
"hello world: 161\n",
"hello world: 162\n",
"hello world: 163\n",
"hello world: 164\n",
"hello world: 165\n",
"hello world: 166\n",
"hello world: 167\n",
"hello world: 168\n",
"hello world: 169\n",
"hello world: 170\n",
"hello world: 171\n",
"hello world: 172\n",
"hello world: 173\n",
"hello world: 174\n",
"hello world: 175\n",
"hello world: 176\n",
"hello world: 177\n",
"hello world: 178\n",
"hello world: 179\n",
"hello world: 180\n",
"hello world: 181\n",
"hello world: 182\n",
"hello world: 183\n",
"hello world: 184\n",
"hello world: 185\n",
"hello world: 186\n",
"hello world: 187\n",
"hello world: 188\n",
"hello world: 189\n",
"hello world: 190\n",
"hello world: 191\n",
"hello world: 192\n",
"hello world: 193\n",
"hello world: 194\n",
"hello world: 195\n",
"hello world: 196\n",
"hello world: 197\n",
"hello world: 198\n",
"hello world: 199\n",
"hello world: 200\n",
"hello world: 201\n",
"hello world: 202\n",
"hello world: 203\n",
"hello world: 204\n",
"hello world: 205\n",
"hello world: 206\n",
"hello world: 207\n",
"hello world: 208\n",
"hello world: 209\n",
"hello world: 210\n",
"hello world: 211\n",
"hello world: 212\n",
"hello world: 213\n",
"hello world: 214\n",
"hello world: 215\n",
"hello world: 216\n",
"hello world: 217\n",
"hello world: 218\n",
"hello world: 219\n",
"hello world: 220\n",
"hello world: 221\n",
"hello world: 222\n",
"hello world: 223\n",
"hello world: 224\n",
"hello world: 225\n",
"hello world: 226\n",
"hello world: 227\n",
"hello world: 228\n",
"hello world: 229\n",
"hello world: 230\n",
"hello world: 231\n",
"hello world: 232\n",
"hello world: 233\n",
"hello world: 234\n",
"hello world: 235\n",
"hello world: 236\n",
"hello world: 237\n",
"hello world: 238\n",
"hello world: 239\n",
"hello world: 240\n",
"hello world: 241\n",
"hello world: 242\n",
"hello world: 243\n",
"hello world: 244\n",
"hello world: 245\n",
"hello world: 246\n",
"hello world: 247\n",
"hello world: 248\n",
"hello world: 249\n",
"hello world: 250\n",
"hello world: 251\n",
"hello world: 252\n",
"hello world: 253\n",
"hello world: 254\n",
"hello world: 255\n",
"hello world: 256\n",
"hello world: 257\n",
"hello world: 258\n",
"hello world: 259\n",
"hello world: 260\n",
"hello world: 261\n",
"hello world: 262\n",
"hello world: 263\n",
"hello world: 264\n",
"hello world: 265\n",
"hello world: 266\n",
"hello world: 267\n",
"hello world: 268\n",
"hello world: 269\n",
"hello world: 270\n",
"hello world: 271\n",
"hello world: 272\n",
"hello world: 273\n",
"hello world: 274\n",
"hello world: 275\n",
"hello world: 276\n",
"hello world: 277\n",
"hello world: 278\n",
"hello world: 279\n",
"hello world: 280\n",
"hello world: 281\n",
"hello world: 282\n",
"hello world: 283\n",
"hello world: 284\n",
"hello world: 285\n",
"hello world: 286\n",
"hello world: 287\n",
"hello world: 288\n",
"hello world: 289\n",
"hello world: 290\n",
"hello world: 291\n",
"hello world: 292\n",
"hello world: 293\n",
"hello world: 294\n",
"hello world: 295\n",
"hello world: 296\n",
"hello world: 297\n",
"hello world: 298\n",
"hello world: 299\n",
"hello world: 300\n",
"hello world: 301\n",
"hello world: 302\n",
"hello world: 303\n",
"hello world: 304\n",
"hello world: 305\n",
"hello world: 306\n",
"hello world: 307\n",
"hello world: 308\n",
"hello world: 309\n",
"hello world: 310\n",
"hello world: 311\n",
"hello world: 312\n",
"hello world: 313\n",
"hello world: 314\n",
"hello world: 315\n",
"hello world: 316\n",
"hello world: 317\n",
"hello world: 318\n",
"hello world: 319\n",
"hello world: 320\n",
"hello world: 321\n",
"hello world: 322\n",
"hello world: 323\n",
"hello world: 324\n",
"hello world: 325\n",
"hello world: 326\n",
"hello world: 327\n",
"hello world: 328\n",
"hello world: 329\n",
"hello world: 330\n",
"hello world: 331\n",
"hello world: 332\n",
"hello world: 333\n",
"hello world: 334\n",
"hello world: 335\n",
"hello world: 336\n",
"hello world: 337\n",
"hello world: 338\n",
"hello world: 339\n",
"hello world: 340\n",
"hello world: 341\n",
"hello world: 342\n",
"hello world: 343\n",
"hello world: 344\n",
"hello world: 345\n",
"hello world: 346\n",
"hello world: 347\n",
"hello world: 348\n",
"hello world: 349\n",
"hello world: 350\n",
"hello world: 351\n",
"hello world: 352\n",
"hello world: 353\n",
"hello world: 354\n",
"hello world: 355\n",
"hello world: 356\n",
"hello world: 357\n",
"hello world: 358\n",
"hello world: 359\n",
"hello world: 360\n",
"hello world: 361\n",
"hello world: 362\n",
"hello world: 363\n",
"hello world: 364\n",
"hello world: 365\n",
"hello world: 366\n",
"hello world: 367\n",
"hello world: 368\n",
"hello world: 369\n",
"hello world: 370\n",
"hello world: 371\n",
"hello world: 372\n",
"hello world: 373\n",
"hello world: 374\n",
"hello world: 375\n",
"hello world: 376\n",
"hello world: 377\n",
"hello world: 378\n",
"hello world: 379\n",
"hello world: 380\n",
"hello world: 381\n",
"hello world: 382\n",
"hello world: 383\n",
"hello world: 384\n",
"hello world: 385\n",
"hello world: 386\n",
"hello world: 387\n",
"hello world: 388\n",
"hello world: 389\n",
"hello world: 390\n",
"hello world: 391\n",
"hello world: 392\n",
"hello world: 393\n",
"hello world: 394\n",
"hello world: 395\n",
"hello world: 396\n",
"hello world: 397\n",
"hello world: 398\n",
"hello world: 399\n",
"hello world: 400\n",
"hello world: 401\n",
"hello world: 402\n",
"hello world: 403\n",
"hello world: 404\n",
"hello world: 405\n",
"hello world: 406\n",
"hello world: 407\n",
"hello world: 408\n",
"hello world: 409\n",
"hello world: 410\n",
"hello world: 411\n",
"hello world: 412\n",
"hello world: 413\n",
"hello world: 414\n",
"hello world: 415\n",
"hello world: 416\n",
"hello world: 417\n",
"hello world: 418\n",
"hello world: 419\n",
"hello world: 420\n",
"hello world: 421\n",
"hello world: 422\n",
"hello world: 423\n",
"hello world: 424\n",
"hello world: 425\n",
"hello world: 426\n",
"hello world: 427\n",
"hello world: 428\n",
"hello world: 429\n",
"hello world: 430\n",
"hello world: 431\n",
"hello world: 432\n",
"hello world: 433\n",
"hello world: 434\n",
"hello world: 435\n",
"hello world: 436\n",
"hello world: 437\n",
"hello world: 438\n",
"hello world: 439\n",
"hello world: 440\n",
"hello world: 441\n",
"hello world: 442\n",
"hello world: 443\n",
"hello world: 444\n",
"hello world: 445\n",
"hello world: 446\n",
"hello world: 447\n",
"hello world: 448\n",
"hello world: 449\n",
"hello world: 450\n",
"hello world: 451\n",
"hello world: 452\n",
"hello world: 453\n",
"hello world: 454\n",
"hello world: 455\n",
"hello world: 456\n",
"hello world: 457\n",
"hello world: 458\n",
"hello world: 459\n",
"hello world: 460\n",
"hello world: 461\n",
"hello world: 462\n",
"hello world: 463\n",
"hello world: 464\n",
"hello world: 465\n",
"hello world: 466\n",
"hello world: 467\n",
"hello world: 468\n",
"hello world: 469\n",
"hello world: 470\n",
"hello world: 471\n",
"hello world: 472\n",
"hello world: 473\n",
"hello world: 474\n",
"hello world: 475\n",
"hello world: 476\n",
"hello world: 477\n",
"hello world: 478\n",
"hello world: 479\n",
"hello world: 480\n",
"hello world: 481\n",
"hello world: 482\n",
"hello world: 483\n",
"hello world: 484\n",
"hello world: 485\n",
"hello world: 486\n",
"hello world: 487\n",
"hello world: 488\n",
"hello world: 489\n",
"hello world: 490\n",
"hello world: 491\n",
"hello world: 492\n",
"hello world: 493\n",
"hello world: 494\n",
"hello world: 495\n",
"hello world: 496\n",
"hello world: 497\n",
"hello world: 498\n",
"hello world: 499\n",
"hello world: 500\n",
"hello world: 501\n",
"hello world: 502\n",
"hello world: 503\n",
"hello world: 504\n",
"hello world: 505\n",
"hello world: 506\n",
"hello world: 507\n",
"hello world: 508\n",
"hello world: 509\n",
"hello world: 510\n",
"hello world: 511\n",
"hello world: 512\n",
"hello world: 513\n",
"hello world: 514\n",
"hello world: 515\n",
"hello world: 516\n",
"hello world: 517\n",
"hello world: 518\n",
"hello world: 519\n",
"hello world: 520\n",
"hello world: 521\n",
"hello world: 522\n",
"hello world: 523\n",
"hello world: 524\n",
"hello world: 525\n",
"hello world: 526\n",
"hello world: 527\n",
"hello world: 528\n",
"hello world: 529\n",
"hello world: 530\n",
"hello world: 531\n",
"hello world: 532\n",
"hello world: 533\n",
"hello world: 534\n",
"hello world: 535\n",
"hello world: 536\n",
"hello world: 537\n",
"hello world: 538\n",
"hello world: 539\n",
"hello world: 540\n",
"hello world: 541\n",
"hello world: 542\n",
"hello world: 543\n",
"hello world: 544\n",
"hello world: 545\n",
"hello world: 546\n",
"hello world: 547\n",
"hello world: 548\n",
"hello world: 549\n",
"hello world: 550\n",
"hello world: 551\n",
"hello world: 552\n",
"hello world: 553\n",
"hello world: 554\n",
"hello world: 555\n",
"hello world: 556\n",
"hello world: 557\n",
"hello world: 558\n",
"hello world: 559\n",
"hello world: 560\n",
"hello world: 561\n",
"hello world: 562\n",
"hello world: 563\n",
"hello world: 564\n",
"hello world: 565\n",
"hello world: 566\n",
"hello world: 567\n",
"hello world: 568\n",
"hello world: 569\n",
"hello world: 570\n",
"hello world: 571\n",
"hello world: 572\n",
"hello world: 573\n",
"hello world: 574\n",
"hello world: 575\n",
"hello world: 576\n",
"hello world: 577\n",
"hello world: 578\n",
"hello world: 579\n",
"hello world: 580\n",
"hello world: 581\n",
"hello world: 582\n",
"hello world: 583\n",
"hello world: 584\n",
"hello world: 585\n",
"hello world: 586\n",
"hello world: 587\n",
"hello world: 588\n",
"hello world: 589\n",
"hello world: 590\n",
"hello world: 591\n",
"hello world: 592\n",
"hello world: 593\n",
"hello world: 594\n",
"hello world: 595\n",
"hello world: 596\n",
"hello world: 597\n",
"hello world: 598\n",
"hello world: 599\n",
"hello world: 600\n",
"hello world: 601\n",
"hello world: 602\n",
"hello world: 603\n",
"hello world: 604\n",
"hello world: 605\n",
"hello world: 606\n",
"hello world: 607\n",
"hello world: 608\n",
"hello world: 609\n",
"hello world: 610\n",
"hello world: 611\n",
"hello world: 612\n",
"hello world: 613\n",
"hello world: 614\n",
"hello world: 615\n",
"hello world: 616\n",
"hello world: 617\n",
"hello world: 618\n",
"hello world: 619\n",
"hello world: 620\n",
"hello world: 621\n",
"hello world: 622\n",
"hello world: 623\n",
"hello world: 624\n",
"hello world: 625\n",
"hello world: 626\n",
"hello world: 627\n",
"hello world: 628\n",
"hello world: 629\n",
"hello world: 630\n",
"hello world: 631\n",
"hello world: 632\n",
"hello world: 633\n",
"hello world: 634\n",
"hello world: 635\n",
"hello world: 636\n",
"hello world: 637\n",
"hello world: 638\n",
"hello world: 639\n",
"hello world: 640\n",
"hello world: 641\n",
"hello world: 642\n",
"hello world: 643\n",
"hello world: 644\n",
"hello world: 645\n",
"hello world: 646\n",
"hello world: 647\n",
"hello world: 648\n",
"hello world: 649\n",
"hello world: 650\n",
"hello world: 651\n",
"hello world: 652\n",
"hello world: 653\n",
"hello world: 654\n",
"hello world: 655\n",
"hello world: 656\n",
"hello world: 657\n",
"hello world: 658\n",
"hello world: 659\n",
"hello world: 660\n",
"hello world: 661\n",
"hello world: 662\n",
"hello world: 663\n",
"hello world: 664\n",
"hello world: 665\n",
"hello world: 666\n",
"hello world: 667\n",
"hello world: 668\n",
"hello world: 669\n",
"hello world: 670\n",
"hello world: 671\n",
"hello world: 672\n",
"hello world: 673\n",
"hello world: 674\n",
"hello world: 675\n",
"hello world: 676\n",
"hello world: 677\n",
"hello world: 678\n",
"hello world: 679\n",
"hello world: 680\n",
"hello world: 681\n",
"hello world: 682\n",
"hello world: 683\n",
"hello world: 684\n",
"hello world: 685\n",
"hello world: 686\n",
"hello world: 687\n",
"hello world: 688\n",
"hello world: 689\n",
"hello world: 690\n",
"hello world: 691\n",
"hello world: 692\n",
"hello world: 693\n",
"hello world: 694\n",
"hello world: 695\n",
"hello world: 696\n",
"hello world: 697\n",
"hello world: 698\n",
"hello world: 699\n",
"hello world: 700\n",
"hello world: 701\n",
"hello world: 702\n",
"hello world: 703\n",
"hello world: 704\n",
"hello world: 705\n",
"hello world: 706\n",
"hello world: 707\n",
"hello world: 708\n",
"hello world: 709\n",
"hello world: 710\n",
"hello world: 711\n",
"hello world: 712\n",
"hello world: 713\n",
"hello world: 714\n",
"hello world: 715\n",
"hello world: 716\n",
"hello world: 717\n",
"hello world: 718\n",
"hello world: 719\n",
"hello world: 720\n",
"hello world: 721\n",
"hello world: 722\n",
"hello world: 723\n",
"hello world: 724\n",
"hello world: 725\n",
"hello world: 726\n",
"hello world: 727\n",
"hello world: 728\n",
"hello world: 729\n",
"hello world: 730\n",
"hello world: 731\n",
"hello world: 732\n",
"hello world: 733\n",
"hello world: 734\n",
"hello world: 735\n",
"hello world: 736\n",
"hello world: 737\n",
"hello world: 738\n",
"hello world: 739\n",
"hello world: 740\n",
"hello world: 741\n",
"hello world: 742\n",
"hello world: 743\n",
"hello world: 744\n",
"hello world: 745\n",
"hello world: 746\n",
"hello world: 747\n",
"hello world: 748\n",
"hello world: 749\n",
"hello world: 750\n",
"hello world: 751\n",
"hello world: 752\n",
"hello world: 753\n",
"hello world: 754\n",
"hello world: 755\n",
"hello world: 756\n",
"hello world: 757\n",
"hello world: 758\n",
"hello world: 759\n",
"hello world: 760\n",
"hello world: 761\n",
"hello world: 762\n",
"hello world: 763\n",
"hello world: 764\n",
"hello world: 765\n",
"hello world: 766\n",
"hello world: 767\n",
"hello world: 768\n",
"hello world: 769\n",
"hello world: 770\n",
"hello world: 771\n",
"hello world: 772\n",
"hello world: 773\n",
"hello world: 774\n",
"hello world: 775\n",
"hello world: 776\n",
"hello world: 777\n",
"hello world: 778\n",
"hello world: 779\n",
"hello world: 780\n",
"hello world: 781\n",
"hello world: 782\n",
"hello world: 783\n",
"hello world: 784\n",
"hello world: 785\n",
"hello world: 786\n",
"hello world: 787\n",
"hello world: 788\n",
"hello world: 789\n",
"hello world: 790\n",
"hello world: 791\n",
"hello world: 792\n",
"hello world: 793\n",
"hello world: 794\n",
"hello world: 795\n",
"hello world: 796\n",
"hello world: 797\n",
"hello world: 798\n",
"hello world: 799\n",
"hello world: 800\n",
"hello world: 801\n",
"hello world: 802\n",
"hello world: 803\n",
"hello world: 804\n",
"hello world: 805\n",
"hello world: 806\n",
"hello world: 807\n",
"hello world: 808\n",
"hello world: 809\n",
"hello world: 810\n",
"hello world: 811\n",
"hello world: 812\n",
"hello world: 813\n",
"hello world: 814\n",
"hello world: 815\n",
"hello world: 816\n",
"hello world: 817\n",
"hello world: 818\n",
"hello world: 819\n",
"hello world: 820\n",
"hello world: 821\n",
"hello world: 822\n",
"hello world: 823\n",
"hello world: 824\n",
"hello world: 825\n",
"hello world: 826\n",
"hello world: 827\n",
"hello world: 828\n",
"hello world: 829\n",
"hello world: 830\n",
"hello world: 831\n",
"hello world: 832\n",
"hello world: 833\n",
"hello world: 834\n",
"hello world: 835\n",
"hello world: 836\n",
"hello world: 837\n",
"hello world: 838\n",
"hello world: 839\n",
"hello world: 840\n",
"hello world: 841\n",
"hello world: 842\n",
"hello world: 843\n",
"hello world: 844\n",
"hello world: 845\n",
"hello world: 846\n",
"hello world: 847\n",
"hello world: 848\n",
"hello world: 849\n",
"hello world: 850\n",
"hello world: 851\n",
"hello world: 852\n",
"hello world: 853\n",
"hello world: 854\n",
"hello world: 855\n",
"hello world: 856\n",
"hello world: 857\n",
"hello world: 858\n",
"hello world: 859\n",
"hello world: 860\n",
"hello world: 861\n",
"hello world: 862\n",
"hello world: 863\n",
"hello world: 864\n",
"hello world: 865\n",
"hello world: 866\n",
"hello world: 867\n",
"hello world: 868\n",
"hello world: 869\n",
"hello world: 870\n",
"hello world: 871\n",
"hello world: 872\n",
"hello world: 873\n",
"hello world: 874\n",
"hello world: 875\n",
"hello world: 876\n",
"hello world: 877\n",
"hello world: 878\n",
"hello world: 879\n",
"hello world: 880\n",
"hello world: 881\n",
"hello world: 882\n",
"hello world: 883\n",
"hello world: 884\n",
"hello world: 885\n",
"hello world: 886\n",
"hello world: 887\n",
"hello world: 888\n",
"hello world: 889\n",
"hello world: 890\n",
"hello world: 891\n",
"hello world: 892\n",
"hello world: 893\n",
"hello world: 894\n",
"hello world: 895\n",
"hello world: 896\n",
"hello world: 897\n",
"hello world: 898\n",
"hello world: 899\n",
"hello world: 900\n",
"hello world: 901\n",
"hello world: 902\n",
"hello world: 903\n",
"hello world: 904\n",
"hello world: 905\n",
"hello world: 906\n",
"hello world: 907\n",
"hello world: 908\n",
"hello world: 909\n",
"hello world: 910\n",
"hello world: 911\n",
"hello world: 912\n",
"hello world: 913\n",
"hello world: 914\n",
"hello world: 915\n",
"hello world: 916\n",
"hello world: 917\n",
"hello world: 918\n",
"hello world: 919\n",
"hello world: 920\n",
"hello world: 921\n",
"hello world: 922\n",
"hello world: 923\n",
"hello world: 924\n",
"hello world: 925\n",
"hello world: 926\n",
"hello world: 927\n",
"hello world: 928\n",
"hello world: 929\n",
"hello world: 930\n",
"hello world: 931\n",
"hello world: 932\n",
"hello world: 933\n",
"hello world: 934\n",
"hello world: 935\n",
"hello world: 936\n",
"hello world: 937\n",
"hello world: 938\n",
"hello world: 939\n",
"hello world: 940\n",
"hello world: 941\n",
"hello world: 942\n",
"hello world: 943\n",
"hello world: 944\n",
"hello world: 945\n",
"hello world: 946\n",
"hello world: 947\n",
"hello world: 948\n",
"hello world: 949\n",
"hello world: 950\n",
"hello world: 951\n",
"hello world: 952\n",
"hello world: 953\n",
"hello world: 954\n",
"hello world: 955\n",
"hello world: 956\n",
"hello world: 957\n",
"hello world: 958\n",
"hello world: 959\n",
"hello world: 960\n",
"hello world: 961\n",
"hello world: 962\n",
"hello world: 963\n",
"hello world: 964\n",
"hello world: 965\n",
"hello world: 966\n",
"hello world: 967\n",
"hello world: 968\n",
"hello world: 969\n",
"hello world: 970\n",
"hello world: 971\n",
"hello world: 972\n",
"hello world: 973\n",
"hello world: 974\n",
"hello world: 975\n",
"hello world: 976\n",
"hello world: 977\n",
"hello world: 978\n",
"hello world: 979\n",
"hello world: 980\n",
"hello world: 981\n",
"hello world: 982\n",
"hello world: 983\n",
"hello world: 984\n",
"hello world: 985\n",
"hello world: 986\n",
"hello world: 987\n",
"hello world: 988\n",
"hello world: 989\n",
"hello world: 990\n",
"hello world: 991\n",
"hello world: 992\n",
"hello world: 993\n",
"hello world: 994\n",
"hello world: 995\n",
"hello world: 996\n",
"hello world: 997\n",
"hello world: 998\n",
"hello world: 999\n",
"\n"
]
}
],
"source": [
"g = open('newfile.txt', 'r')\n",
"print g.read()\n",
"g.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"所以,写文件时候要确保文件被正确关闭。"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os\n",
"os.remove('newfile.txt')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.01-numpy-overview.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Numpy 简介"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 导入numpy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Numpy**是**Python**的一个很重要的第三方库,很多其他科学计算的第三方库都是以**Numpy**为基础建立的。\n",
"\n",
"**Numpy**的一个重要特性是它的数组计算。\n",
"\n",
"在使用**Numpy**之前,我们需要导入`numpy`包:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from numpy import *"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用前一定要先导入 Numpy 包,导入的方法有以下几种:\n",
"\n",
"```python \n",
" import numpy\n",
" import numpy as np\n",
" from numpy import *\n",
" from numpy import array, sin\n",
"```\n",
"\n",
"事实上,在**ipython**中可以使用magic命令来快速导入**Numpy**的内容。"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Using matplotlib backend: Qt4Agg\n",
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 数组上的数学操作"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"假如我们想将列表中的每个元素增加`1`,但列表不支持这样的操作(报错):"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypeError",
"evalue": "can only concatenate list (not \"int\") to list",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0ma\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m3\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m4\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0ma\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m: can only concatenate list (not \"int\") to list"
]
}
],
"source": [
"a = [1, 2, 3, 4]\n",
"a + 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"转成 `array` :"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 2, 3, 4])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array(a)\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`array` 数组支持每个元素加 `1` 这样的操作:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([2, 3, 4, 5])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a + 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"与另一个 `array` 相加,得到对应元素相加的结果:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([3, 5, 7, 9])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b = array([2, 3, 4, 5])\n",
"a + b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对应元素相乘:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 2, 6, 12, 20])"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a * b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对应元素乘方:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1, 8, 81, 1024])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a ** b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 提取数组中的元素"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"提取第一个元素:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"提取前两个元素:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 2])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[:2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最后两个元素:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([3, 4])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[-2:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"将它们相加:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([4, 6])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[:2] + a[-2:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 修改数组形状"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看 `array` 的形状:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(4L,)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"修改 `array` 的形状:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[1, 2],\n",
" [3, 4]])"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.shape = 2,2\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 多维数组"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`a` 现在变成了一个二维的数组,可以进行加法:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([[2, 4],\n",
" [6, 8]])"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a + a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"乘法仍然是对应元素的乘积,并不是按照矩阵乘法来计算:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1, 4],\n",
" [ 9, 16]])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a * a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 画图"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"linspace 用来生成一组等间隔的数据:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0. , 0.314, 0.628, 0.942, 1.257, 1.571, 1.885, 2.199,\n",
" 2.513, 2.827, 3.142, 3.456, 3.77 , 4.084, 4.398, 4.712,\n",
" 5.027, 5.341, 5.655, 5.969, 6.283])"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = linspace(0, 2*pi, 21)\n",
"%precision 3\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"三角函数:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.000e+00, 3.090e-01, 5.878e-01, 8.090e-01, 9.511e-01,\n",
" 1.000e+00, 9.511e-01, 8.090e-01, 5.878e-01, 3.090e-01,\n",
" 1.225e-16, -3.090e-01, -5.878e-01, -8.090e-01, -9.511e-01,\n",
" -1.000e+00, -9.511e-01, -8.090e-01, -5.878e-01, -3.090e-01,\n",
" -2.449e-16])"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b = sin(a)\n",
"b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"画出图像:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nHzC+mVy4trE1AAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"plot(a, b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 从数组中选择元素"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"假设我们想选取数组b中所有非负的部分,首先可以利用 `b` 产生一组布尔值:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ True, True, True, True, True, True, True, True, True,\n",
" True, True, False, False, False, False, False, False, False,\n",
" False, False, False], dtype=bool)"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b >= 0"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"mask = b >= 0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"画出所有对应的非负值对应的点:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(a[mask], b[mask], 'ro')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.02-matplotlib-basics.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Matplotlib 基础"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在使用**Numpy**之前,需要了解一些画图的基础。\n",
"\n",
"**Matplotlib**是一个类似**Matlab**的工具包,主页地址为\n",
"\n",
"http://matplotlib.org \n",
"\n",
"导入 `matplotlib` 和 `numpy`:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Using matplotlib backend: Qt4Agg\n",
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## plot 二维图"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```python\n",
"plot(y)\n",
"plot(x, y)\n",
"plot(x, y, format_string)\n",
"```\n",
"\n",
"只给定 `y` 值,默认以下标为 `x` 轴:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"x = linspace(0, 2 * pi, 50)\n",
"plot(sin(x))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"给定 `x` 和 `y` 值:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(x, sin(x))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"多条数据线:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[,\n",
" ]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nKBQKN+f/AQEk9vM2SbiHAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(x, sin(x),\n",
" x, sin(2 * x))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用字符串,给定线条参数:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(x, sin(x), 'r-^')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"多线条:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[,\n",
" ]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nYL9KLktJIGiCpH9/HaevDr9iZZWqlppySN++eDZuJO3QIa2nVIFffoG334YhDYzNkeyGdvR2JCEB\nPv8c9BcxMDt2QGEhdOxYqaqlazearwLPokWkiGg9pQC89BJcfDE0WL3MltpJ2tHbkVatDMH+TZvM\ntsSalOjPK1Vp6ZtrN5qvBClRSfUvHrRK6q8UF8PTT0Pqtbvh55+hWzezTaox2tHbFV1PXzllNhqp\nTNXStRvNV4JWSa2cjz6CNm2g1wl/o2KM/dymTsbalZKE7F+0MmNFZNky1P33A+VVLX/+OZbVqw1V\nS52ILU+pSuqRI7B+PfTrpzdR95Oe7t+/erk94/Ogyyvty5IlMG6cUS+uKUUKC0lt0IC0PXtQAcTM\nhg+HK66AMZV2c7icoiJDBC4/H5o2Ndsa08jKyiM93cvPP9dhzZoi3n47iT898xCMHw8jRphtXjmC\nKa+03z2IxqB3b2PldeyY2ZZYCs9TT4HPh3fRooDPjx0LTz2l89iVUqcOnH++kex3KSUqlV7vw3z5\n5VROnHiYu+/MpvCzpbZMxIJ29PalQQM46yxYZZ3GDbMRETzPPkuaSKWJxKQko9M/z/rKsubRv7+r\n8z+GSmX5kty6313LHqln22507ejtjNa9KYcnI4OU/PwqE4kxMcaqPj09+vbZBpc7+kAluf1ZxrrG\nAdXVbYF29HZGN06VUloeWGSUU1ZVHviXv0BODmzbFl0bbUPJAsKl8a1AJbkJLGdT87YmWBMetKO3\nM3pFX0pNygMbNYLrroNnnommhTaiTRto3Ni1fRpjxybRqlX5ktzB9d6n598uNcmi0NFVN3bG54MW\nLWDjRqOJysXcO2YMcStWoL7/Hs47DzBW+cc7d+bR2bNPun7rVujbF7ZvNzbu0lTg6quNEiWXlu+e\ndVYe9esv4JRTYmla5xhzF6dT5+ABqGc9SWItauZ0YmKMeudly1AjK27V6y4enT0bpkwxpA+mT6/2\n+k6d4He/g//+F265JQoG2o2SOL0LHf3nn0NBwWC+/nowsbEYcb778izp5INFh25sjvTrR+rkybpV\nHWDpUrjggqAvT0jI4667JjFkyFSSkyfZYpPnqOHihOxTT8EddxjbUQK2bpQqQa/obY6nqAjWrcP7\n7rvu7mD0+YylWJBfyKysPF56ycORI9NKSy21fHEZevWCb76BI0dcFdvauRPmz4dnny1zctkyuOoq\n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\nDuf/AbP7N0Qt3HMbAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(x, sin(x), 'b-o',\n",
" x, sin(2 * x), 'r-^')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"更多参数设置,请查阅帮助。事实上,字符串使用的格式与**Matlab**相同。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## scatter 散点图"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```python\n",
"scatter(x, y)\n",
"scatter(x, y, size)\n",
"scatter(x, y, size, color)\n",
"```\n",
"\n",
"假设我们想画二维散点图:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nbKpvNy2mHwAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(x, sin(x), 'bo')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以使用 `scatter` 达到同样的效果:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"scatter(x, sin(x))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"事实上,scatter函数与**Matlab**的用法相同,还可以指定它的大小,颜色等参数:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nDQ0H4P8DJu8dXcDMQQAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = rand(200)\n",
"y = rand(200)\n",
"size = rand(200) * 30\n",
"color = rand(200)\n",
"scatter(x, y, size, color)\n",
"# 显示颜色条\n",
"colorbar()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 多图"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用figure()命令产生新的图像:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEACAYAAABfxaZOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xuc1eP6//HX1ZSz0EYktkOi2CqRyP429nYYpHggcrYj\nFJItOqlsHUyFSE6blKRy2B2o77SLhhwqpw6kdDBUyK+vw1A5TN2/P+6J2e2ZaWad7rXW5/18POYx\na635zPpcfZqurrk/933d5pxDRESioUboAEREJHWU9EVEIkRJX0QkQpT0RUQiRElfRCRClPRFRCIk\n7qRvZqPMbJ2ZLa7kmAfNbLmZLTSzZvGeU0REYpOISv8pIK+iL5rZWUAD59zhQCfgkQScU0REYhB3\n0nfOzQG+reSQtsCY0mPnAXuaWd14zysiItWXijH9A4DVZZ6vAeqn4LwiIrKNVN3ItW2eq/eDiEgA\nNVNwjrXAgWWe1y997T+Ymf4jEBGJgXNu28K6Qqmo9KcCVwCYWUvgO+fcuvIOdM7pwzn69ev32+MP\nP3RcdpmjTh1Ht26OyZMda9dW7/02b3bMmePo0sVRt67j2GMd+fmOoqLwf9bqXIuof+ha6FqU91Fd\niZiyOR54CzjCzFab2d/M7Dozu640kU8HVpnZCuAxoHO854yC+fPh3HPhr3+Fo46CVavgvvugXTuo\nV69671WjBpx8Mjz0EKxdC0OHwooV0Lw53HorFBcn588gIukn7uEd51yHKhxzY7zniYrXX4enn4an\nnoLu3eHZZ2GXXRL3/jk58Je/+I+BA+GOO6BxY7j3XmjfHqzKvySKSCbSitw08csvcNttcOml0L59\nLsuXw403Jjbhb2uffWDUKJg4EQYNgtNPh2XLkne+WOTm5oYOIW3oWvxO1yJ2FsuYUDKYmUuXWFJt\n1Sq4+GKoWxdGj4Y//CH1MZSU+OGfAQPguuugd+/k/ocjIolhZrg0u5ErlXjuOTjhBLjkEpg6NUzC\nB6hZE265BRYtgpUr4bjjoKgoTCwikjyq9APZtAm6dYNZs2DCBJ9k08mIETB4MEyeDC1ahI5GRCqi\nSj8DLFvmq/viYnj//fRL+AA33QSPPgpnn+0Tv4hkByX9FFu8GE45xd+kHTcOatcOHVHF2raFggLo\n0gWGD4cI/SImkrU0vJNCCxdCXp5PoBddFDqaqvvsM1/xn3KKjz0nJ3REIrJVdYd3lPRT5IMP4Mwz\n/Vj5hReGjqb6vv8eLrgAdtrJ34PYddfQEYkIaEw/Lb33nk/4Dz+cmQkfYI89YPp02GsvOO88v65A\nRDKPKv0ke+cdaNMGHn/ct1DIdCUlcP75sNtuMHasb/EgIuGo0k8j8+b5hP/EE9mR8MHP558wwY/z\nd+8eOhoRqS4l/SRZsMDPfnnqKTjnnNDRJNbOO/uFZAUFMGxY6GhEpDpS0U8/ctat85X9Qw/BWWeF\njiY56tSBGTOgVSvfPuLyy0NHJCJVoaSfYL/84se8r7wyc2/aVlX9+r7aP+UU37wtLy90RCKyPbqR\nm0DOQadOsH49vPhidG5yvvWW/83m5Zf9SmMRSR3dyA1o5EiYO9f3w49Kwgc46STforldO3+DV0TS\nlyr9BHn1Vd8p86234NBDQ0cTxtCh/jec11+HHXYIHY1INGhFbgArV/pqd/x4vyNVVG3Z4mcsHXmk\nZvWIpIqGd1Lshx/8sEbfvtFO+OCHtMaMgeef91M6RST9qNKPg3O+JcG++8Jjj2l/2a3eftv/Rzh/\nPhx8cOhoRLKbKv0UevRRWLPGz8dXwv/diSfC7bf7LSDVo0ckvajSj9Enn/hx/Dfe8GPY8p+2bPHV\nfsOGcO+9oaMRyV6q9FPg11/hssvgrruU8CtSo4bf5P2FF2DKlNDRiMhWSvoxGDjQtyHo3Dl0JOnt\nD3/wzdk6ddIm6yLpQsM71TRvnp+W+MEHUK9e6Ggyw733+vn7c+Zo1y2RRNPwThJt2OAbi40cqYRf\nHd26Qa1aftcwEQlLlX413HCDT/xPPx06ksyzfLmf1TN/fnRXLIskg1bkJsn06X4Mf+FCv3WgVN/Q\nob4r56xZmuIqkiga3kmC9evh2mv9alMl/Nh16wbFxfDkk6EjEYkuVfpVcPHFvne8+snEb/Fi365i\nwQI44IDQ0YhkPg3vJNiMGX5Y58MP/TaBEr/+/eH99/38fQ3ziMRHwzsJtGkTdOni2ywo4SdOr17w\n6ad+Dr+IpJYq/Ur06wcffeRXlUpizZ/v1zssXuy3WhSR2Gh4J0G29tZZsMCP50vi3XYbfPEFPPts\n6EhEMpeSfgI4B6edBmef7WecSHJs3AhNmsD990ObNqGjEclMGtNPgAkT/DTNm24KHUl222UXeOQR\n6NoVfvopdDQi0aBKfxvffQeNG8O//gUtW4aOJhrOOw+OP97f4BWR6tHwTpxuvNG3Tn7ssdCRRMeq\nVdCihe6fiMRCST8O774L55zjZ+zUqRM0lMi5806f/MeNCx2JSGZR0o/R5s1wwglw881wxRXBwois\nDRugUSMYPx5atQodjUjm0I3cGD3xBOy6q2+dLKm3664wZIi/eb55c+hoRLKXKn18E7AjjvCdNJs1\nCxKC4KfKtm7tt6Ls1Cl0NCKZQcM7MejVyy8SGj06yOmljAULIC8PPv4Y9tordDQi6U9Jv5o+/9xX\n94sWqetjurj+ethxR3jggdCRiKQ/Jf1quuwyv5PTP/6R8lNLBdav92slZs+Go44KHY1IelPSr4Z3\n3oF27Xyfnd12S+mpZTtGjPCtl2fOVPtlkcpo9k4VOQd//7uv8JXw088NN8BXX8HLL4eORCS7xJ30\nzSzPzJaa2XIzu6Ocr+ea2fdm9kHpR594z5kIkyb5lgtXXx06EilPzZoweDD07KkpnCKJFFfSN7Mc\n4CEgD2gMdDCzRuUc+ppzrlnpx4B4zpkIv/wCd9zhtz/MyQkdjVSkTRs/g+eZZ0JHIpI94q30WwAr\nnHNFzrlfgQlAu3KOS6tR2YcfhgYN4PTTQ0cilTGD/HzfokFdOEUSI96kfwCwuszzNaWvleWAk8xs\noZlNN7PGcZ4zLt98A4MGaZPzTHHSSXDssTByZOhIRLJDzTi/vyrTbd4HDnTObTSzM4HJQMPyDuzf\nv/9vj3Nzc8nNzY0zvP82YIBv5aupgJlj0CDIzYWOHWHPPUNHIxJWYWEhhYWFMX9/XFM2zawl0N85\nl1f6vCewxTmXX8n3fAo0d859s83rSZ+yWVQEzZvDkiVQt25STyUJ1rGj/zsbNCh0JCLpJaXz9M2s\nJrAM+CvwBTAf6OCc+7jMMXWBr51zzsxaAM855w4u572SnvSvvtr3a7/77qSeRpJg9Wpo2tRvpF6v\nXuhoRNJHyhdnlQ7ZDAdygCedc4PN7DoA59xjZtYFuAEoATYCtzrn5pbzPklN+kuXwp//DMuXa4gg\nU91+O3z/vTa4ESlLK3IrcNFFvlLs2TNpp5Ak++Yb3w31jTf8ZxFR0i/XggVw5pmwYoXv2y6ZKz/f\nt8944YXQkYikByX9cpxzDpx6KnTtmpS3lxTatAkaNvRJ/4QTQkcjEp6S/jbmzoX27X1TtZ12Svjb\nSwBPPOH30p09O3QkIuGp4do2evf2KzqV8LPHVVfB2rVK+iKxyOqk/+qrfpOUq64KHYkkUs2a/j/y\nfv18t1QRqbqsTfrO+Sr/rrugVq3Q0UiidegA69bBK6+EjkQks2Rt0p82DX78ES6+OHQkkgw1a/pK\nX9W+SPVkZdLfsgX69PErb2tk5Z9QwK+9+PZb+Pe/Q0cikjmyMiW+8ALssIPfClGyV04O9O2ral+k\nOrIu6W/eDP37+ypfe6tmvwsv9MN4BQWhIxHJDFmX9F98EfbYQxukREVOjq/0+/ZVtS9SFVmV9Lds\n8Rud9+2rKj9Kzj8ffv7Z37wXkcplVdKfNAl23hny8kJHIqlUo4Yf0tPYvsj2ZU3S31rl9+unKj+K\nzj3X38+ZOjV0JCLpLWuS/tSpfnz37LNDRyIhbK32+/dXtS9SmaxI+s5pLF/8FF0zP8wnIuXLiqQ/\nbZof3tG8/Ggz+326rqp9kfJlfNJ3zvfXufNOVfkCbdr4AmD69NCRiKSnjE/6BQV+Y43zzgsdiaSD\nGjV8o70BA1Tti5Qno5N+2SpfPXZkq/PP9z151G9f5L9ldKqcOROKi+GCC0JHIukkJwd69fLVvoj8\np4xN+lur/D59/D9ykbI6dICiInjzzdCRiKSXjE36s2fD+vW+va7ItmrVgh49YODA0JGIpJeMTfoD\nB0LPnqrypWJXXgmLF8N774WORCR9ZGTSnzsXVqyASy8NHYmksx13hO7dVe2LlGUuTea1mZmraizt\n2vnWyV26JDkoyXgbN8Khh8KsWXD00aGjEUk8M8M5V+VVShmX9Bcv9gl/1SrfUVNke/LzYeFCePbZ\n0JGIJF7WJ/1LLoGmTeH221MQlGSF4mI47DA/k6dhw9DRiCRWVif9FSugZUtf5deunaLAJCvcdRd8\n9hmMGhU6EpHEyuqk36kT7Lef76gpUh3ffAOHH+5n8hx8cOhoRBIna5P+2rXwpz/BJ5/A3nunMDDJ\nGj16wIYNMGJE6EhEEidrk/6tt/rP992XooAk63z1FTRuDEuXwr77ho5GJDGyMumvX+9vwC1eDAcc\nkOLAJKvccAPUqaO5+5I9sjLp9+3rq7THH09xUJJ1Vq2CFi00GUCyR9Yl/eJiv7hm7lxo0CBAYJJ1\nLr0UjjkG7rgjdCQi8cu6pD9kiF9YM25cgKAkK2mBn2STrEr6mzb5Kv/f//Yzd0QS5Zxz4Oyz4frr\nQ0ciEp/qJv20brg2ejQcd5wSviRez57+t8iSktCRiKRW2ib9khIYOtT/4xRJtJNOggMPhOeeCx2J\nSGqlbdJ//nmoX9//4xRJhh494J57tIG6REtaJn3n/D9GVfmSTHl5fhOeadNCRyKSOmmZ9AsK/Oe8\nvLBxSHYz89X+4MGq9iU60jLpDx7s/zFale9Hi8Tmggvg66/hjTdCRyKSGmmX9N98E9asgQsvDB2J\nREFOjt+bYfDg0JGIpEbazdNv2xbOPNP3SBFJhZ9/9utBpk+HJk1CRyNSPRm9OGvxYsepp8Knn2ql\npKTWsGHw/vvaUlEyT0Yn/csvdzRqpFk7knpbezzNn+8/i2SKlK/INbM8M1tqZsvNrNwWVmb2YOnX\nF5pZs4rea9o06Nw53ohEqq92bd+SYdiw0JGIJFdcSd/McoCHgDygMdDBzBptc8xZQAPn3OFAJ+CR\nit7v2mthjz3iiUgkdjffDBMmwLp1oSMRSZ54K/0WwArnXJFz7ldgAtBum2PaAmMAnHPzgD3NrG55\nb9a1a5zRiMRh332hQwd48MHQkYgkT7xJ/wBgdZnna0pf294x9ct7s/33jzMakTjddhs89pgf4xdJ\nB++843cPTJSacX5/Ve8Cb3uTodzv69+//2+Pc3Nzyc3NjSkokVgdcgiccYZP/N27h45Goq6kBC6+\nGJ5+Gvbe279WWFhIYWFhzO8Z1+wdM2sJ9HfO5ZU+7wlscc7llznmUaDQOTeh9PlSoLVzbt0271Xp\nxugiqbJokW8BsmoV7LRT6GgkyiZMgJEjYc6cio9J9eydd4HDzexgM9sBuAiYus0xU4ErSoNrCXy3\nbcIXSSfHHAPNmsHYsaEjkShLVuPJuJK+c64EuBGYASwBJjrnPjaz68zsutJjpgOrzGwF8BigSZmS\n9nr08JusbN4cOhKJqoIC2LLFdyhIpLRanJUusYg4B61aQbdu6gMlYbRuDdddB5dcUvlxWbVdokgo\nW9su5+er7bKk3ltvweefQ/v2iX9vJX2RCrRpA5s2wSuvhI5EoiY/388eqxnv/MpyaHhHpBJPPw1j\nxijxS+p89BH89a9Vbzyp4R2RBOrQAVas8I3YRFJhyBDfEiRZnYZV6Ytsx4gR8OqrMGlS6Egk2332\nGRx7LKxcCXvuWbXvyejWyukSi0hZGzf6lbqFhdCo0XYPF4lZ165+QWB+/vaP3UpJXyQJBg6E5cth\n9OjQkUi2Wr8eGjb0Y/rV6UOmpC+SBN99B4cdBh98AAcdFDoayUb9+sFXX/m+T9WhpC+SJLffDj/9\npNbLkng//OB3bHv7bWjQoHrfq6QvkiRffglHHQXLlsE++4SORrLJfffBvHkwcWL1v1dJXySJrr/e\nt7gdMCB0JJItfv7ZV/nTpkHTptX/fiV9kSRauRJOOMG3Xa5dO3Q0kg0efxymTPFJPxZanCWSRIcd\nBqefDo8+GjoSyQYlJX56Zq9eqTunkr5INd1xBwwf7m/qisRj4kSoX993dE0VJX2RamrSxG+yMmZM\n6Egkk23ZAoMHp7bKByV9kZj07Ol7pJSUhI5EMtVLL8GOO/rhwlRS0heJwcknQ7168NxzoSORTOQc\nDBrkq3yr8i3YxFDSF4lR797+H+6WLaEjkUzz6qtQXAznnZf6cyvpi8TojDN8c6wpU0JHIplm4EA/\nRFgjQAZW0heJkRn06eMXammJiVTV22/7dR4dOoQ5v5K+SBzatoVffoGCgtCRSKYYPNj3capVK8z5\ntSJXJE4TJvgmbG++mfqbcpJZFi3yw4KrViVuZyytyBVJsQsv9L3QCwtDRyLp7p57oFu35G2FWBWq\n9EUSYPRoGDtWG6hLxZYvhxNPTHzfJlX6IgFceqlvxvbWW6EjkXQ1cCDcdFP4Rn2q9EUS5NFH/SrL\nWLslSvZauRJatIAVK2CvvRL73mqtLBLITz/5LpwvvQTHHhs6Gkkn11zjV3D/4x+Jf28lfZGAhg+H\nOXPgxRdDRyLpoqgImjf3Y/p16iT+/ZX0RQLasMHvgvTqq35rRZHrrvO7rQ0cmJz3V9IXCeyee2Dx\nYhg3LnQkEtrnn/stED/5xCf+ZFDSFwmsuNiP7b/xBhxxROhoJKQuXWC33fzuWMmipC+SBgYMgKVL\n4ZlnQkcioaxdC3/6k/852Hff5J1HSV8kDRQXQ4MG8Npr0KhR6GgkhJtvhh12gGHDknseJX2RNDF4\nsO+1Mn586Egk1b780t/IX7IE9tsvuedS0hdJEz/84Kt9zeSJnltv9e22778/+edS0hdJI0OGwHvv\nwcSJoSORVFm3zg/pffihX5CVbEr6ImlkwwY/k2fmTH9TT7Jf9+7w88++3XYqKOmLpJl77/W7Jb3w\nQuhIJNm+/BKOPhoWLoT69VNzTiV9kTSzcaOv9gsKoEmT0NFIMt10k98R6777UndOJX2RNHT//fD6\n6zBpUuhIJFk++8w32vv44+TOy9+Wkr5IGtq0yc/kefllaNYsdDSSDB07wv77+4V5qaSkL5KmHnzQ\n76w1ZUroSCTRPvkEWrXynTT33DO151bSF0lTP/3kq/3Jk+G440JHI4nUoYOfndWrV+rPraQvksZG\njvQ7a02fHjoSSZRFi+D00/2uWLvtlvrza49ckTR2zTX+Rt9rr4WORBLlzjuhR48wCT8WqvRFUmzc\nOBgxws/dtyrXZ5KO5s2DCy7wY/k77RQmBlX6ImmuQwc/vj95cuhIJF69e/tKP1TCj0XMlb6Z1QEm\nAn8EioD2zrnvyjmuCCgGNgO/OudaVPB+qvQlMgoK4JZbfH+WmjVDRyOxmD0brr3WD9fVqhUujlRW\n+j2Amc65hsArpc/L44Bc51yzihK+SNSccYZvxvXUU6EjkVg456v8/v3DJvxYxJP02wJjSh+PAc6t\n5FiNXIqUYeb30r3rLt+mQTLL9Onw/fd+qC7TxJP06zrn1pU+XgfUreA4B8wys3fN7No4zieSVVq0\ngBNPTF03RkmMkhK4/XYYNAhyckJHU32Vjiaa2UygvH1fepd94pxzZlbRgHwr59yXZrYPMNPMljrn\n5pR3YP/+/X97nJubS25ubmXhiWS8gQP9Ss5OnaBOndDRSFU8+STssw+0bRvm/IWFhRQWFsb8/fHc\nyF2KH6v/ysz2B2Y7547czvf0A350zt1bztd0I1ci6frrYffdYejQ0JHI9vzwAzRs6HsoNW8eOhov\nlTdypwJXlj6+EvivCWhmtouZ7V76eFfgdGBxHOcUyTp9+8KoUbB6dehIZHvy8+G009In4cci3imb\nzwEHUWbKppnVA/7pnDvbzA4F/lX6LTWBcc65wRW8nyp9iazevf0GHKNGhY5EKrJ6NTRtCgsWwIEH\nho7md+q9I5KBvv8eDj/cb6J+9NGho5HyXHEFHHRQ6lsnb4+SvkiGeuABPxWwoEDtGdLNe+9Bmza+\nhfLuu4eO5j+pDYNIhurc2Q8hTJ0aOhIpyzn4+9/9mop0S/ixUNIXSRO1avlq/9ZbfW8eSQ9Tp8L6\n9fC3v4WOJDGU9EXSyGmnwTHHpHZjbanYr7/6hVjDhmVPjySN6YukmVWr/GrdhQvhgANCRxNtI0b4\nOfkzZoSOpGK6kSuSBfr0gaIieOaZ0JFE17ffwpFHwqxZfivEdKWkL5IFNmzwCWfCBN+mQVKvc2f/\n+eGHw8axPUr6Illi/Hg/ljx/fmY29spk8+fDuefCkiWw556ho6mcpmyKZImLL4ZddtEq3VQrKfH9\nkIYOTf+EHwtV+iJpbMECyMuDpUuzMwGlowce8NM0Z83KjEVyGt4RyTLXX+/3YB0+PHQk2W/tWmjS\nBN54w99TyQRK+iJZZv16aNwYZs70CUmSp317OOIIuPvu0JFUncb0RbLM3nv7lr5/+5sfb5bkKCjw\nPXZ69QodSXIp6YtkgKuu8sl/2LDQkWSnTZugSxcYORJ23jl0NMml4R2RDFFUBMcf78ebjzgidDTZ\npW9f+PhjeP750JFUn8b0RbLYQw/BxInw2mtQQ7+nJ8SyZX4BXKa2vdCYvkgW69zZt/pN91WimWLL\nFrjhBt/2IhMTfixU6YtkmGXL4OST4Z134OCDQ0eT2R580K98njMnc7toanhHJALuucdvrThjRmYs\nIEpHS5bA//wPzJ0LDRqEjiZ2Gt4RiYDbboP/+z8YPTp0JJnpl1/g8sth0KDMTvixUKUvkqEWLvSb\nrixcCPvvHzqazNK7Nyxa5NstZPpvShreEYmQO+/0SX/KlMxPXqny5ptwwQW+r1HduqGjiZ+Gd0Qi\npE8f+OILf0NStu+HH+CKK+CRR7Ij4cdClb5Ihlu1Clq29Nv6tWgROpr0ds01fsrrk0+GjiRxqlvp\nZ+gkJRHZ6tBDfeV60UXw/vuw116hI0pPU6b4GU8LF4aOJCxV+iJZ4uabYfVq+Ne/NL6/rXXroGlT\neOGF7Nt+UmP6IhE1dCisWaPx/W2VlMBll8HVV2dfwo+FKn2RLKLx/f/WrZtfiDVtWuauuq2MKn2R\nCDv0UHj0UT++/+23oaMJ76mnfLKfMCE7E34sVOmLZKGuXeGzz2DSpOiO77/9NrRr5zuSNmoUOprk\nUaUvIgwZ4vd7HTIkdCRhrFnjF2CNHp3dCT8W+oVHJAvtuKOv8lu1gnr1fJ+ZqNi0Cc491/+2c9ZZ\noaNJPxreEcliS5bAX/7iK968vNDRJJ9zcOmlfoOZsWOjMbSl4R0R+U3jxn7e/uWXw/z5oaNJvvx8\nWLEC/vnPaCT8WCjpi2S5k06CUaP8Tc1PPgkdTfJMmOC3k5w0Kfs3N4+Hkr5IBJxzDgwYAGec4Ru0\nZZtx4+DWW6GgIDrbHsZKN3JFIqJjR/jqKzjzTHj9ddhjj9ARJcbYsdCjB8ya5YezpHK6kSsSIc7B\nTTfBhx/C//5v5g+DjB7t20vPmgVHHhk6mjB0I1dEKmQGDzwABx3kZ/V8/XXoiGL35JN+E5lXXolu\nwo+Fkr5IxOTkwJgxcOqpcOKJsHRp6Iiq7/HH4a67fKvkI44IHU1m0Zi+SASZwd13wyGHQOvW8Nxz\n/nMmeOQRuOcen/Cjtql5ImhMXyTiZs2CSy6B++7zLYjT1caNcMstMHs2zJjhm8uJxvRFpJpOPdVX\nzX36+Oo/HWuvJUt8q+gff4T33lPCj4eSvohw9NG+K+WUKX7j8HRpy7x1P9vWrX1f/HHjoHbt0FFl\nNiV9EQFg//19G+LddvPz3Z9+OmzVX1zs++gMH+7j6thRrRUSQUlfRH6z667+RunUqX7bxdxcP6c/\n1ebOhebNYffdfc8gLbpKnJiTvpldaGYfmdlmMzu2kuPyzGypmS03sztiPZ+IpM7xx8O8eX4HrlNO\nge7d/Xh6MjnnK/ozzvC98AcOhMcey/wFZOkmnkp/MXAe8HpFB5hZDvAQkAc0BjqYmbY02I7CwsLQ\nIaQNXYvfpfpa5ORA586+0v/6a19t//OfiR/vd87v6duqFVxzDbRvDytX+s8V0c9F7GJO+s65pc65\n7fXsawGscM4VOed+BSYA7WI9Z1ToB/p3uha/C3Ut6tb1i7nGjfMNzQ4+GNq08T1viotjf9+ffoLx\n46FJEz9z6JZb/EKxjh39JjCV0c9F7JK9OOsAYHWZ52uAE5J8ThFJgj//2X8UF/sx/4kToUsXP+Xz\noovgqKOgTh3Ya6//HpL59Vf46CN45x14913/eelSPw0zP99v8KKbtKlRadI3s5nAfuV8qZdz7qUq\nvH8azvgVkXjUru0XcV12mR/qmTzZz/QpKoJvvvEfNWr45F+nDuywAyxbBn/8o79XcNxxcPXVvsLX\neH3qxb0i18xmA393zr1fztdaAv2dc3mlz3sCW5xz+eUcq/8gRERiUJ0VuYka3qnohO8Ch5vZwcAX\nwEVAh/IOrE7QIiISm3imbJ5nZquBlsA0M/vf0tfrmdk0AOdcCXAjMANYAkx0zn0cf9giIhKLtGm4\nJiIiyRd8RW6UF2+Z2SgzW2dmi8u8VsfMZprZJ2b2bzPbM2SMqWJmB5rZ7NIFfx+a2c2lr0fuepjZ\nTmY2z8wWmNkSMxtc+nrkrsVWZpZjZh+Y2UulzyN5LcysyMwWlV6L+aWvVetaBE36WrzFU/g/e1k9\ngJnOuYbAK6XPo+BXoJtz7ij8kGGX0p+FyF0P59xPwCnOuabAMcApZnYyEbwWZXTFDxFvHZqI6rVw\nQK5zrplzrkXpa9W6FqEr/Ugv3nLOzQG2Xd/YFhhT+ngMcG5KgwrEOfeVc25B6eMfgY/x6zyiej02\nlj7cAchmewrQAAACEElEQVTB/5xE8lqYWX3gLOAJfp80EslrUWrbSS/Vuhahk355i7cOCBRLuqjr\nnFtX+ngdUDdkMCGUzvZqBswjotfDzGqY2QL8n3m2c+4jInotgPuB7sCWMq9F9Vo4YJaZvWtm15a+\nVq1rEXq7RN1FroRzzkVt/YKZ7Qa8CHR1zv1gZZZpRul6OOe2AE3NbA9ghpmdss3XI3EtzKwN8LVz\n7gMzyy3vmKhci1KtnHNfmtk+wEwz+48djqtyLUJX+muBA8s8PxBf7UfZOjPbD8DM9ge+DhxPyphZ\nLXzCH+ucm1z6cmSvB4Bz7ntgGtCcaF6Lk4C2ZvYpMB74i5mNJZrXAufcl6Wf/x8wCT9EXq1rETrp\n/7Z4y8x2wC/emho4ptCmAleWPr4SmFzJsVnDfEn/JLDEOTe8zJcidz3MbO+tMzDMbGfgNOADIngt\nnHO9nHMHOucOAS4GXnXOXU4Er4WZ7WJmu5c+3hU4Hd/tuFrXIvg8fTM7ExiOv1n1pHNucNCAUsjM\nxgOtgb3xY3F9gSnAc8BBQBHQ3jn3XagYU6V0dsrrwCJ+H/brCcwnYtfDzP6EvyFXo/RjrHNuqJnV\nIWLXoiwza41v+dI2itfCzA7BV/fgh+bHOecGV/daBE/6IiKSOqGHd0REJIWU9EVEIkRJX0QkQpT0\nRUQiRElfRCRClPRFRCJESV9EJEKU9EVEIuT/A6BIi/UzzUVtAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nERV9EZEY+X9EO9oF1xEZ7QAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"t = linspace(0, 2*pi, 50)\n",
"x = sin(t)\n",
"y = cos(t)\n",
"figure()\n",
"plot(x)\n",
"figure()\n",
"plot(y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"或者使用 `subplot` 在一幅图中画多幅子图:\n",
"\n",
" subplot(row, column, index)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nHUlx9uzR6ZoxT7Ozvl1LWZkmzrSyev4BRZd3wpaFy+Ckuvxy+MIX4NprfUfSeC+8ALffrok/iMZe\nAoclK/36qae0RPjcc4d/bNI4Bx076t5NXbv6jiZ8cZZ3TEqkeZTmobRj6lCYr5/G7brXrtUT5fI+\nP7/Akn4OnH8+TJ2azvn6lvST4YQT4KSTYPly35E0XqGeb6etKUv6OXD66TrX/dVXfUfSOLt2wZIl\ntkFWUowYkc4rRqvnf5ol/RwQ0dH+tGm+I2mcefP0wJTWrX1HYgBGjoTp031H0ThVVTBjhl0t1mRJ\nPyfSmPSttJMsI0fqdhi7d/uOpOFWroSjj87mDdxiWdLPifPO0xHP/v2+I2k4S/rJcuyx8NnPpuvc\n3KlTYdQo31EkiyX9nOjUCTp0SM8Cm+3bdZSW973Pk2bUKJiSotUIU6bABRf4jiJZLOnnSJpKPNOn\na8KPY/9803AXXJCepL9rl27UZ1eLn2ZJP0dGjUpP0p88WfdKMckyeDC89hq8847vSA5v9mw9eKdN\nG9+RJIsl/RwZMQIWLEj+QdfOwaRJcOGFviMxtR1xhM55T8MsHivt1M2Sfo60aaNTIOfO9R3JoVVU\n6N89D7mvpfElLSUeS/p1s6SfM+efn/wX7OTJOsq3FZTJVLiZm+QV3m+9pZsMDhzoO5LksaSfM2PG\nwPPP+47i0CZNsnp+knXrpnvZrF7tO5L6TZumN3DTuv9/lCzp58xZZ8HWrck9QnHXLi0/nXee70hM\nfUS0bDJ1qu9I6melnfpZ0s+ZJk10tJ/ULXJnzYK+fXUVpUmuCy9M7hXj/v2W9A/Fkn4OjR0Lzz7r\nO4q6Fer5JtkuuABefFEX0SXNggXQvr1tvVAfS/o5NGqULqX/6CPfkRzMpmqmQ+vWeprZ5Mm+IznY\n00/DJZf4jiK5LOnnUJs2MGhQ8uZar1sHH3wAAwb4jsQ0xOc/DxMm+I7iYBMmaGymbpb0cyqJJZ5x\n4/TF2sR6ZSqMHat1/cpK35EcsHatlpxs4FA/e3nl1NixejM3SXOtx42Dyy7zHYVpqE6d4DOf0e2W\nk2LCBLj4Yhs4HIr9anKqWzct8yRl183Nm2HNGl3ib9LjkkuSVeKx0s7hWdLPsbFj4ZlnfEehxo/X\nqaTNmvmOxDTGJZfojdMkXDG++y6sWKGHvZj6WdLPscsvh7/+1XcUatw4jcekS58+eiThqlW+I9Fy\n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\nMI+06AAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"subplot(1, 2, 1)\n",
"plot(x)\n",
"subplot(1, 2, 2)\n",
"plot(y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 向图中添加数据"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"默认多次 `plot` 会叠加:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nir5hGIYH+R9/BjfcPdcAvwAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(x)\n",
"plot(y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以跟**Matlab**类似用 hold(False)关掉,这样新图会将原图覆盖:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nERV9EZEY+X9EO9oF1xEZ7QAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(x)\n",
"hold(False)\n",
"plot(y)\n",
"# 恢复原来设定\n",
"hold(True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 标签"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以在 `plot` 中加入 `label` ,使用 `legend` 加上图例:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(x, label='sin')\n",
"plot(y, label='cos')\n",
"legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"或者直接在 `legend`中加入:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(x)\n",
"plot(y)\n",
"legend(['sin', 'cos'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 坐标轴,标题,网格"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以设置坐标轴的标签和标题:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(x, sin(x))\n",
"xlabel('radians')\n",
"# 可以设置字体大小\n",
"ylabel('amplitude', fontsize='large')\n",
"title('Sin(x)')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"用 'grid()' 来显示网格:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(x, sin(x))\n",
"xlabel('radians')\n",
"ylabel('amplitude', fontsize='large')\n",
"title('Sin(x)')\n",
"grid()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 清除、关闭图像"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"清除已有的图像使用:\n",
"\n",
" clf()\n",
"\n",
"关闭当前图像:\n",
"\n",
" close()\n",
"\n",
"关闭所有图像:\n",
"\n",
" close('all')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## imshow 显示图片"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"灰度图片可以看成二维数组:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[162, 162, 162, ..., 170, 155, 128],\n",
" [162, 162, 162, ..., 170, 155, 128],\n",
" [162, 162, 162, ..., 170, 155, 128],\n",
" ..., \n",
" [ 43, 43, 50, ..., 104, 100, 98],\n",
" [ 44, 44, 55, ..., 104, 105, 108],\n",
" [ 44, 44, 55, ..., 104, 105, 108]])"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 导入lena图片\n",
"from scipy.misc import lena\n",
"img = lena()\n",
"img"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我们可以用 `imshow()` 来显示图片数据:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"imshow(img,\n",
" # 设置坐标范围\n",
" extent = [-25, 25, -25, 25],\n",
" # 设置colormap\n",
" cmap = cm.bone)\n",
"colorbar()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"更多参数和用法可以参阅帮助。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里 `cm` 表示 `colormap`,可以看它的种类:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[u'Accent',\n",
" u'Accent_r',\n",
" u'Blues',\n",
" u'Blues_r',\n",
" u'BrBG',\n",
" u'BrBG_r',\n",
" u'BuGn',\n",
" u'BuGn_r',\n",
" u'BuPu',\n",
" u'BuPu_r',\n",
" u'CMRmap',\n",
" u'CMRmap_r',\n",
" u'Dark2',\n",
" u'Dark2_r',\n",
" u'GnBu',\n",
" u'GnBu_r',\n",
" u'Greens',\n",
" u'Greens_r',\n",
" u'Greys',\n",
" u'Greys_r',\n",
" 'LUTSIZE',\n",
" u'OrRd',\n",
" u'OrRd_r',\n",
" u'Oranges',\n",
" u'Oranges_r',\n",
" u'PRGn',\n",
" u'PRGn_r',\n",
" u'Paired',\n",
" u'Paired_r',\n",
" u'Pastel1',\n",
" u'Pastel1_r',\n",
" u'Pastel2',\n",
" u'Pastel2_r',\n",
" u'PiYG',\n",
" u'PiYG_r',\n",
" u'PuBu',\n",
" u'PuBuGn',\n",
" u'PuBuGn_r',\n",
" u'PuBu_r',\n",
" u'PuOr',\n",
" u'PuOr_r',\n",
" u'PuRd',\n",
" u'PuRd_r',\n",
" u'Purples',\n",
" u'Purples_r',\n",
" u'RdBu',\n",
" u'RdBu_r',\n",
" u'RdGy',\n",
" u'RdGy_r',\n",
" u'RdPu',\n",
" u'RdPu_r',\n",
" u'RdYlBu',\n",
" u'RdYlBu_r',\n",
" u'RdYlGn',\n",
" u'RdYlGn_r',\n",
" u'Reds',\n",
" u'Reds_r',\n",
" 'ScalarMappable',\n",
" u'Set1',\n",
" u'Set1_r',\n",
" u'Set2',\n",
" u'Set2_r',\n",
" u'Set3',\n",
" u'Set3_r',\n",
" u'Spectral',\n",
" u'Spectral_r',\n",
" u'Wistia',\n",
" u'Wistia_r',\n",
" u'YlGn',\n",
" u'YlGnBu',\n",
" u'YlGnBu_r',\n",
" u'YlGn_r',\n",
" u'YlOrBr',\n",
" u'YlOrBr_r',\n",
" u'YlOrRd',\n",
" u'YlOrRd_r',\n",
" '__builtins__',\n",
" '__doc__',\n",
" '__file__',\n",
" '__name__',\n",
" '__package__',\n",
" '_generate_cmap',\n",
" '_reverse_cmap_spec',\n",
" '_reverser',\n",
" 'absolute_import',\n",
" u'afmhot',\n",
" u'afmhot_r',\n",
" u'autumn',\n",
" u'autumn_r',\n",
" u'binary',\n",
" u'binary_r',\n",
" u'bone',\n",
" u'bone_r',\n",
" u'brg',\n",
" u'brg_r',\n",
" u'bwr',\n",
" u'bwr_r',\n",
" 'cbook',\n",
" 'cmap_d',\n",
" 'cmapname',\n",
" 'colors',\n",
" u'cool',\n",
" u'cool_r',\n",
" u'coolwarm',\n",
" u'coolwarm_r',\n",
" u'copper',\n",
" u'copper_r',\n",
" 'cubehelix',\n",
" u'cubehelix_r',\n",
" 'datad',\n",
" 'division',\n",
" u'flag',\n",
" u'flag_r',\n",
" 'get_cmap',\n",
" u'gist_earth',\n",
" u'gist_earth_r',\n",
" u'gist_gray',\n",
" u'gist_gray_r',\n",
" u'gist_heat',\n",
" u'gist_heat_r',\n",
" u'gist_ncar',\n",
" u'gist_ncar_r',\n",
" u'gist_rainbow',\n",
" u'gist_rainbow_r',\n",
" u'gist_stern',\n",
" u'gist_stern_r',\n",
" u'gist_yarg',\n",
" u'gist_yarg_r',\n",
" u'gnuplot',\n",
" u'gnuplot2',\n",
" u'gnuplot2_r',\n",
" u'gnuplot_r',\n",
" u'gray',\n",
" u'gray_r',\n",
" u'hot',\n",
" u'hot_r',\n",
" u'hsv',\n",
" u'hsv_r',\n",
" u'jet',\n",
" u'jet_r',\n",
" 'ma',\n",
" 'mpl',\n",
" u'nipy_spectral',\n",
" u'nipy_spectral_r',\n",
" 'np',\n",
" u'ocean',\n",
" u'ocean_r',\n",
" 'os',\n",
" u'pink',\n",
" u'pink_r',\n",
" 'print_function',\n",
" u'prism',\n",
" u'prism_r',\n",
" u'rainbow',\n",
" u'rainbow_r',\n",
" 'register_cmap',\n",
" 'revcmap',\n",
" u'seismic',\n",
" u'seismic_r',\n",
" 'six',\n",
" 'spec',\n",
" 'spec_reversed',\n",
" u'spectral',\n",
" u'spectral_r',\n",
" u'spring',\n",
" u'spring_r',\n",
" u'summer',\n",
" u'summer_r',\n",
" u'terrain',\n",
" u'terrain_r',\n",
" 'unicode_literals',\n",
" u'winter',\n",
" u'winter_r']"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dir(cm)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用不同的 `colormap` 会有不同的显示效果。"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAQcAAAEACAYAAAC+rrMfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXusZ9lV5/fZ+7x/r/usul3V1dXV1bjbdrvbNGAbaGwG\nSAyjSBBNIKMJ0SQjQhTQ+K8kApJxogGUGYZIEQEMpAWWTcYgwJ7I5uWxGbUH220Mxl3u97u663Xv\nrfv6Pc/77Pyxz9q/cyvO0JW4VSGqLV1V3d/9vc7Ze6/1Xd/1XWsrYwy3x+1xe9weNw59q7/A7XF7\n3B7/3xy3jcPtcXvcHl933DYOt8ftcXt83XHbONwet8ft8XXHbeNwe9wet8fXHbeNw+1xe9weX3e8\nKcZBKfUDSqnnlFIvKqV+6s34jNvj9rg93tyhvtE6B6WUBzwP/HvAFeAvgX9gjHn2G/pBt8ftcXu8\nqePNQA7vBl4yxlw0xpTA7wI/9CZ8zu1xe9web+J4M4zDncClzu+X28duj9vj9vhbNN4M43Bbj317\n3B7/Pxj+m/CeV4C7Or/fhUUPbiilbhuQ2+P2uEXDGKPeyPPeDOPwV8BblFLngKvA3wf+wY1Pql/6\nC0y+wDQGHSUQhNA00NSgFISJ/b9pwBj7N0+DH2PG16mnhzTzCdQlJk8BUEkf3V/FP30etXoHh3XI\n/v4+169fpygKtNaEYUjTNKyurtrvUdfuOymlaJoG3/cpyxKtNXVd8+ijj/ITP/EThGHIysoKxhg8\nz0MphVKKMAzd+3ieRxzH1HXt3g8gikLKsqKqKnzfR2tNWZb4vo+vwSgL4jT2Wo32Me13Mk2N0h7G\nGOq6RmtFXTcopdBa2+cY0/7b8HM/+3P8kw9+EKVAKY02NVVjqBvjrq9pGncdHg1pUaG1xvM8MAbt\nefi+R1XVNI39LACtNRowSlFVlftbWZZEUURRFARB4L5rWZb0ej2MMZRlSRAEKKXcfPz8z/88P/3T\nP01RFPazgfl8jlKKLMuYz+dorTlx4gSDwYBe6MP8AJPNIJ9h5hNMNkcP1yDuAwqUtmvHD0FryOb2\n37qyE+21y94L7PPqGnwfs5iioh6YGozBVCUKY9+nqcCP+Ke/9Cj//d97H5c/8Un2nrlGdphRphV1\nUWMaw+jOIW/5kUcIfuQDPPfK6/i+z+rqKkmS2Hun7Tz7vk9RFERRBIAxxt0jWR+e57l5LcuSMAyp\nKjtPcp+VUvi+T13XBEFAWZbUdU2WZfzSL/0SP/MzP0MchXizPWZErJ+84w1v5G+4cTDGVEqpfwx8\nGvCA3/y6mYqmBqVRHpgiQ2nPTlq7wJUYBe2B9qHKrIGockxd2deXBabIIQhQSkNdo6IIghiiPjqr\n3UY/ODggiiKSJKHX67nNrLUmz3M8z3MTJ5umaRo3QWEY4vs+8/mcJEkACILAXkq74WQUReE2rDwn\ny3K01gRBgNbafQZAg6YuS3s/lMJrF29d1/bzUTSd79s0DT7WgNjv26CUfVxrTWOMW0SYCpTG9zRK\nQdkuQM/z8DwPXytq4+H7OIMhC7Oum2PXJwaiwWAa434vioIwDN3veZ47AxEEgTOUQRAcM0p1XbvF\nH4ahW9hKKfdvFEXMZjOm0yme55FEq6iwB3UJdYmKEkxd242cZxDGoFvHWJdQ2Pvq1lJdQpHatdbU\ndm0poGmsYQBQHvgeql0LqqnsY62z8u99mM1ve4Vsf0aVVXZj1w1GK9KDlOtfeZZ73/MEGxtvYTKZ\nUFXVMecEUFWVWyNyrfL3qrJGTO551/DKuhCHJOtJ1rMYljAM8TyPIAi4dPkKn/nMZ3jyySdvZiu/\nKcgBY8yfAH/y73pOU2ToZOgMgalyhxKU50GZQZDYx4rUTnpVYuZjTF3ZxZD07UIwgOeh/BDlBRCE\nGC8kDGuqynrrJEnwfZ/BYEBVVSwWC+I4dpZaFmqSJEynU7TW+L5PlmVuIxVFQa/X616nQwfiQeM4\ndhsAcMgBcEahrmv3uNa6RROBe1xrhTHgaU1T16gWHchCUUrRaB+MNQweDWVjF4dsUNls9n0UWb70\nNKY1Hp7nUZaNQ0FiDOV7iFHwPM8ZG3mOvF42tqAB+Q7d6+5er6AWuRdikOX9BV1YhKTdnIzHY+I4\nZp6mDKIQ5UcY3W5yrTF1hYoUFAvr6f0I0ilNkaKCCFAorcHzMdSoprZGQbXIwdTgheB51uHkFSqM\nsbezdVymvSal6D30HkYvvEo2TqnzGuVrqBvKtGL/+T1WP/PH3P1f/nc8n2UsFguMMURRRJZl9Pv9\nY4i1aRqCIKCqqg4CNM6g+L6/NPbt/ZV7I/dX7p3neSRxTN2uwVdffZXPfvazfPGLXyTLsje4g9v1\nelPP/gYOHfct1CsL64X8yG4Az7ObvWksDFQK/MBOYF1Sz46gzDHZAlOX4PmouIfyA5RvvTReiDIN\nZVmS57mDbmVZMh6P3QIXy+x5HkmSEEWRs+iCOHzf54EHHrBv26IJ+SmKot2AdpLiOHYbxL7PcuLk\nx/dbtNAswwIxTLIAFHYB1E0DshCaxoUkQYtmyrIEwGjfoRCA9773vShj7HNb5BLHMcAxb9O9B+LZ\n5ToD3yMJl8/zPI9AG2fM5HpM+zmCcsTbd6GxGE25RtWGJEopvud7vsd9plyfGBMxPPJ9j46OSNOU\nSvmQjOymDxJ0MkD5IU06sxu7rjGLCQTWWSilMfkcky9oZkf270WOKVJQ1rjYrdBAZY2v6o0sUvB8\nwNi12DS879sehKZGr51i/Vu/mf7JAX7i4/maumjAwHx3zvZfvED5pU+xurrqNq5cc5Zlxzy+3CPA\nrcGuwymKws23rKeiKBxazfMcY2zIGMcxmIa6rnnggQf45Cc/yZe+9CUmk8nN79GbfsU3cJg8RYUR\nKkoAuxGoKwsBvQA8D1DQGCjaiS0LmjxDha038C1MU1GCinvo4RqqLjEtzE6SxMG0Xq+H53lEUeQm\nTGAe4Cy1jDAMyfOcd7/73e49HLTueEKZ6MVicQzuwRIei0cuy6XxkfeJoshBcKUUjWmNB6ZFvI1L\nARljqFtjFIWBi+uVwhme7/3e7yUvS5p2kwXBkkORTSufLwavu3GNsfwEGOs5TYskWBoguU+yUKMw\ncOFCnufOSMoCr+va3Sv50Vrz7d/+7e4zB4OBu8cyRxKehGGIMYY8z0nTFJoKI8u3DRFMnmLKvDUS\nKab9t5mPMUVOk6eYyhpU/AAVhBYNlLlde164RAd1BVHfvncQWTTi+XzPd78P6gIwRA9+J6N7TtPb\nSPBCDz/2UW1IM7404dqnH+OOas/ySq33F+SXpqkz7nVdO8MoiExQW3f9aK2JosgZa7m3URQRhqE1\nDE3FIst56qmnuHDhAp///OdZXV0liiJWVlbe+ObkVhoH06Ba9GDKfPlVgtgiAq2hKtpJ82lmY0xZ\nWHLO81BegPYDdNxrDQWoIMJUFWi/JeOslZbQYrFYuA3Q6/XIsswtXImT5e9C7sgmEkvdhcziPbsQ\nsTu53Vha0IUYF5lw8aLymK9YPhcDStmNb6p2gagW6oJqN7ldRA26Ktz7BUGAHwTWYLQbk6Zyn1/X\ntfPQYeC7z3TfTUGjdBu+tygB+93CFmG47+z7FGXVhgnKPSZhECyhsxgiQSuAW/jiRZumcWhKjIPc\n9/l8buGx0vb+tBtYJX07/0VmeYWmsaGGF2BaklsFEUprTFlAVWDqmma6j6lKy2MpZTmIqAdYh0SZ\ngw7asCOw/IUOQHuo/gpr73k3/VOrhMOwfbmmqRvycc71p68y+dPf4+ypk2RZdgztdUODbmgqfEIQ\nBG59dA26EJfyHN/3iePYGl7fJ81LnnjiCT784Q/zyiuvUFUVFy9eRCnF7u7uTW3RW2cctI+ZH1kL\nXZc0i4m1/IuJDS0aC/FoKsimNrQwjZ3gMLLGww+o52OLPOoaMKggxFQFLMYM+31OnjxJr9dzUFji\nvm4M5/s+o9HIQTPhF+T5YOGewGWwMF0pRZ7nx2JoWejdTIK75E54IX+ThSFwvTLL51aNGApFrYN2\nYVhgBVAU5XF+QwfHFl3TNFRVTV5ZdOG1GQ/PWyKIqqrIixJtqmMoAm0XObX1dIFWSxJVKXzfs/xA\nPqWqKmdojLGIS2tN0C5cCV+6xK98toQyYsBdCNMahTRNj/ESYsgLfOivQ5VbLqpovb/2ME2NqQpM\nVdCULdld1zYUrUpLgPuRDQ/CyIajVWG5LQzkC7suPc+S201lDUJpjRJF6jJo4dvew4l3fhO9jYSg\nZ41fENk1sri+4OrnnyR6+S+I45g0TWmahjzPXUahG16KAe2SskKICxoVxyVzEUURvlZ4WpEXBRcu\nXODjH/84L774IkophsMhJ0+eJEkSZ5je8Ba92T39DRtKoeJBm2Hoo4IQFcbLUMLzbGpKaUye0mRz\nTJ5ZS+6H1lgohTdcQ3k+erhmPURVWMMRD0jznPF47BCAs7BB4FJnQiCOx2PquiaO42Ov6RqRoigc\nshCSSSAxWCOTpqmD1DLked1YUhaIGCNZJGJMuhBf7EtRFMf4DgvNlylGOvxFXdt0nKqKZfqrblpm\nvXJhhstM4Dl4a+Fv5aC2ymdUzTLDoBRUlY1986Dvrk88XZqmZFnGot0MaZo6dNTd4AKbZeHL95bw\nT+6JIDWZK5kHl570PItCoSUODSZdoLRns1iebx1IEDiU2aRTi1q19cZK0qB1bddWENowo2mW1lhI\nyTB2XISKR/Tf832s3nuKaDUiWY1bohPKRcX+C/vs/vEfctfmCmEYEkWRQ5pJkrhwTohv+V2ckBgI\ncUxC/kp4oeoCqoy8KHn88cf57d/+bZ5//nm37vr9Pru7u0yn079FYUWbOzZN4yyyqUqo2kVZFtYQ\n5Is2ddkAFlKZ2djG455l7FUQW+tvjJ20fA6d9KJ4o9ls5hajLMjZbOZSj0VRUBQFa2trDmF000tZ\nlrlNLdZeNkyaps7jCdzL89waGYVjogG0Xlp/IZlkAxRFgWANpZTNWLSvFX5EkIYyDXW9TA0KdHUa\ng6oiq5ebWjb/PM2dsZIf2eByv0Lfevayqin9BNUiB2MMWZYfm8puelYyQ0KQyr1aXrtNHcu1ikGR\nEELus6AKeV0URS5MC8PQGkovtGFF0IMyR4fxMuMVx9ZINA3Kt6SjUtqGI5FNRZvFzGaCwtiGGWXW\nGpx6aRSakpZ4sagB7BqrK4tslUKfvo/Vb34Hg60B2lcuFATIDjOuf+019Fc/w9rqqtNwyJxL+CWO\nSLgZMYBNY4n1NE3d/NV1bVGPAoMmLRu++MUv8rnPfY75fI7v+2xsbDCbzZzRCYLgGL/2RsatMw5l\nZifO8zGmsbGiAhVGlngU4i9bOA9h2tABpSBoiUzfB60wVWEnWWmbkzY18/mcPM+ZTCZkWWaJLJap\ntS4r3mXdZWIEYQjcFUMh0E4mqvs7LDkDaMlE7TkDZQ1J5iCe5KNhyUfUbWbCecmWdJRQQWvd8gQ2\n3RkYu3gSb/nZslFh6a1hmQeX54jRkN9lY84WS09m36N2qceg5TK6BqCLOgQ5+b7nDFc3HSz3Ungd\nWOo35F72+313v7TWDoLLqOvarp9k2M65omn1MioILf9QFmAat85UMrAOBYOKeqioZx1SbXUMqrdq\n15dprPevC+vE6soiUjev7c73fEyRWg7rW97H6O4t4rWEoOejfU1d1JRpyeHLB1z9wz/lVILLcIlT\nKIqCOI6Joog4jt0G7q4hQXgSwgJozxqVrKz4ylcv8NGPfpSXXnqJsiw5Ojri2rVrFEXBfD536eC1\ntbWb2qK3zjjUlc07K2y6yQ/AWP2DMY1VPTa1ZZ9nLR+Rp+jeyKUtVTKwBqFN+dn0Z0tmquWCBI5t\nXFmwXYJI4mSBbmI4BPrJxriRhBRLL5tOYLDAZoGRkspyXr/1FrIhu+ks4TqapkF7nvtusuElm1DW\nNdrzwA/phR6NH7n8uHAHTdM4xJPnuYOsYnjkOYKexPhJdqAsy5aMXar17Pe0cS5w7Fq6qdGyrNx0\nd9NwVl9RHjPIYqyDIHCIS4RngsSccKvVq3hB0Jlzz64nP6CeHFpiuq5sutMYTJ7ZlGZVonujZdai\nRRcoMItxm7KsLGqVdHqxsOtLaZtmrwqLdsWQGIPeOMPmI99OOIzwI5u18ON2Ax9m7F64wuTjv8q5\nu+9260BSkHK9Mj9iALrCPHFMcv80hr39Ax577DF++Zd/mZdffpnZbMZisaDX69Hv9xmNRm49DwYD\nrl69elNb9JYZB9NIrjm3G7/IbNaiqdFhQrOYUk8PaBZTiyqMQYWRfW5duUmyAhcwTUOTL2iyeQv3\ntEuHRVHEaDRyC15SlELYCAm09JKVg2JZlrnwRCCvDFmossEkNJHN0Y0fbzQokvITDYAYjziOnQFw\noUcb38My1JDPaeoaozwqhNk+7tHFSHUzLfJaYcRlA8r3EY8GuE0p4QumWYYk7aYWI9PVQIjo50YF\nqtwT+eyuEZC0c1VVbqNItkeMshiVoijs5o16S+LQC1BBjLd20mZm+ivoKLHKR89zoavJFhZBeJ5F\nFGDDjTBuCc3Gok/tQ5FiyhJQlhg3tTUe4pQAU9swKXzHI6zfd5p4NcaPfbRn10BTN0yuTLn4p19l\ndPWCM4oyn06v0t7DLkKS+ZERRRFawXg258KFC3zoQx9ie3vblQMIgT4cDp3RjqKIg4ODv0WcQ90K\nTPzQwsC4Z0UngCkLlPZoFjNrDKoCY5qltDqw2QoD1hC0JJTyfKuQVMoJQcSD1nXtYmFR4cnCFo8l\nm1G82FKvsBQPiSZB3lNQiEBFMRZdBlrIRUErsshhKVnuxp3dbIMYLjEscRRacVT7nRpj9QjynbMs\nP2ac5PsLmpB/5T2719slCOXx7kK1BmEZhjWthFo+o5vCvDHF2yVb5W9yv+Qeye9CvtV1zWKxcO8h\nRkLuZ91YHkD111vSsdeK6IxFlUrZsLSpLBFpGrtuKqtTMLkllS3qrFvnZPUlhDHUhQ1JwsgiBdOi\nFDtxbV1GAY3BaB+1didbP/TDbLz9NMM7VwgGIUEvwChFMS/Ze26P1379N3jbHSuOqJV0evceSJjR\nXUMioDPGMF+kXLhwgT/6oz9iOp3S7/cd4S4OcDgc0uv1XOgm730z49YZB8+31ru2OeZ6f8dOqh9Q\nj/do8hSqym54pZ3YiaoErWx6qmm1EnW5VEe2YhW058gc8VplWR4THfV6PXfjZXPDUixV1zWTyeSY\ngZGFKRtEREDiDboTIRCwGz8K8yyGS7yqeHuJScVz3gjFs3zp0bv6ie71dYcsPPnO8r3l+8ZxTJZl\njmvoLqDuNcpnivETErJr+OT5onaUsKQrT++mfMUAyffvXr88R0Kc0WjkCDyRtTemJQmrNo0ZxCDa\nFz+0fJRS1mFoD7RGx30rvPMDG6J6nkWbpgGUDTe0h5ke2FBFlKfG2BqOsrB6hzJtMxetOpcG8jne\nuQcZnd0CrAw+nxaYlq9ZHGZMLh2RPvavjgmZJHS78b7I33q9nhU6aZs6v3DhAr/2a7/GM888QxiG\nTKdTp4/IsoyHHnqILMuc4Eo4HDHib3TcOuPQNDa0yDOq7Yt4ayegaWgmh5ZMylPLHWhvCf/CGD1a\nt8jBs8STKVJLVCrsgqhKVCCpJpwWYTKZkKYpxhjG47FLuQnZNZ/P3cZeLBbOg66vrwPLmgAxGoBb\n8LIBZSOLjDXLsmMGRSa7K76SXL5szK63l/hTNlUvSUj08U1jYfhSYSfvCxzzOl3itZs7n81m7hqE\nXJXRrXfoQl+B9V3dfxf6A86Dyd8FtXQ5G7mXDgm0ny/3OkkSVlZW0Fozn89dlkLuUdNmsAiSds7b\nGgg/sHURWqN7Q8cLWFGU3+EZ2ng+SiwibYVUQJuRaKuCPc9KsXtDy2toD8K+JTGVtmFva1TwQ1a+\n74dYu/ckXuQRjyL8sA3pDOw9t8fVf/3nnEsaDg8PmU6nzhEYY1gsFi5sE75A5udgMuMLX/gCjz76\nKDs7O+7e9Xo9fN9nMpkQhiGHh4eEYcjm5qarBSqK4hgKeyPjlhmHJptBWaCCEG/lBE06s2EDLDmG\nKLEGYbiG6o9sOkrCD2MsHyRpToNljsOoVcjVHWnxsihIa81oNHKxmaTeRKxzY8GRWOCiKEiS5BhZ\nJxte/t9duJIZEc8uG78baghauJHMk+/ZLcHN85y8KKj9Zf1H9zXduL/r8SUb0s0QLBYLd02i/BQu\noJv27IYz4uHlXzG6jiC9wQh2U5jCPSyN2fH6iqV+YgmjxXAJPyKGqBt/q3a90FSYliTFj+ym93zw\nQstFlTY9rERI51s1I7qt4/GCVhRlIO5ZxKBUW7qNdWRlYd8/TKxIyg9stqKpUMkIkApiD33mbaw9\n9FZ6J3qEgwDlKVtFDqTzkr1ndrj+L3+Ft73tbW5dCHIDnBMDnPBpPp/zla98hY997GO88sorToS3\nublJWZasra3xjne8w3FoQRCwt7fH/v4+gEOHNzNumXFwYYLnWSsfRDTZwtbn5wtU0rN9HrRG91dQ\nWuONNtBBjClF5Ra08WObk/YDwGC80JJPHYJRPJZMQnfxSopINv6NBgVwr+2mNmWhijfuVj0K5G6a\nxm3Qbqquaxii9vdujC4eX+C7bLAuaumiga7nbZrGwUhBOzf2cBCU1NVbKKWOXeON4ZCgghvl4t0s\njojDgpaEFWPZ/S7dx7v9DLpqT7kf3fStfH4XiosxVcryV4ANL0zjwgLlB5h246K9NgRJlhqGtlUA\ntNmJNgwxTdMWZWHDWIX9jN7QrreWq7CGqH0P5YEfMHjP32Hl3AnCfogXeGhP4yv7FtPdOTt/+QKj\nnaeJoshpZyQsnM1mx5S3R0dHPPHEE/zBH/wB29vbDkHZ61aMRiPquubw8JA8z93rBYEK2rsx5Pyb\nxq2rykwGVqVmDKapLOkohTPZAh31UFGCN1hBBRF6sIrqDS1kjBJMU9Nkc7z+is1Xlxk6alVuxcJt\nHLAcguTX5edGYU53wQ+HQwd7gWPhRJc17/IPwrbL+8kmuLHgRgyTpAyVUtSm03+BZZVdV5vQ9epd\ncq/bJ2C5UZaS7K4hkHAgjmPWIs1qL2ItMAS+x7Dfs5qAziYV8nKxWDCfz5nP5w7FSKgheXm5V26z\nw7EN3U3RiXGUrERXLtxN88prxOiK55PvoJSyTXLCHoSxdTgt30QQ24KpaGA5ASU1PFj1o1IQ9q2q\nVhxLVdo0ZZuNUFHPZizCnv1ppY8qGoIfo5IRKh7Z5xuzTHE2Nd7p+9l8zzfT3+oRr0YEid2ouiUn\nJ5cmXP3YR7jn7rPuGrt1PeIM0jTlueee4yMf+QgXL16kKAqGwyFaawaDgZv7wWDg1kVXKq215vDw\nEGOMq8x9o+NN6efwRkY9OWiVasZOUKv6UmFMeOoedH+0hId+YCepzIAaky9azqLBqFYA5Yc08yO8\ncAtMg85n+H7kNkdXlSYLSxayWF/xRrLQxcMJeywQWSaz+zyAxWLhDI0890bCsBs6yAbpPt7NMoR1\nRqV7yw1S5S62F1Y7z3OauiL0PSZtKbBA97quSeY79FbvgMY2jWF2merqDtXeNVQ+o4gSgqPrEI+I\nrl8jOH2PnYd3PIIZbjJveRMJI27UQ3T/Jtcrj3cLqrrEsHg9CTO6BKmEMtLgREIw0YJ0Y2ytdRtS\nNh2RkkbFiV0jIqVHgW7RBcoagbbTmAqipccHa1hoq4P9sG0QU7dNZGzTGFOmttZCBHlo+x2C2Goi\njK3k7H/H97Px9PMU85cp5iVB5FPkFcbA9NqM3a9eZPOvP014x0NsbGxweHjoEJak0R9//HE++9nP\nOo3C2toa8/m8w7nAYDA41nBH0vWAa5IjBvdmxi0zDioQKadCKU09PbDEoky20pAMwY9QYYzJ5lYq\nWx3aV/VXrNwVQPs06WwpocZAmODVysWpsqBkiKeWeDtNU7c5BY65xiptDBxF0TEmveuZgWOhQrcO\nQ36kRR0soZ7UC3R5hCRJrMeufAKz7EpVm6U4Ko5jZrOZTXU2hrqoGJHRlAWBp/H3XsIEMTrs2QK3\ndGzb6433MUVGs38VowOCpEdV1FAesbi2R4Ki2D9EP/ck0dYp1DRl/bu+B3PyPEe1775n93plMXZJ\n0W6GQ+6X3L8ur9EtPBKEIyGQ8C1iLIXIzfPc3cvGgCciOGMsMQkWTTatCCuIbEZDe0uVox9BNmsF\nc6082m9FVYq28UtbkOX5rb6B1pjo9nVtO7qo34qm6mVIYxSqv87me7+LyWu7ZIcZTdVQVw11bcjS\nkqNXj9j+oz/m/H/77Vxua3uUUvT7fYqi4Omnn+YTn/gEr7/+uuO5hFuStOXa2hrT6ZT19XWyLHOI\n49q1axwcHLh6Ilg6sTc6bplxoKlteCCVcnWFKQp00reTGCWo/pqdoLpA9dcwiyMrlhLVWt3Q1LNl\no5e6wtQlyrOSV60jlxYUbxTH8THvLvGbPCYCIDEos9nsmEJRJkaINHluNwwBnJERJNKN9/qBx6Ja\n9nJM05Q4jtu+C5WD812BlW5L0CXUSNPU8RGJKTDTXavUUxqtFOrEPbD9EqbtT1A88zg6GdLMxngn\nTuP1D8n39skuX8JLYpIzZxjefQdenJDceYbq+hUW165STBeM/+TjNI3B6/c58R/+Q4q1c+zt7VFV\nFf1+3/Ex3UyHGAsn1GqvQ1CSoABY9jPoqlilsEwe66ZpBf31egmeMjZMKNvslmlceKTigXUgpu1B\nKiiiyu0PxiJSMRxKW0MCti0hjUUIYR+qHBUmjstAYQ0BWIRhTNu8KF/2P/VDwre/h5MPX2CxN6NY\nlIR1wHySs6gNzd6Ca19+lY3Hfp+V7/vPSNPMIc0nn3ySRx99lL29PWc4pYOUCNYGg4EjzK9fv+7C\nPFk/stbFWUlNyxsdtw45hLFVR5YFzWIKKPRwDd0boAerEK9A2MP4MYqapuOxVBgvm4UqjamqtnFM\nO1kt6SSkjhgCyTaUZekaxYqBkCKrfr/vUj7i8aSIqq5r1yy1m7KUWFkWs3hDgcxdMVMUheT1ks2X\nGFEmVIy9dWs2AAAgAElEQVRQl+wUAyOGQb5TL2ybp6q2D0GZo3pD6v4mXp2jNs5AmVFdfApv9SRN\nOkWvbtBMD2kWM2hqorUR3soG+e4OvfseoJmNaYqcplH0738rvPg84cqI6cUrVLMFVz70i0SrA9bf\n+a2Yb/277E0XxzIi3ToNMZi+7xO2C1yIXse3tIisez+6oiy519JlS4ymJTlDKz4q5jZjIWlsP0DV\nFSaf2/uiG7vppS+panuFQFvdqy0y0H6LCpTd6EHiBHWqt2LRRt7ebzEIXos2tLc0HMXCGpQoRMVD\nVn/gh1l/5Sr5JGdR1HhakaCYV4adV45IfvczPPjAt2K23gHASy+9xO/8zu9wdHTkFLrD4ZCqqlwv\nyfX1dbcf5N7IWpH1uL6+7uZD6ixuZtw6+XRdd7r2WJ26Ci3xSBCjhhvUOmCRZRQ1aFO3yMAuApen\n9kMrXGnz2M18YgkilqIdQQOSzhFCq1tzIIakWzoLdpHPZjNnhSUMkEUsJFmX1BRSDY5Db/ucZfsv\nWHZKkpBCui136zBkMyQtlNRaEwYB5mjH9jJQHirqO2bdm+5Ydd94F6N99GCEt76Ft7IJjcFb2cRb\n3aD3wMOUiwxTFQSjFbJLFymPDlFhQp2XkI4JBn0MkGyu0tQNOvApJnMu/8H/wdEvf5CTO0+j2kXZ\nvb/drIPwH13kJe3QughC7pPEyLLIYRniiQGS16liDunUNviRrtK2K43duKYt1jMSetSu3B/PdusS\nabWVX0eoILFEZpsddeFqkdoHwpaolGxF3fYdaepl01rTWPShwDv7IJvv+Rb6J/o2c6HAQxFpxTyv\nufa167zyq7/GahLw6quv8lu/9VtcuXKFNE3xfZ+trS2yLCNJEobD4THysZsans/n7O7uOocThqFT\nYXa5tDc6bp1xqPJl1Vy2AOVZZVt/BTU6QaU8pvPFsj9C04YSsrGqsiUm2y4/cYKOYtubsq4wfngs\nPdQV2kj6TsjALiHYJdjSNKXX6xGGoUvRiUilq2iT18lnSewsRJo8vyth7m4eIUhFYyGVjX1dE02v\nEE+uEGRHmLp0Yi5MY2Fuf9U26M1m1jv2VsAPqV/7mk3lGUvyEo9Q/VW89S3q2dgqS6uCwYMPo5oK\n3esTrq9THh4BhnA0YP7aVYK1NaYvvU7Qj/HjkCrNqYuKeGOFYjzl2r/8bfTv/RKb66uO0O2qNYVA\nleuXe99trS7GW4y2VBJKNqMr4BFizRWNeZFNO1ZFK783Ls2ogrjlIGxmQgXJEh2oTlrTixyyEJm+\nino2E9I0ln+QTEiY2LVYt12tm7adnPbseyjdhhuCKmxr+8H3/TDr958mGkV4oWf1fcpqH46mOZcf\nf53ssY/zqU99itdff93dtzAM2dvbO9b1qZtyl9Hr9ZySUhDteDx2bQmkwfLNjFunc0BhFlOa2QTd\nH+Ktn7RnD2gP+mscHByyv7/PZDKxFq8ubdVmOqeZHlmNfNuaXinbAqzJs5ZdrlD5/P+S3qvrms3N\nTefJRAsgnkuyDfP53MHh6XR6LMPQTaNJvCcW/saioS4M7DL13S5M8l3EIGys9Akf+ygbzDHbL6L8\nBFZPkfoDFnnpCrPG0xkLf4DRPk3Yo1q7i3rlTkpjYbBe3QKwRG5gs0KYBjVYpxnv2ftxtA9VSfzO\nR0Apqr1topOblNuX0MNVjDFMX3yFwZmTzC7v2j027FHNM5qiIlofoQOf/QvPsfOz/5jT88vQ6kYk\nxl0sFozHY0c0jsdjR9Z25dpyTwR1dXsPSIixWCyOZZs8z0NhbLaqTWuaqlxuUmNsE1k/dK0BqGyP\nEIcW0ilUmU1J+q0xabueK207mptsao9EkFoK4SvqAuIBpBNrRMrMGop83vYimVstRV2hVu9g6/vf\nz/p9GyQbCX7go5Wiagzz2jDemVNXGX/+53/OeDx26ewoihgOh8dqUADXKLlpbKOiq1evslgs6Pf7\nPPTQQ86ZlWXJPffcgzGGU6dO3dQevWXGoZ4etTp2hUqG6N7IdhQenmA6T9nb22NnZ2eZUahKwKCT\nvpNJ68GK5R605xSWTtTiR46gEaXjbDZjb2/PQd/pdOpuomxw6Qwsk6GUcpkMCTckm9Hv950GQuJo\nKeqS7y0LWyZV4ugbC5ziYopHQ60C9Pt/DLWyRXPXOyn6mxzOl7oHYfvDMKQXR1ahp6XfQY2Hoe6t\noVZPoYbrVnWazZwasN5+meD8O9py9wg9XKN49RnbRq2u0f0B5XTO5MkniTZWbV2A9ujffYZ0b4zf\nixndc4oqL2nyVu7dj5m8vseV3/p1Bp/5KImyzW8Wi4WLmUUF2OVSugSjaCu6itJuB6lu0VVXkKVa\nL2+JxS7CrJccQNPY++SH0Fu1G9pvU5haQ9svUgVBGzK0iIA28+WHWHdGG6oYu/lpCUg/aFvJ+VDM\nYcnLYtOiBdQlwQPfyeZD95KsxehQUzSGBvAUbN6zwrNb3+KQVxzHjs8CyyuIFFo0DkEQcHR0dIyL\nWV9f58KFC0wmE4e+rl+/7pDpzYxbJ5+eHtIsprZR7GDFxnXap4kG7pQqYcTLsrQT21Qtz2CLaGxN\nhfWUNI2rtehWz8kik/x7mqbOs0muuKvAE05BNmFXXVZVlesmBUthj6ASWchdzkE2dLe5qhPwtJY9\njkLKx/+Qnd090jQlzQsOpgvGkwnj8RjAoREhPsMwtBkfP6Rq7HV6qu05UJW2Ua8XouIBariJWtmy\n8XPUR/VW0Cub6P4KzWJGMxuj+yP8lXWyi69S5yWmMTR5QXJynWoyI7++R7K5QjlP0UnC4PQGdVFa\nNLHaZ3TXBnVecvS1Z5j++j/l5P6LzigfHR0xm82O1ZwIYpJ0phiFbsaju0GkoarMgxh1I7qFKrNe\nGtOegWKw9RK2uMqGFBYtqDZFTtHWGnihOwjJpTtVq6IMkrZuQi8Ng+glRDJdl2239DaMKG3VJ2UO\n6dg+1xhUf531/+BHWLv3BNrXlI0h1Ip77l7hXb/+z/ngBz/oiO5uyjIIAuI4duKmrkR/Npu5e2aM\ncboGuffitDY2NphOpze1R29h4VW95Av8EPprqGREXjUcHR2xv7/vvEUUhe1m1zTjPRtj1jUUGaBQ\nYeI6/+hkAMkKBJHzsMILSMWfpNIEuonhENKrK7vuFj/JBpX8e7egSJ4vBkbClTAMSZLEPV9Itm4b\nMO/pz7FYv5Mr165xdHTkwhEpPsrz3Bkcid2rqqJorNeV0AftYTzf8i6LMWWDVQVunLX8QzJED9do\n9i4DhsWzF/A378AUOeXOJer5lDovidZG9M+eYbG9b1/naxbbBwzOnMRPIuaXrlFM5gSDHuV4Qd0i\nm6AXWQOkFLsf+wjDz/0Om2srjMdj21OyE2LIwpWmq10UIaGbXKuQkDIPYRg61Kbaw5Cs0hEL7/N2\n09eVhfqu9sG3p2VFfYs4hiesUcim7QlarUpWtZmKKl8KpaTZsf2Wto9EZbtYE/Ts3/K5RQmeb5/v\nt86qzNpwZo5ev5NT3//dDO7osxJqzt2zyrf94n/NB37lo45olSrUrqq227Zwc3PT/V84tJWVFSdC\n65KS586dY2trC8/zuHLlyk1t0VuWyjRNje6v4J8657pJ5+GQ7atXeeGFF9jf32dra6slr0qSeAjB\nIfiBq4JTg1WMaVxIoVpZrALQPmWZOi9dFAX9fp/hcHhMutwleYRxl8yClEXL88SSd5u3iIZB+hAY\ns6z6FFgnkK7X67n3k0Ne6romu/+7mO3v85YOkpHNMJvNnExWNlC3I5DC0G+P9yvLkjjwMNPrmNFJ\nvKpEJWcw6cRugrCVdw/XMVVF8pa3Mf78Z+md/ybyyxeJzp6HvUOassaLa5KtNbK9A/qnN/HCgOtP\nvMjg1CZBP6HKckxdk9yxRrY/pRrPSDZWCFf6HDx3mWglYeexx0mefpZ3/tQv8NRr1xyjLqGFFLvd\nWJQmqV/gWCWhXL8Yj8FgYLMPCrsZi9TxDaaYW7QA1tu3p165fgyDdevNlbJK26pEeTmYyj6vNTj2\nWEYwdYHtQdlmyaTfJA0sDtsUqE1nmtq46k3Vah5MVbRaDI/e2x5i7fyfEa0knP/AP+Jn//TLXLx4\nEc/zXBuBxWLBYDBwa06qZ8VICKI8c+aMc0jGGK5evcra2ppzVMPhEGMML7/88t+e1vS6N0T1bPdp\neiuowSZ5nnP16lV2d3cxxjAajexz9fIQVB0ldvLbOBKw1t3zWtVae6ZhveybKNCrW0wkqETa1jdN\nw2AwOKbplxssZKHwC/I+N6aGuoq/bqqyWxouRkM85nB2hf39ffcaMTqTyYTpdOoyJfLZojL0taJO\npzTGys993yPWtqeA6q+zv79vCbh8Tm0MZrqDSka2bDkZYKaHeCubJCc3UVoT3XkX2asv0ztzGrRm\nevEqydYW/qDP+OUrZHtjhme3mLy+A0rhBQHFdEE1y/CTkHCQUEznKKXpn16jykqqrCQ/mPDSf/Nf\n8RY9ZTqdulZm8q+gMzG+Mj9iqOWau2KeY2jDD+2cC99UZm02ocaU7SE2VQF+DFEP01vFhH1q3Sog\nk5ENJyQD0WbQ0L4tttJeK6wLllqJunKdp9zzwaIG0/ZFzee2T2pVYtJJm2ErYDFBBTFnfvD93PML\n/xM/98df5oknnnAKXkGzJ0+edGtFeCvp7iQZqziOWVtbc8VZEoYPh0PiOObcuXOcPn2aPM/Z3d09\nljJ+Q3v05rf1N2aYsrAGIu6h4gEpAbu7u1y7du3YgR1a2/MiBaqZVkevfN+2+1LKHaaqtC2hNW3u\nWjxU9+gw8ToivEnT1C22LMvcyUHd3oYSlggCkH+7lXGyyKU6U0KVbm9IWfgSWkRXniVTyTE1pGgu\nRArbze/3Yus1Il+jtMf18RwPQxQGBAqoK3IC8qpmdWVk29LXllAkiKmUbZxDbwW9egKiPsFbvhlT\nV+iVTfyVVbLtXbw4JN5YYfLSRYLYxzQNxWxBMZ7Rv2ODxc4BANrTVHlBlRUEw4R4fcRi54BiMica\n9QiS0HZ+NoYrv/pL3De/yvr6uiPSxuMxe3t7TKdTF3bIEMQl1y/p4W4hl1LKHnNXtNmB9hgDpztQ\nntV75HPwPBo0WZ6T5tbAFLWxIrvA8g9Ojt80S29fV0iTWtxhz7QEaNmKrNpUattj0pQFyhhrVHR7\nPqfUahjryPJH/iP+2W/+Li+++CJJknBwcLA88azlvO666y7Onj0LWGe2v7/viHrAoYU4jhkOh65v\npFKK9fV1NjY2ePXVV/nqV7/KbDbjXe96103t0VtmHLy1k7YteG8IQcJkMuG1115jsVhw6tQpR1x5\nnrcUmwRR2x2q7exD250aWv4Cu/hN7fr7ibip27hEYKsYgu7mFgKnW4YNVo8g7HtXx9DNTMi5BGVZ\nMp/P3SQDrr+DyKqNMXiLPQ7N8jtMJhNms5nzpHI2gcDugyN7mGzZQJplbG1tUdaGNM2olEcTDYia\njEjV+HWOAgoVEjQVpr+Bt3fR1qvkC/Qd5zHjXXveR1lQXXkFr2ebnmTX99GeXRrT13dYu+8u/CSi\nnKXo0KN/aoPZ5V2qvCQc9tCeJj+cEa+PiDdGeGHA+oP3cuLhbyJaG7I4WLD9xFX+8id/np1/+GOo\nf/5PeNfdJ9jb2zvWjVkp5c4MEWjd1Y8I5yAHDGmtUU3ryU0NZYYKY5vqrnKLItKpTVs2dVvOPGc8\nHjOfz20HJYPNUPTX25Bg6V2V9u3pa5IFqQrLa/ix5Rd024WqsWgBEeZhbObNj2wph6DZdEqTLqjW\n7uLjn/hXPPXUU+76z5w5w2KxcFWXvV6PyWTC7u6u2w+iBVlbW+PMmTOu3uTg4IDd3V3ndHzf5557\n7uHy5cs89dRTVFXF/fffz//8i794U3v0lnEOOu6hRuuolTtIVcje3lWHGiS2FCmx1hqKytZY+AFN\ne5SZPdosx2jPhii0XEZTQ2UFOb1ej9XVVbfhRqOR0yIMBgM8z3Ml2r7vM5vNjlVgyutE5tvv9x0H\ncaOAyfM8ptMpvV7PFU8JsdhtJGOMoR96lKffRl3WDs0YY1hdXW3rBnqOB9Fau0Ui5x6EYYjvaeZ5\njh+0PSgAHQ8oaoPfFGTGJ66m0F9D5zPMYA2yGaq3gpkdokYbVK8/jzdco1zMWLz8CsmJNSavXGJy\nOGXl3jvJ9j0OX7jEyj2nmV25Tn40w1Q16w+c4+jFy5i6oX96k3KeYVCMzp1isX3A65/5a6aXJzR1\nQzErqMuGIqvY3Vvw2itH7L34k9z/v/2vvHD5GrPZzGWLoihyYZSgtW4XKrnnAJubm21YoSEaYNId\nW94fJ8sqSz+00L+pMQaX2pMejZ5ny9W9uN/2kUzbwqvACakMbZjYNDZTVqY229FUS9m00tYI1RXU\n9vxNIx2qS6uNMFWJ2jrPv/2rr/HYY49RFIVzAFevXuXMmTPs7u4eS6l7nsfrr7/uuBppTiSnwQvx\n3e/3HdrY2NhgfX2dZ555hqIoOH/+PD/2Yz/GXWs9bmbcutqKwQoqWaFJVjjYuc7Vq1ePpRsljwst\n51DlYJSFasmgzTNjYaui7dQDOrEEjPIDjMkdqyvvKx2dRJsgKUuZqF6vR5qmzgh0R7fEWBhkee9u\n+/QuodZNex4X+Wj2/SHFfOw+WxBMkiQuoyFs9MbGxjG1YRzHZHnbgbrlMMLApzKapspRyRBvMcMk\nq6RlQzw7oO6t4ns+zWTPViR6Ad6p8+RPfgEdJ/hxwNELF+mdvgNFw/5Tr7Dx8AP4Scz+06/SO7mG\n8jT54ZR094iVe+/EVA3Rxgrm2h6TV7fZf2abYl4Q9ALKrEJpRbKeUMxLvFCjDBzOC669NuGt/+YT\ncN93kKYpR0dH7hiAroZB+BlpJON5Hv1+f9mbIOrBTFshk5xx2TRWftg2kiWwh9Z4XuKaoezu7joF\nYhAE9KO+FYyBbSobtN2n69IS3XXbkq5uy73b8y5MXdm1VubWWdW1/V3OvJD+lnWFWtni1UnFRz7y\nEYcsk8Si5rvvvpvFYsFoNGJ1dZX9/f1jBX6j0YiDgwM2Nzed4xmPx06Pk2UZa2trbG5ucv78eY6O\njpjP55w5c4Yf//Ef53u/892Yo0s3tUdvnUJS+6jhJpPZgu3tbQ4ODvB935203PWmWnLMCis4qav2\nfAHb3p4gWp5R0PaaRPvH0obAsZi1K8YRBZrnecznc/r9vqsT6D5P0mhSGyAoQFR7Ao+FRJLPkbhQ\nxDtJkrA/WTgI3e/3j6nhJFQBWF1dxfd9V8PfTaFeunTJfc7KygpeZYvDQlUznc2JgoCiNiQmR22e\nxVeKanAC5Yfoe98F2RSTz/G37qJJF5TzlN6pTdKd61SLBSv3nOLgwrPkh1NOPHw/2cGEcppy4l3v\nYOPBexl9y7soFxnXvvA1Xv30U2x/5RJVUTG8c9gahRgv0ChPEY1ClKfprccMAk2gFV/79U/z/rti\nJpOJW8wSrsl9FcEa4KTA8ve67QHiujHJWeRhr4X/QXuGpi20isLAMf9Xr17l0qVLvPDCCxweHlKh\nUcMNVH8N1VRtq0LLb5mqhHYe0a0/bdekajNA1gjottGxseu7PWGLIgWlyIZ38Oijj3J0dMRkMiHP\nc7a3t6mq6li/hsViwfnz5ymKgqOjI6cTkZTlaDRie3vbGTpjbLPkO++8kzAMuXz5MleuXKEsS370\nR3+U9733vXjpYZv6f+Pj1pVsDzco/YS9a5e5dOkSVVWxsrLiYLxY9aZpyNKUfttoA5RFCdoeW6aC\nqD0J2V92+mmFUVLduLq66uC+bOgsy5xlFrm0dIKWIitJKXarMaX9VrcKU76noBARPcki7hKTUlwl\nGYrukPcS2fFwOHTv2+v1nN4hSRKuX7/OqVOnjik5iXqE0z2a/gYjnTKvDD1dkhIS71/CrN+FP7sO\nK1vUL/8VqrdCff0yzXyMf+IU5fMv4w8GDN9ynslzL1ItMuKNFapFRjZesPW+d1s1am04+PJXOfrU\n40wvW2FNOAwxjUH7mnycEw5DmrImWo0oZyXhKCQchkwuTRltDSivTikWJV/8z/8HHvnff40vPfGU\nCyeVsueJdNWg3arZY+30TIsW54e2MldK/lGQza3gqc0+yHsYY/ja174GWCd0+vRpRqMRvSTBVxrj\nte0GFxPbuzSdYhZTixi0t9Q7eIENF+oKlQxt6jOI7eE4YFFGPrcIY+ub+P0/+Dhf/vKXSdPUpRiV\nsk2Hzp0758R6URSxv7/vQqzZbMbW1pbLQuzu7jpj0ev1OHHihEtbnj9/3oUTH/jAB3jXt30bcXZg\n60T6N3fi1a3TOQxOsHdwyOXLl5nP54xGI7fhwOa3XQsy34dm2cVHBeFyIZQFKM/CuqTXClk0RnsO\negqCuDHVKP+XPg/OGLXeSry3pC+7Cj3ZlIBTOsr3FcPS7RSV57kjlY6Ojo7F0hJr13XtOIXBYODO\nR+z3+1RVxdHREYPBgKqqWFtbc9/fV9h76BtMf82SaEFMzzeURUNSTW2B1vyAJllFXXsOPdrAHO3g\nrWxgypz6YIe1hx+ino7Jr++y9tDbWLx+mWqR0bvrFKP3fDf1/jb7X3yc3b96kcnlCTrQmNoQr8WM\nzqySHS1sSDEIqPOaaBTSVA3eqiY7yvFjn5WzI6ZXp2ycHjLZmbPYX1B/6H/h/v/0v+CZF19x4h2p\nqJWskDTGdf0t2hSzClvZdJuixdTtWSaebU3vVIwFUTxwRLTneTz77LPUdc2pU6dYW1sj9D38MEEV\nCyuqUriDngnNkqzUnv0MrDJStapKFdtwQ4UJplg4spL+Kl97+RKf+MQnnMZF0Gwcx477Ei5sOByS\npqkjYgeDAadOnUIpxfXr111q3vM87rnnHkajkSvp3t7eptfr8d73vpeHH36YkZljZvvQX3eNcN7o\nuGXGIa3hypUrHB0dOS/b1Q2I54A2bm9KCGO81RNU16/YuC5b2GxHnlkE0TQWSmLPdpTqPgkRRGTS\nFUGJpRYD0W0SK6OqKocmhFUXZCOGRA5i6R5CIwYmz3PXX1KEKGJY5PO6nyNFRiKyErUg4BCI53kk\nccR0NqcfRwySGPIpRd3gFwsgwVQFYVNZtV/b9ETtvITauhcWE+ivUl+/jH/mPtAes6/9NfHWFtHG\nKrNXXyNcGbH27/8geAGLJz7PK7//b6iLitn2nGglIkh8opWYclFy9NoBq3evkU9zvMBDRYoyrUhW\nYxaHKb3NhCqrKFN7/8J+QBB6ZFnJ6599mgfv/yyv3fmgqwmQ64yiyJUey2NdpakVG/lLjYP2QbUn\ncPut8EnKqdWyf0YcxywWC1577TVefPFFTp48CcCJE5uEYWKLqcrChqxhD4rUfha03Z7awivRWpRz\nwKZWJeSVz9zzVvnN3/wVptMpb3/729Fa8+yzz2KM4cSJE6yvW12KhKzSd0GQxNmzZwmCgPF47Iyj\nHHm3WCwcuT4YDOj1erz1rW/l4YcfZj1oMPOZnfeoR+7dHCH5N3IOSqnfUkrtKKWe7Dy2rpT6jFLq\nBaXUv1ZKrXb+9jNKqReVUs8ppd7/f/e+IpEGaz1XV1ePsdGyANxGNcYRQCigFUMppWx/v6q0p2Sl\nU5RpCALfQXFZEMINiJ7hxkpLqcOQxi7yfyESu9WA4tG6dRTy/t2ycEEFQRC4QjLRMIxGI0fClWXJ\naDRy3aPEw8znc4qicIsnSRL6/T69JObwaGwPe1EKXcyo4xWi+XXLvLcng5m6wIy3Xfcjdeq+VlK8\nAmGCHq5SXXya/KWn6d93P+XBdXQQsvod72P0/v+YxTNP8OK/+AVe+b0/I+hbVLf5thOEgxA/8Tl8\n9Ygqq0jWEtL9Bf3NPhiDH3vtaU8wuGNINiloyobZtTnGQHaUUZUN07IhnRc8+at/xN975Ftcau7w\n8NAJpXZ3d10aWRCc44LqGlNlLTdQLXmpMmvPnWgJyqpAFQtn2MXoZFnG9vY2s9mMyWTCfL6g8SJX\ni2HSqdVASKjgebbBjhfY7RNZw2FqK6JSbUhCY+X9ZvMcn/zUH3L58mW01rz++uu8/PLLLu0tPRik\nC7UYwclk4vgoKduW5i8ir5Yai7NnzxJFEaurq2xtbfHWt76V1X7szhDFDyBIiMpvfG3Fh4EfuOGx\nnwY+Y4y5D/iz9neUUm8H/j7w9vY1H1JKfd3PeO2115zMWLywQOt+v0/7fq4WwtbT2zbjTuuuNU2R\n22PNFKA1OoigqW0KrRU/KaWObXJpbSZIQjaxxKOi5ZeTnsWQdFOS4vFvZNal0rKuawePJe0k1xcE\ngUMSkrYUYyIqyqqqnBcty5LNzU2Gw6E9+9LTzBcpo9GQqiwIm5I67FsDMTgJiyMLrxdHkC9QYY+s\ndwLj2/b/eCFmtmdPFzvYQa/fgR6uUo8P6D3wrcTv/n44+yCzL36a5z/8SdL9lDItKaY5o7PrVFmB\n9jV7z+zT20hoyho/8ohWIpLNIZsP3kU0SjB1Q7qfcuXxy8y2bZu0aBgSDQIGd/RZu2vIXXeOyIyh\nzEoe+4H/hEceecRxKlK0BTguRzQmTpzWVPbMCT+2MnylIU9tJyapd6hy21UstJ5TDjASA7S7u8sr\nr7ziFJuNH9kwLO5bYVU2R/VGjruwLezbtva5PQVeBUlriFp5dl3AcJNnX7vGpz71KXZ2dlzL+LIs\nSZKEwWDgDruVDF2apuzs7HDlyhVHlndl5kJKdquIpbns6dOneec738nZrQ3UeNsVKqr+OgZDs/vq\nG9juy/E3hhXGmD9XSp274eEfBL67/f9HgMewBuKHgN8xxpTARaXUS8C7gS/d+L7b29tuQ8hFdguk\nJI3nugp5/pJ0lN9bgYryQ6uSLG0lm2oqtKndxhQSUrrjSA5ZuAMpjJIFJ8ZCJlGpZVt0wDXakPhV\nFu2NZzsIkdklNsXqX79+nV6vRxzHLl8t+gU5uUi6CovEW9Kn1hnW1HWDptWIGUOlI4IqpQ56eFVu\nFwziQUQAACAASURBVIfnk/c2CabbqP6q5XSLFBX2MNNd9GiD6vKLBBsnCc4/SLF6huzC55h++d+y\n/RfP2eYkgaYufJq6YXF9itKaYpZz9rvvId2bsnLPJqa0peMHz+/QO9FD+T75pGBwx4BoGBGOEpqy\npFyU1EVFnTdEI6soPHPvOvkkZ763gH/xc/zdn/xHvOzdx1e/+lWXwpS4erFYuB4ZTdNAEGAa09ZY\n6OPNVqSVmx9jigWqGTkyuSxLV2cDcPHiRc6dO8fu7m5bARnjtydYOQLSbw9M8sNOibgtDTdlgfI0\nZnHUthHwmUYb/MZv/I+OVJZDisRprKysuMNnjDHs7+8zm83wfZ9+v8/Zs2dRSnH16lXG4zHr6+tO\nmHfy5ElOnDjh0IYghs31NZjutJm8CnXinE1b77yEWUzeiE1w4/9pKnPLGLPT/n8H2Gr/fxq43Hne\nZeDOr/cG0npcmpfIhAmK6BJ+WZYtW34pbT2EnLDtDhTBVmSaBvwI4y07DomY6ejoyDXiFO/fbRcH\ny7ZwgCt86vYk6FYQilETVCFiKVmAcRzT9202RPTwXaMjaU9pkd/tS9nv94miyBGQYjgHSUSW56wM\nLEkZ+hpVWcPqpQfUQYJOx5j+OioeUo9OEZUTysGWbXqSDDGTXduUNepT717CP3WO4B2PkJ94C5MP\n/zMOH/s045cuMbp7015nEqF8TXqYkh2mBIOQ9bdsMb18yOD0Gqas8OKI+e6Epi06itcHrN27gRf5\nZOOMfLygKWrSg5TsMKcqKuq8JhgGKAV+7BP2Ay4+9jxf+OGfYuNjH+Lee+8liiIODw9pGlutK2tE\n5sfG97JhW86qrYC0hiJsy6YBpY+d8yG6lRdeeIEnnniCz33uc+zs7LTNVgrb+0HbEnhT17bCsiqs\nYWgqV89haiuJttLtVp27eTd//Kef5vnnn3eZBeEURMsgmRfhCqQjVlmWbGxsuFPHj46OXLgt1ahy\nhGO/32dtbY3z58+zub6Gnu7a8gGsUaQxNJeeprryktMCvdHx/5qQNMYYpZT5dz3l6z348Y9/3Al/\nHnzwQR566CEH59M0dTGh/JDNbB1921ZOOgGbelmJ1/yf1L15kGXZXd/5OXe/9+0vX+61Z23dVd1V\nvUhqbd1CQkgCFAjMgLyxDMMMhvHMGAezRIxnPAbLMwEeNmOP8WDjGSEWS6DFGIE2hKQWoLV6q+7a\nq7Jyz3z7dtczf5x7br1iCbphIjp4ERWVnZWVnfXeO7/z+31/32UywKi2lP5C3stdBApeQq1WK7AM\nPbJo9eUsQUof9Gq1WtBa9aHXhWBWcamxAv29sizDMk1i7AJg0hwFjTNoY1n9a1Z4pF94TR9u1qtY\n1j0362kUU/EskizDEBZyMkB6NeU8bdn5bl6h8hOzjCsyMtPFGHeQh84j92+DE2AdPoVceZB4+zrd\nf/NT9K5v4DXLVA4tMNzcp7zSZLjZprzaVPZmpgIBkzCierhJ7/YBlcNNkvGU0lKdYD4j7I05uLyl\nOA6GwPZt0jAhnkhszyKWCYZjIA1JGqWYrkkSpvh1DztMGXcmXPr1L/PgaMKRH/1f+OBvfYSNjQ3q\n9Xqx6i3MYrRpS05KwlCiPOFX1BtNqFAagQRxj+zmui6HDx9me3ubXq/HcDjkypUrrK2tUavVKJfL\npJ6HGdSVN4Q2i7Gcgj1JNFHbiiRUhSOPRMC0ef7GXT74wQ+yv79PEAQFzqE7oWazWeAoQNE16vd9\ns9lkMlGmR5VKpRCgjUYjFhcX2draotfr4fs+73znOzm1dgJz3M6l5DFSGIhSjc98+Ff5zCd+V53C\nP7E6/4sef9nisCOEWJJSbgshlgGtBd0ADs983aH8c3/q8X3f931FFdT7fcMwCj6CXg3q7UBBh0Wo\njUSYo+/5ekbGEcLzEeQyXP60u7G+rWfdevW8p98wGmuY9ZKcdUIGinEEKLYemiWpf17XdanEXXYm\nbuE7qWnBuiso/m2oYBLdScxagmkRjRQmYRSTZhm+SLDcMnLUwUZCqYkhlY9BFiZIr5r7KWZkpPgi\nYZoZuDJTXoqDPUZuA8e2SJfPYV35Igcf+yDJNMYwDaLBhGQS5UlR0HroGNODPqXFBqbvMtntkCUp\nMs2oHm2RhgmT9gjLtRhsDagfn8NvCgYbPUzHwPLz1j+TSCEoL5cJ+yHYIAyBV3dJw9whvOXjlG3C\nfsRzH3ueR1f/HX5tlStXrnDq1CkWFhbuM99NpYFpe+rWzhIwnNydPL4fH7Ab6mMoujtNItPj7c7O\nDpcuXSpuddu28V1XJalN+vdMYPTD9gpzWyxbbYCiMeP5M/zyL/8E3W636AJ1UZdSFq7QnU4H0zRZ\nXFwsQFHtA6mdtPSaXxPkNEALMDc3x1NPPcXDD53HDXu5rkM5Y4vGKgwPePLsId50+D9T3XWW8RP/\n96+97EP+lx0rPgp8b/7x9wIfnvn8e4UQjhDiOHAK+OM/6xsMh8P7vBL0bRsEQTFXafGRZVlFnoCw\nLLXTNk2E4yLTGDkZqTTlHJ9QarroPn9GLYedFe/oW0jPsECBSWjgSB9QXdk1S1K3ebNOyLOKweCr\nH0Pmrlb6e83SgfVGQmMqsz+b/pmL4JYsIwynGKZJYJskllq1CQFYaixLMCGeYkilLTFkHtFmmEjD\nQmIwjWIiKRgYJRIMuHuZ4b/5x0RXvkLt1DElrLLzVann4DVLBV26fnKVNIyZHvQoH1qgcnQJb77G\neKfLeKdLGqUkYULtSIP21T3SKCaYL2EHDskkwa15SqDVD4lHEZP2hHgck6UZ8TjGb3pMuyGj7RHx\nKCaZJCyfbPLSv/8U3/P6i7iuS6/XK7o4/VwJw1BMKNNShzUXPklNnU4UD4YkRnJvjak7Riklc3Nz\nRQd45coVLl++zO7uLoPBgCjJlIjKr6iNRBIrEFJzBnIAnGiqwMvV83z8E5/i61//+n0K3VarhWma\nRWEYDoccPnyYIAjodrvFxZEkSeFzqj0dlpaWivFCr7grlQrnzp3j4sWLOMMdhXXYLngl8CvI4QHp\n1tV7EQ5JnLM3X/7j5awyfxV4GjgjhFgXQnw/8L8DbxdCXAHemv83UsoXgN8AXgB+B/hhOUsYmHno\nVksDdVEUFbOlPtRayZhlWd42Ksdf4QbKCQow/BJGpUY26uc2cVMwHUQehadBSL0C1AVAry1nDWY1\nRqH59roAaMbmrJO19oLQmg2tt9CHfuM/fZJ0OiwSrUF1B7ooaTcp/X31zKn5FPV6nSzLaDQa7O/v\n43l+Acx6MkROh0gEY2ziKMSc9phaJUW+8QKIpkyxMYSkO5oqDwbLpj8YEkcR/nO/S/jlTzLZPSAd\nDGk/f43yagvLdzE9B3++QTqNsEs+wWKT7rW7lA4t0Dh1GGEaDG5vM7izix04WF7uixmlJNMYv+Ez\n2BxQO7FAEipsIZkmpHGG6ZpICcGcj1t18Zsehm3iN32aa3UMx0SYBlkmGe+PSaOUOz/5z/mmb3o7\n586d4+DgoNg2aKk9Oj1NgM6mUB1ZruZ18/2+MeNanWXFc6wZsloWfenSJa5cucLGxobyoJiEEDQQ\nXhmQUKrnXYQK0ZFJzsxNIzb3O7z//e8vCr/uFkqlEr7vF5upcrnMaDQqzIX6/X6httTjZaPRKKTY\n+mfd2dlhNBrx5JNP8pa3vIWWFamLwquAhEmUwKgDgz01DgmBMC2E+8oIUPDythV/88/5o2/8c77+\nfcD7/qLvq1stTUbRCK1OqNKtlW61tYAlyy3AlNglUjeH4yJMi6x3gNFcROS0VX3wR6NRMTpoR2kN\n/OnadZ9hqbgX5KrBTG3GMcuS1CtHjWdo3n8rG7CTJHSkX6w+y+Uy4/G40AfovbbelmjhTP4cFm2z\nNv6YTpVNvsjdk1O/ToyJ69iQmWRpjJvFiMoC2eCAyK1iGSbjaYTreWxubmLbNlVLYn/hN5CVOtO9\nA2SSsvPVlyivtPByN2mZZYw2D7A8hzRKCFbrGLbNYH2bNFTbhtJSk8GdHYQhMF0HY5wgkUTDkPra\nAskkpnt9B7eirNiL8SHOsHwbMwc4hTDI4pRwGDFpT7Eck+k0oTTv098YME4kN79wize94xk+lNYL\nsxf9XBqGKgJCGCpd3cht4sw8ycpylL+k45ElUdEt6C2S7gI1ppSmKXfv3uXTn/508TqvrKxgpyHG\n+mXCu7dIw4jKk+/EyNWtctxBlBqMa0f5mZ94X6F3qFQqhZOXHmc9z2NjY4NGo1HQwCeTCUtLSwX5\nTZP39HiqRwmdot1qtTh//jyrzQqyv6MMaywP6ZXx4wly92aeBUPO8MxDkv+iQ/knHq8aQ3LWhflP\n5heUSiW2t7eZm5vLb+J7f8+wXdLJCCkzZfgS5diDZSlr+yTfM5sW0Wh8j2Y7Q1TS1nD6TaFp23oL\noZVyGkQCitFDdxSaoKI/1t2E67ps/vRPsfz6C7TzTYa+JeCefkIXFQ18SimLNlIDs8UmR6j8RCEl\nEkhLLUQS4glJFIW4ngdCguXD4ABpOmSZZDJR9vw3btxQFNzkgOkf/EfSKGK8taOs4habpBu7eK06\nYXeI4VhEgzHBYgO7UsZbWmRw4zb9a+vEwyneXAVpKk/JYLFBMg6JJyNMxyAaxQgBk70ebt0jmcRI\nQ2A6JjLNsHyXxul52lc2yaIEmWYMt6eYroljO5QXS4z2x/h1j2SaUDtcJbvTZ5hkPP2/foD3fOAf\n80+ff565ubn7/D2NNEKGwzxTIjdlMWylzJwo521phxjGvVVzv39vrac7VV38p9Mp6+vrfPazn2Vp\naYmT+9e5/dEPsfP1beJpgukYHHnzZ6icXmPjU19m9Rsu0vw7/4APf+x3uHz5snqf5oI/HUCjwUh9\nMRiGQa1WYzQaFSO2/qUDbLS9wNbWVkF4Onr0KO9973t58MwpRPuOYn1W55VJbhIh926RjXq5v0Ra\nhFULO7h3Nl7uGX2lh/r/r0en0ykqqjZQqdfrxYrG87wZhWOmXvihMjw1ggppZwcRVJFRiOGXVLGw\nnbwly1SU4YyblKaYDofD4knX1Vm/KWYdkYGCEamxAj1mzKZzz7apYRhSNxP2r97g+N/9Nvr9vvKI\nzAU/+u9ovwjdRdi2zWAwYH5+nuFwWAiudMeRJDGGzJiEsQrJDXNwzK9gZII0k5jhCGlUyZwSz710\njePHjxNFEYPBgFarxdztP1Qzp+nQv3VbiZtOHiXudFl642Ps/OHXMW2LsDtg5W1vwDm8RrK3yf4X\nvwyAUyuBIUgmobLkEzDe7RAsNDAGY/zFOtlmB2EI0jjDKbkYloHpWri1EvFwSu92h/H+kPJKjfGu\nWhcH8z6jvTHCgOpqjUl7ijBVIY+GEZZjYqXqzmv/xu/glxuFeM0wDDUXZ1mB0itHKH2bqNdNB/jo\nCwgoYuxnVbv6++qNxhNPPMH5z3+UFz53mf07fRZONDj7LQ8RDcbsXFrn1meuAbD5x7/NBenzkc8+\nU4CKuivs9/tUKhV832dra4tKRW1R9vf3Cx2NHj908dD8F8uy2NraKi6qEydO8C3f8i28/oknsMf7\nSMtCuGUgt9JvryOHXWSuJDX8MsJ2lMeqzCXnr+Dxqkm2bdsuZj2tLhNCWWgbhlHEeIGyeVMEF9VC\nKkNZsyBEyckIkoQsUoGoIrcg15LWJEnodDqFS7MmJek8Ch3AohFlvdbU/o263dRfo0effr9fOEEP\nBgPFY3jmMk7Zwz72cNGNzJrF+L5fJGlpwotlWUWb6fs+BwcHRWFTeRQSOdzHNzMmUUJmOmROif3u\nAENIFSYrJZ3egDtbu6ysrLC7u0sURSyWHRZ610g2bzJ98WtYgcdo6wB/qYWMI0pnzmAEZeonVsmS\nlEPvegtxp0P7s59i+9NfoLzawnRtsijBtG3skrLkq51YQSCI+mOChTrRcEJpsYphmdieSbBQo3J4\nHjtw2X9hi956h9JCgEwl470hpYUKdskmjTK8qksWS7q3uwhDHWzDNnCrLtXlMppj2332Cm97y5PF\nTTsajdRhFwISHVugJf2RInv5lXzlqNbgs8HG+lLSr60u5pVKhX/4wz/IOy5/nusf+zqGaXDxvRc4\n8a6H2H3mNhtP32T/Soe9jQGbd/vgmqz/1qc4efxocQno7qDRaNBsNovVNMADDzxwH0MW7on7ND1/\ndXW1yKHQZK3l5WVe85rXUE4Hajtj2CqDQ4DsbiF7e2SDNtloiOEFioMRhwjHU7iD+cp6gVetOPx5\n/o6aEairrba9koalaL/RhCIC3TCVEs621X47nKgnwHaRMy3kdDqlVqvd94YACp6F5jZoRehs2pI+\nzLq70OtOvUnR3AfDMKhWKtz617/I0mtPIuPJfZFlWiGq2ZeDwaCwA9PrU03H1p4Oep0rpSQrLxBl\nAt/z2O4MGEUJc82GilRLErqpReAps5rt7W2QkpVwC/Hsp0n2NkiGQ6b7Xcz6Aq2Lp/EW5nCXVsj6\nbYZXr1B66DFW/8Z30H/hRSY7+6TTiOaDx5i0+/itGsIyyZIE03ewAo/ejU2qx5cRhsCwLbxGBWGa\n1I4tUD22RDSYMLi9y7Qzwqu5WK5FGqX4c8prYXIwVEXUV6Ipr+5imAZWYFFeKuGUbPyGh+VZtBZK\njNOM7p0eD3fuFJ1aHKt9PprJqAlK6NwJVxUJR+lw1HqXAoPSv/TlYJomx44d4xf/0Y+y9uHf4OYn\nrjJ/fplH/9H3M94fcf1jl9j6yhZ3r7YZT2JSKZmmkqs7Q1782g7f+dCDxeZJP/SB1+8tgJdeeok4\njgtsQneX/X6/YE+ur68XnxsMBpw4cYJ3v/vdrNQDZH8fIDe3EQqAHLbJ+gdgqmxUhLjnZSFzRelf\nl+KgXwxdGFRqsl3kNMxKqAGkUCGowvFym++QbNhVoSzTMTKcqjQs00ROh2SS+0RMml2nQUTNJ9Dt\nvT7gmm49i4PMai7+ZEYmkN/uGY1qSSH81TKyNMd0Oi04G/r/rRmZlUqlSD72PGV4ooVWamxR69Y0\n73qm0ymd/pBLzzyjdBauhYjGIAzGsfp599sder0etVqNE9kusr/P9NZ1wusvkE6nlNZOYLaWqDzy\nOIZXov/8ZdLRiOpjT5AebDH4yhepPHAGt1bGqZYY73QwTJPh5j5es4rluwQLTdJIeUeOtg7wWzWS\ncUiw1KT54FHSKKZzdZNoMCIaxximGjNEjj0YpqByqIEdOCDAawTqa8KUoOXj1VwVVV9xCQcRTsXB\nq3vUfZsozrjxC7/Gtz71BjY3N4tbHykVHjPpF7GJMo7uUZ2zRInyhFloZTRVWQPWaZry1re+lZ99\nx8O0/9lP07nR4eEf/AbO/lffxQv/4tfYvbTJcHekZOc1l3rTp+rbLPgWTcekl6TUnv0SQIFz6TF1\nMBgwGo2oVCoF4Uqvq0ulEs1mkyiKaDQaxUo7yzJlQpMkLC4u8s53vpOLFx5GDHaBDFFqgF9FDveR\nnU2FM3iBShg3LWSSIGxbnRVdPF8hIvnqxeHl7EMtjNIdgp6z9TrH8zw1+yMUHVSIIhMAVEamYaqq\nLKM8K9O0MeE+fKDRaOA4DsPhkFKpVGjitd25Bgl126nFVrow6D/TX6e7Ej0SAVT2b2N5Fub8IYQX\nFKpOXUxmOxDtxaAFN6ZpFge77N9bd+7t71MqlYpR49y5B3FMgbRd2uOY8VThCpubm+zv71MuBSxv\nfpnwxa+Q9Tuk4yFWrYF/4hRmUEaOB1jLa4xu3qT+2tfin3uc6fUXOPjqs9iBixz2CM6eY7LXIQ1D\nRpt7VI8uEbb7VI+v0L+1xdyDxwk7Q+yyT9gfs/SNTzLebdO9cpewO8QuOZi2RWNNheAYloFTslXO\n5jQl6o3w5yqK2hunmJ6FMAXJNGHSmZJMEoZbQ3XIM4lTcSjN+xhCKJLVb78f27bp9/vq8ghqyGSq\nDGHHPTVuprFqvaNpwaA0UKvqdrvNzs5OQWm3LIsf+sH/gh/x2rz0f/02hmXwxPt+gLlveCsv/Nz/\nw+5zu2RJht/wCFo+btnBdEzqR6rUVivUbJNUwu6XXlCEtbw7nDX4CcOQXq9XWNzp9flmntMyGAzo\ndDqUSiXK5XKxwnRdl0ceeYTXvva12OMDNTJ5OfszHMOkXzhfyyTBcPKVpRD3TG/SuHDRfiWPVw2Q\nLJVKxeGd5csDxZpPH0TT1FkUiuNOmpCN+xhuiWwyzLMschAqb6My5H1CKM2paDQaCCFoNBoFIKnB\nSN29zJKTdGcz+31qtZr6X810Fo7j0P3dXyFYqGBEA1KU2azmQ2hPByEE1WqVMAy5ceMGR48eZW9v\nD8dxWFxcVJLuOCUL4wKoGgwG1Ot1qoGLzDIOuupQzDUatHMZrxCC1cV55sabxP02ZAnjK88TnDqL\n1VomCxW+Et+9RnzlBWpPvJnJS89ClmK6DtWjS2RJinAMBs89Q7DUpH9jC7dRpXdjk/rpw2o9d2SR\n/q0tDr39CcJuH8t3Wf/o75GGMVmSESzUiEdTTN8hjVNqa6vYlQ6D23vEYoJb85j2Jgy3Otgll2QS\nkUUZ4TDCb/jYga1kAXNqPEijlHiSUD1cxfZt4knCjY8/z9/+kf+eP765q8Y2CyUkSxNFk9Yu0aap\nCFK2D26JKJXFmvDg4IA0TVlcXOSf/OjfJ/iVX+K5L97i8JNrnPpvfoj+5z/B9f/zA3Tv9LF9Czuw\nccq5+ZCdUlkp49Y8Oje6GJYgMAW9/QnOvFXgWFp2r31KarUag8GgMPuZjUdotVoFpV9vq3Sw09ve\n9jaWqh5y+xr4ZcUKFgZy1FFy8ekEwy+B6yv6hZufhRyMVUSx9J725GU+Xj336fywSXkvvGYyUXO6\nPsSz4TFplqksyCRSxD+3pByPsiRnw6Ek3JMBpl9RLTfqAGvwb3ZM0QdPv5B6xJmVXQP3sTZn2Yz6\nhTUMg4ODA5Ik4fL7v8Dy44ewG02sNCx26ZoXr9dkW1tbjEYjjh07VuAqmiwzq/Dc2dlhbm6uQNYT\nKZiESUGxHY1GjMdjBoMBp9eOY176OLJcz6myKaUHLyoSTLmO6ZcZPv17+Bdej7G3zvi5LxeMUqta\nxS5XSYc99r/6IuXlOQzLpramQMpkPGXa7hMNxlSPrRCcOAnhkOneAfFwQml5jv6tbSzfYbLfp35y\nlcl+j3g4ofPSHSqHF/DnK0T9MdEwxKsHkEk6N9tYnkX16BzBQgV/vsZ4u03Ym5BME0zXII0zDMtA\nphlOxcGwDCadKS/92I9x/if+qXqP2BUg11lMB6owGEb+e56m7VUZDIf0ej22t7eJ45jv/u7v5nvP\nL3HzfT9Jexpx9jsfYflb38XWB/8Dm0+/SNgL8esepmuSJhluzaWxtkDn2g6mYzLYGBD21UbLFvcs\nAKfTKeVyuciR0Erba9euFRjU0tISo5FaNdfr9WKsdV23yPKo1Wo89thjPPTQQ8jdl3JpuMr0lIN9\nGOyTjvoYtquKv+Mp4Vd+mQpHGf6QxzvM2u6/rDP6Vzvif/mHBuO0/Rdw362tuQOFrDsNixdaoAJD\nACXX9koYXqD0FnGkZk9x76af1VhohqLejuiDq/0kp9PpfZZ1s9sLLbnW33NWSdpoNMiSDGSGtXCI\nvWFYMC01QKX9AgaDAadOnbpvfNKmtnpeDcOQQ4cOFTRhy7JAGJSjdlGotre32d3d5YEjS7iDLYxa\ni+j6sxjlGt5bvguj1sSszTH+o0+S7Nyl8k1/k6y7R7ixjkwSTN/Dbs6pjMzOHpPNParHlkiThHQy\nJUtS3NYcpmfj1MrUTx7Cf+Ai4e4u6WhI3B9TP3mIZBziNask0xivXiZs9zEdC7dexrAtRlsHWL6L\nXfJIo4QsTvEX6hx/xwXO/eh/juUo4lUyDpl2xghD5CxoodS2loEV2NiBjV2yMR2D/p02V/7ef4f/\nzKdIM+UtWljFW9Y9cZRlIyyXLFOFcG9vj729Pf7VT/44f2PjEs/8w5+jdqzOxR/5ZhaefIIXf/bf\ncuvjlxjtjLACC9MzMR2TYM7Db3gM7h5gWAZpkpGGKWmUIjMoWQaurZidswlqeptVrVYLNabnebTb\n7cJkVscneJ5Hp9Nhe3ubg4MDGo0Gb3nLW3C76+rm9yoKmAcFQE6GOQhrqMIgpfrYUJEN6bCtlMug\nsmj1xy/z8ap1Dhqg02DgrBxaf6z1EIZhgOvBqKN8AoddZReei0nkeEAWhQgvp1WbKjNTdwFwr0jo\nFk9/rDEHLbHWqjkt0tK6DK0O1V3DrBBLSsn8XIMN3yKJJeaR84hM/dva7XYRUKKZeYcOHSJJkqIQ\ndTqdYoW2u7tbzKWTyaTgfgiZMRpPiWWJIEm4ceMGo9GIC6ePIW5+hdQwMfwy9tEHVIuZSYz5I4w+\n+Wv4F96EqLaYfvkTYJq4h48T7++QpSmWMBjc2sJfaFA5f570YBvDtsgy8FpzhLu7OPUaZn0O9/Aa\n4dVnsGwY3N7BcG2SaUTj9GG61+/SOLnCeK8LiURkGbM+P5ODPl69jDBHxOOI5hvegHfiAW7+/M8S\nDScIQxAPx9iBo4pS1SMaqVFDG9ciJeFAkeIm7ZBpZ8KXfuxneP3Pu1gXnlIgpEVuApveM4QNqiRY\njMcdjq4u8cTgBs/9wN/H8iwu/MCbQErSyZhb/+43ObjSxik5WIGNV1eKT8u11FbGsRFhqqI5uyHR\nKOdHZIpXE9Q9shwn06zXWVxJr6dnvUBarVbBxAyCgP39fcbjMbVajfe85z2cProK7XWwPbWWFSay\nt62YwoaJUaqpC9MwFWPYL+VpctV8xM4DhieDV6zKfFVXmbMHVW8NdJutb+1iK6A9+eJQceiFgYwi\nBTpp7rgQeb5FBtGkwBB08dFjgTZu1WML8KeMZWfNZmZTq7RkW4uuIO8IvvCbGJbB3NkVJtIsgE+N\nn4RhWNwOjuMUOMOVK1cKotX+/n6hwNMrTVAYzPbuXmGwevfuXUzT5PHzp3H2b2I2FlXyk2lhDAZ8\nwgAAIABJREFUnX09xvJJsoMNsvY2wXv+a7Adwmc/hwzHCCAbdDAD5eA02dyk8fhjZGFE2t3DWjys\noh4Cj+nePs5cE+/Uefyzj9D+zO8yurOBTFPqp48gDMH0oE88CfGaNZJJSGmpiduoYLoObr3MtDPK\n2ZEOYW+EVws486M/jOn77H7oVygfmqe0WMcKXKKBIkAJ0yAeR2p/n0lMx8KwVSfiN0uU5kuUl0v4\nTXWbP/fPfiF3ec7TqYQATQ6yXaTpYIQj6i8+zeR//h955qfez/z5FY6/4yHsckA0GHH1N/+Q3voA\nv+ljBRZe3cOreRi55NzyLKadMWSS8d6YNM5yeYV67VzLoHXhZCEJ0ICzfh9p4FM/tLhvNlZxNBqx\nv7+P4zhcuHCB1772tRjD/XwDk4FpIyddZHcX4kiR/vKcWBmH6gzkWZ3IGQMcI+cI/XUBJGdZYZrs\npG/3Wf/F4obW5hqOX+QTCkMBd8RRQX7JBJgyA9sjm6YFX33WTl5vAjQGUYTT5oSkwWBQ5GfoUUez\n2TTSrLMktK/hZH0Ly7epP/YYIqixXFaYge4yNM8iDMPCVPfGjRucOHGi2IFrspVOQdJhsqPRqMBg\nBoMBpmly8sQJxPrXySYDyAKMlTX1RpgOkJOBymBoHYaDO2TDLkzHmI0F0t4B2XhIGiZ4a2cwShWS\n3btULj5O+4tPY+918FdXiPb3MB0L+9hZst4Bwz96nmBlidHdLaL+CNNzVPp2UKZ/9RZ2yad++gij\nTfX3hCHIkgTbt4lGU2QG1cPzzL/5dWTdXcZXXyRLUqL+iGQSkkUxTjVAZhl22SYeTLDLnpKO5++L\nZKq+hmqAU49JJhHDzR6T7pTB73+E8uu/MU/RFkCmqMOWy/iTv8KN//e36NxoU1kp88B3vZbJfo/S\nSoutp5/j4Mo+Msvw6y7CFFieheGYpFGKW/PIkow0ynUQ3aniaXQnyFR9XpgCyxD4T30r2dd/ljiO\ni/fPLJtT40qgLsdut8tkMino+qBAy6WlJd773veyUHahs6to4KWGSuOKJghb2f0JSU5sEmqs0Gt/\nUOng5IUhTdSEZryyXuBV1VbMOh/N3uCzt+49LkR2jx6bqIKQjVUOoozCXJJqIcw8pyCZ4jilwnFq\nPB4X48KsRZyeD/WYMauQ1L/04Z2ldOvcC33QNz91GdMxcM88iph2GLuNwqNSYxn6+3meR6/XY2Fh\ngZ2dHRYXF1lfX6fVahX+gNo+Totyut1uUciWnBgx2EaWGhg56UcEDeSkT3LzEsbaa5haPv7d54jv\nXsOaP4T78BuZPvtFkn6fLJGUHn4MmaYkuxs4xx5k/MJX8Rtl+uvK4Kv6+OsxF48y+uyHScMIu1wC\ny6B+4WH2vvCHuLUyhmlhmNC8+ABJv0/UG1J/+DyDl64wuLNDlqTUTh1muL5D5cgizSffwv6nP4lM\nJck0xLBNaidXCdt9Jvs9/Lka07Y6JNZ8jSxJKTUqJONQ/azTCKTErZeZHPQpL89heTbmRpf+i1co\nP/Xue54Llks2aLP5b3+ezaev4lRdTn/7o9gljyRKcWolrvyHzxMNY0zXxHJtrMDB9q17OpwkJRqE\nSAl2YBENYwzbIJkkOCWbsK/W1Eggkzx36yUA5ufnWV5e5uDgoGDHAkUehe46NRCpowY0EP/Wt76V\nxx59BDHaUWORV8nTu4A4Ih11FYU9jfN0LleZ+8gMEVQR4egeEJupqD5h20XxeNln9K9wvv9KD73n\n1StGfVB1261ddnUHARlkCdl0qLjjMissvISpvCVlvu4kSQDjvrZOjyizu2fNjpzVVMxmWmq8Y5Yw\npedFfSNobGR04zZLF+eJrl3Cfd27C06EjtazLKsAYDUhRivser1eEYyqORh7e3sqaCUvVPo5WWKA\nkA5yPFQO3LVFJWEf98jam0RrT2AaJv7+dWQ0Vd3CoEM27GKvHEfYdzEcj2wywnB9rOYi4698Fvfk\necbXr9F67GFEqYp56CzTr3yCLE5wmk0wbQwvIGnvMPfwGcLeCLuiTFyjvT28YydJo5uMrl9XG6Kl\nOSonj+Kffx3168+RjQf0//hpZJJSPnkcyxYkownZNFTGwJbSayQTBd469TK1wwuMdzq4NZUIJvoj\nTN/FbVSwgvxCMQ1Mx2Z46y7p3iZmowXDNvsf/GUOvn6Z7q0uK687ThpGDNZ3aJ45QufyLbo32oq7\nMOcjTIFfV11LEiYYliBLJFmSITOJMI2CdOmWHOJhjCEN0mlKFmVqODcMLo8VEzeOY7a3twsAvNvt\nIqUsSE0Ay8vL9Pv9ArDW2RQLCwtcvHiRIOqp97NbUt2BMMj219VoaDn55wTIPJ3LtJRvRTQliyMM\nx8+3FEpWTpoqItQreLyqmIPGFWYzMfVB0Le0aZr52KHDSfK0IykV6y2cKD29YSKzDJnEyGiKzKPh\nZleI+oXRs7zm1GsylMYlNCiqx57ZNSNQsCR1MtV8rYwwJIZpYJTrZOMe1ZLCTsrlMjqsRhccDUxq\nV2pdELRfYq/Xo9VqFStLTaE9stjKb4k89VlYyMo8cjIg271Fv34MxzJxp21FMzcs9fN0djErDawj\nZ3EfeA3C9REyI964QTbs4aweJ7xxmeqbvgn76ANYS8cYfuJXIY5wj5wgnUyR0ZS0s4NZqSMNE7fV\nxNCbpLl5+s8+C1IyafdIwwinVsZuLTG99Hn6l19kdHebsDfEqVdwm01Gd3cY3t6ic3WdLEqIhxPS\nKMFr1bArPv5cDbsS4DYqhfVbsDSH5bukYYw3VyPqj3FrJfyFBk7FY/dD7ye+/nVu/cLPceXXP4dh\nWTz0X74LMklpdQEyye1PPcNwq4/lWaowGAKv6pLGCcJUtnYyQ/lQRGkBhspM4rfKGK6lnOezDMMx\nCaNUdSKBxe29bmEWrFfY4/G4CK7RakvteK7ByUajQbVapVwuc/78eU4eXVX5F1LF6gHIaV/pTmSW\n08CF6pKQCNtVo1ee2Wk4voprkLktv5R5Otcr85B89bIy89ZNz9magqxvaj0O6Hg6hKmqpusjp2Pk\nZEgWTpTgaqy6CcN11RPheGhcVq/9Zi3qe71esX3QDjzAfdsHPWpoSrO2ANfmsNoYxrIsxAtfIg0T\ngqUm0fZdRHzPSFZjKisrK/eBobp70Xvwer1e8PxrtRqO4xBFUZGwfKLpI/vbBYdBlJsIv6o8IU2H\nTvM09VoVM5ki4wmivoQMJ4SXv4zz4GsRfpl0fx05GWLOLRHtbDLd3af33HNYS4fxTj+EcH3ijetM\nLn0Be2EJmcZkoz7OkZOkUaLs+dIUwjFmqYrZXCALI0SqDvX+pat4tQrVc2cxXYvRC8+SjCd4zSru\nXA2EIJ2E9F54AcMysUoepucoIdfaClmSECzO0XzgGE41IB5N1ArUd7ACn2C+julY+ItzWPU5qidW\nscs+wjCoHFliut/mxi+9n/6dA4697QGcik/7mRcJOwMOLl3n4Mqe6hYbPm7NUfqNZqCwPsfCsEyE\nyC/bRCp5RmCTxSmlxTpOxScZxwhLbTAMy8C2BGkG8xdP8eKLLxYS7CiK6PV6dDqdwhOk2WwW60vt\n46ETsV3X5dSpU5w7dw4nmShGo+2BaalCMR0pnMF2cp2EqX7PUrW5yLUjwvEUQzSJc/NlMy8i4p6L\n9st8vKraCn1z69xIvfbRa0VQK0/Fg5AIxycbD4oZS+QorHADZf6pY9CzFEz7vjWmRoZniVXaUFb/\nme4MNDip15p6LNCdgLYqA9V9xPtjTN8mHodM79xUGQmbL1Kr3bsNJpMJSZIUSV6zmg5NZNIp33pO\n1avUk4cW1b81TRXRp3UMgiaMO2RpQl86zNWryuQmmULQgFEb49AZrGMPgOVitA6pQjrsEl27hLN6\njPKFxygfXSUbdLGOP0x84xmsuSXibh8ZJ9graxCHxHdewl0+hBFUVe6FZZOOemSjHv7p82AYTA/6\nrL7jzbjzDSbr6wgkdkXRyqcHfexymdqxZRCCsDNk2u5jeQ6WqwJ2ZSZpnj+p1oWOj7u8ijffIs4l\n4tXTJ0ijGG+hBaaFWW/hnTqP4bhkcUL3yl2iQcjKk49y8m+/k+HmPiCJ+hN6tzt0b3exPAu7ZBMs\n1BRW4VjIVJGsEMoaT9nco7YmhiAax5RXmzQePI7lOUpOLtUFItMMJ3CozvuIh9cKjYZ+j4VhSLVa\nZZiTrzY2NorOQassO50OV69eZW1tjYceeojFqg/9vTyxK+dqTAbIcJwbKqcYQbVQJAvbxdBOV3mX\nUHho5jRykBBPeKXH/VXVVmhqtAZj9GHWK0eN8irQR61yDL+k2GA69tx2ctLHNE/DMvL5SxRjgR4N\nNNlJH0q9WtK/63FCdzOzrZ8ef/TWYpYzYWHh+BaVQ/OUHnxYeQdU5vBcl0pOhKlUKrRaLUajUXGD\npGlKu93m9u3bhTOWxlna7TaDwYAHji5jOl7+71dbmkQKGOyRJgk7E6j5NuzfRA72FAmss002GUHQ\nwDrzesX5CMfIcMLkpWcRXhk5HWPW5vDf+QMYjUXGv/8hojtXSQ62qL7p7cpZa6DcjI1yjfD2VYVR\n1FuQZkoGbFikvQPMUpnqhQvIcIJpK2OXaXtAGsaYvo9d8YmHI4TnY7o2brVEGqltgzdXxZ9vECw1\nCQ+6WEGAs3pUYSJ+CdO2MByLbNDDWVzGP3Uee+kI1qHTjF68zMbvf432lU3m3/Q4q09dZLK9x8bH\n/wBhCMa7Pbq39sEQypKu4VM53CIeT3P2ZC4Pd2yEaRD1R6RRShqnqO25xA5clt7yBP7aafyFJtWj\nLezAxq26OBUnJ2wZbJ97vLCe0yxXTZOv1WrKTSrflGlAvN1us7e3V1yIqyvLKjbANAvbNzk4UP6X\nSawOfx6xJ8Op6iLy7AyZS9dlmiDDCTIvFDLOI/tkdi9o+mU+XrXiMJuBqIVMs7wDbR1X6C50wpCU\nGK6nVplaoWkYGH5FvWlNS4ltJEVh0QdZ/64xAw1EahAyCIL7JOSzDlKzAOqsdX2apkzvbipEu+wT\n7++StbfI/Ab0tjCQ+I5K+u50OgVIqgVllUqF1dXVwjFqfX2dO3eULPl4q4TpeMr6fDpE1BaRtofV\nWWeQmmzGLnPVEmLcQQSNfJOjSELm8illgDLpK91/okhipUffTDbsYh0+hTF/FLpbhM9+gSwKMVwX\nYdlkvX3so2dIDnZUxJtfwqo3CO/eAMPAPrSG2VjI32wS68gZZfLrBWRphlVyqb/+TbhLSwhLFdCo\n0yPuD/AXmmRpilNRIKNbK+MtL2F4JZyyTzoeMnr+GayFVcK9PYKTp3AqAcIv4Z58GKOxiAwnXP/n\n/wd3Pv40jTOHOPrNbyDa3mZw8y6Du3vE45jR9oBkGmM5Jl7Do7RYxpsrk4XxvW4hk9gVn3QaEfUn\nJNO48JPIEtUZHPqGi7gnzyO8MqW1NYRh4s8F1NcWcMoOwbxPabnOv/jFXyo0Njp3RYv19CirwfVZ\nr9EgCFhcXOTixYuUsol6vSxX4WvxBDnukY666r9lhsy1I0ZQUeNElqluWqA4D4Yy2FWFIlYU+Wiq\niscrXGW+asVBP0EaV9BPnPZ0mLVQs23lYASSLBznc1WUEz3yDM18lYMQOU303uigXwQNUGpzW13F\ngULToU03Zp2DdUejA3k19lBY0jfn8WoO3at3ceZaJNs3iX7vl6C6iN++jjDtYmuhlagvvPBC4QSl\nxygdXmLbNkeX5jH0bGm5SqJru8hbX6PrthhJi7lGHScdI6cjJWcv1RVyXW4qgc7BOnLvNunWNYyj\nFxGVeUSpiv/Ud2IunyJ+4YtMv/R7GKUa3vEzWCvHkYl6LtP2Dt6FN2KvniDZ2cAoVfEvPIFRqqpu\nzTRxTl2ALCO+/py65eeWCC6+mfLjT5Fu3y4iBNxWkyxOCA96xIMRlcOLONWAyrEVDF/5GxpBmWln\nQDIO1bpw4wZOs4Fz9Axmo4Wzdg6EYPdD7+fZn/4AwVKTY+98DVF/zODGbUYbu/RubDHa7pFGMW7N\nw6sFlJZq+I0ybiVQwOc0JA3jYgsRDyakcYLpWmSxJJkmhP0Ip2zTPL1M6exDCMvGWjgEpo07V+PM\n//RjNE4fpjQfYDomZ/7Jf1t0ubVajYWFhQLY1irNXq9X5GBGUVSkeL3pTW/i7W9/O6dPn0YO23k4\nj1EQ+YTtKKZp3tUajp+D7hNlmS8ERnVO4RGmQzYeKhYxAAKZ5BEDtpPneL78x6tWHPRj1qwVKAqF\n9l3QNzZZCuOeoroO8z2vaSrVmesrdpiVr3eQkN6fjKS3BNopelazoO25NAgJ90DJWW8HPZpoF2qN\nHWTtHazAoXp2DZkmGLV53EffCu27iOYhTJFRrVSYn59HCMHW1hZra2vcvn27CNrRwalRFPHgqTUF\nHnlliEKiTIBXRW5dIWytFSrNIJsgJ0MFWo17ENQxWoehMk+2eYWsfRcaK1hrj8JgH7O5pNKZghrp\n1rVi/AKl7xCuj71yXBWYNCbd21TkoEfejMwkWbetgM1BB4RBfPcq9uoaRq2JMbeCdfgM2bhPvHWr\nMBsxggpCCCqnToAh1K0dlAiOHlGvU55UZVQbVM6dx/RsTN/HbCzive6bAbCPPsj4xee49a//FdPu\nmAe+52041YDh+jbJJKTz4jrtqztE4xiv7lFarOFWA4LlJm69hNdUGw/Ld8nCBNNVORqGnTN0DdWR\nZmlGliqH7OHOiJX3vBvryFlIU8LLX2Z4/Sb1v/fjiEpLPS+tKlmc8T/80keKsVCT6BYXF7Ftm263\ny87ODlIqC3xt/6ZHjdXVVd74xjfixQM1Ejs+wi0hw5FaT48GBbtRGKYC23O3bakt8fL0NykzhOfP\nXJyZ0hxlmRq5XyFD8lUtDmEYFpuAP0lp1r8XktcsAbek2qtEIecYZv5EiZmOQeTGMLLoGmYZkH9W\nloUWv+guQR/+WdNbzd6cdZ0uiFvdXWpHWiTdrkK7TZPwa5/JDUcSkjjBCgdEUVR4Cvb7/SJVe29v\nj16vR7/f58LxFUQ0AtsjsQMyJ8A1gXjCuLTEMFW29V42VXkKtqeow3NHVPsY1GH/FtguotJSh/zO\ns8j+HtIJMA49SPhH/xGkxFw8jLVwCOf4OWQSk7V3FC+/1ipaUH3buA++jnhng3R3HTNv7YXjY5Sq\n2MfOkw07xNefIdnfwgwqmHNL6rZLE+zj5zFrLUrHjqgwnCRB2B7W8jGEo9y4DFfZprnLq1j1JubC\nKrK7TdLeYfPXP8Dd3/kDlt72ZhqnDzPe3CUZhww3Dth/fpNoMMVv+Hg1D8tzqZ86lOMck5xwFZFF\nMck0QmaZ2rxIiEdT0jjFME2mvSlZrNpymWQce8cjWMfOk/X3ie9eZXTzFsHf+gdYZCS3nsP0HEY7\nfRYfOcozzzxTbCU2NjYUfrC6el/sguM41Gq1e8ZAjQa+73Pq1ClW6j5Sg5DCVKNyOMrX9rLInlAj\nRYyMQiU2zJPmVSGeKis420EYplpv6u0SygwH8ddkrNDmK7rl17RkfSi1aKVwhTYdiKaIXGCkzCsk\nMgrVIYzjPDxURa/LNCmAR+0aPRuSM7tK1YKqWSdoHXKiKdezK1bdNejC1n3+JZJJiGHbZOEUOerj\nvfHb1RuNvBvyVaRZuVwmyzKWlpaKeDcNeD704FlV4PwqGILhaEwmJUwH3D0YYDiK+FN1c1OT/g4E\nNURjVRFjBNDbphusIJbPIPwqsr2BUW2pUWPSQ4w7OKcfRQ47kKbYD75BUZZXjiPDCfHty5itZazl\n49iHTwGStLNDfO3r+BfegFGqkvXb2E+8B/vIGaJbLxDfeh6ruQgCnBPnZyT0QhGvLEVSsxdXqZx7\nCLO5gMwSSFPMakORdwwDYbt4516Hc+ZxME3av/cRbv37X6V+9gQnv/+7GN+4QdQf0Lu+QffKOsOt\nHl7Dw6m4eM0y/kIDt1lheFdlNpiOjbAMosGYZBqRTiMVhiRAWCodKpnERMMQmUnSOGPanZKlktZ7\n3osctYlvvcDk5nXqP/TjBHKKfPELuTalzGCjT/Zt31OMqPr1Bbh27VrRrerYBb2yL5VKzM/P02g0\nOHPmjNJPyAzh+MoMN1IregyVKi8h38gpPoNRqhWrcLKMLC8MSleUs7U0RidyirUbIOPpn3ES//zH\nq8aQHAwGxWw/+yRqi7jZg21ZFiQTxfuYASaFMJDI3A4rQZhuTv4xCzNNTTnW5CrtyKT9I3Ux0kCR\nnv+1lFoLxGZdnPQ8KURuGS8kpu8gs4zp5iZ+pYk16YFpke2vMxI+VUtSclzGM8na2tTUtm3OnjyB\nGOxBeQ6ZJcTSpBwoP8HdicTMtRwLVoQc7CHqy8idK8igodR60xGJNBjZDRoiQh7cQgoT0Vxh7LUI\nzIzs5ldzV+IK5vJxyFKSa1/BXDlJ1tvDOf2omlcth6y9hZSZst/zyqTRPml3F/v8U0rDsnGZ5M5L\nZOMRzvIx4u07EIWk+5vYh04S5bTtZG8DM0swW8tqzCjX1GjS2UVOhohKAysPQHYuvpVs5wbR+nX2\nfv/3MV2Po+95O9PNTaL9PQY3N0mjmPH+EKdkUz3cwPJd5TAVRjiVgLA7BCGIR1OEYZAlykZOSkka\nJ8SjGNO1MB1JMkkKt+x4HJPFGZZrsvY9347wyqS7t8nihPrf+TGyu88T3XgWEZRxzr2RO+/73wgH\nEb/wm79VMFtnncO0b+nOzk5xKXW7XSqVCrVaDdd1efDBBykJnaClQqHldKg4CjknQUYhhldSoLuT\nA5W56lQIA1xfjRuGocxuckqDGiNyJ6icG/NKO4dXVbKtDy1QtP4aINQ3vNYmkCWqVXZ8srStnsg4\nQsax4jjIDLIMo1SBcKzmr5werU1lp9NpEUCjR4hZGzhdCDSWoHEHXRh0gdFYyGQyYb4aMG5PycKY\n4d09Gg+fJm3vku3dBZliHjlHpb9O3DiEHPfxPJ+9vT2AgkZ97uxpJeF26gRIYmnimAIGB1w/GFOp\nVLAsi7mSA6lApDHy4A5i7gig9uAHoSTLYK5iIfsH4FSQ+7eQxx8n6G0h925jeCVVPDPVdYnKHBxs\nE1/7Gvbxh8kO7iLmjyCCOlQWiEd97HIHohD32HlkHJJtXSE92EL4ZczGPEalDkmsALskJpsMiW5e\nxll7iOj2izinLpBu3SLLOhj1BYTjkmzewlo5TuYGGG6AqFcgjYhvXKL/+U8yXN+h9dqLRJ026WTM\n9KBH+3OXwACvXqF5ZgW75OPN1QBJMpqS7sXEgzHxcIJd8VU3HqnNRDyOVGCvYyhLunwjYXkW0TBS\nGolUEo1iFh89Qu2NbyXbuUW6v0Hwtr9FeuNrpP028blvwGssEH3uV9n56jrL734blz73dPFeqFar\nBW+mXq+zs7NDq9Wi1WrR6XQKYV+5XGZlZYWzZ04jendza0OnOMRy0i94PBpfKOTvUqo/y6E1mUQK\nh8iyXG+RFitvYVpgWMhcrPVKH68q5qDNXDRVWt/yGvjT24QoUutK4vheLF4ak4VjjFKFbDq65/5j\nmEp3EY4xTQU0AoXRZ6fTKazb9Is6m02hOxU9bmgarC4YWilp22oDEaUSt2Qz2OxhBy7tS1dU+tEz\nX0SUqsQvfQk5fwI7i7HjEb6pEqy6XUW1PX3iKERjzNw/c5qCKYBwzNW9IcvLy6ow+CYiTdTI4ZYQ\n1XmkpfCGgxDK5QrzrTmMeKQSyaMh/dZpRZmNp2TDHtmor1KhvRKisYIMJ1gnH8N5+BvAshWYKSXj\n1EA6AXZ1jtuyzm+/tMfeMCS58YwaX2xPfQ/LVYUZUeRFGOU6Rn2OdNjFOfEQpAn2sQcVaGwrboq1\nuoYMx1inX1cIiwZf+hxXf+ZfYjgWi0++DsMy6F9f5+ArzzNY3yHLJMF8A3++npOrJNODHpP9HsON\nPbIkJYsThJFvIKJY4U6DqVrtOrlFmkRpImJJ2A/JMlmMmKZrcOS7v4Osu4PMUtzXfDNysM9O6TCf\nHlTYGcVkvR02/9Mn6d4d8FLdLjAr/X6t1+vFpaLT3JaXl4tOVeNgZ8+epSLUa4NfVU7SUahWmVmq\nlMZQHHTydD+1wnfV5gowHE91Drk6s8DiDCsXIOZnx3KVAe0reLyquRX60OmiMGvaqo1hNRagtPl2\nvq40lPmFmSsSHRcjKCGjqVJqoliTcZwURKhZSrTegGhTFd2xaMxDdxW6UEh5L3hXW8ZpDr3IEvob\nA/xmie71DWonDzN86XlKT34b7Y9/BOv4OZI//LAqWt1dHKlYmFJK1tbWwHIZZRZxKvGDgCRJMeMx\nN7YPihTyqu8gxh31RsrZnxgmTHrcOBhTK/m4tqWEOnYAhsEwWKJOqGLZTQuztYqxdIIt/zCfvdnj\nylaHK3349Jef49NfvcxLPcm4cQziCe1OB2P9Gcws4ngp49FHHmGzHyJqc6SjHsL1SNvbyr+zuQLn\n3op5/AJGua6KgOUUZB1j5SxJ0ORZ+yjp3qYCyuZWMeqL6mtsm/Zv/Eu6X3+GY+96HeWHHyfc3WPn\n818BCcM8ls+t+thlHyvwSMZTwt6INEqI+iOFF0xDosGENIxIxspUNo0STMckniSkYUIaZWRximEb\n6gIRgixKiScq0HfpkSO4i4sAmHNLbI4lH/jMV/mjS8/j+z6r8w3Sr32K6x9/icpynQ9+7Xqx5dKX\nz+bmZgEuazn2nTt36Pf7xRr9woULPPDAA8jetlJMWo6yfht3FZchnKiQ6GiqQN0o30rkZCbiSIGS\nthplMe37NxFprDZDsfLEEHoU+evkIamBP6BgJoLSXWiQThWG3Lgiy3Kr8VxMAsgkAQTpqI8QRqFW\nk3FYjAn6sAshCtyh3+9Tq9XuM47V5jCaVj0rwtI/Z7fbBVQobqfTISkHeHWPgyu7HPvGc2x85qus\n/d1vY/ql36X5ru8g3byO9eg3Eb/weawTjyDbG5itU5w4caK4SXSBtCyLsmOwua/yEuej1YK4AAAg\nAElEQVTm5rAtEyseQWMVwhGRNLCyiDCRdIcJRw4fIkkzrCxB9HaQpSadYIWmJZHDIUz7YDnIlbN8\n5dJzuK7LUw+sIuaOEKeSer0OwO7uLh/96Ec5evQoWbbH6rEG8XN/gDAtVheP4a2scO1ARQK2Wi2M\nVkaVCfb1r2KNu2QYxKU5bg9Sjs+VCWsreP8fdW8eZedZ33l+3v3udWvfJJWkkmRJlmUZ23gNNjbB\n2BDAZGFPB5iZhJxOWAYCTHcmQ0LSaTKdTsJgQkibAAFMiMEYCMEOW/CCLEuyJVmLS2tVqfZbdfd7\n3/WZP573eVRiuif4nMzx5J6jozqlUtWte9/39/x+3993mT7MEiX6+vo5evQxvnL8OH/07l1QmcWY\nvJ7gqW+x/N3v4Pb3MvaGX0QEXZYefYT2YpXWfBUn75Ib6sHKuOmJH+DHccr+g9j3ScJIbiD8CKHA\nZNOUBr2hXE0mUSKl2KZB5MeIWL6nUTciakeIWJAf7mHibW8Cx6OeH+V7jz9Fp3Ncy+i3btkCB/+R\n5z7xZZIwYfg33sDzn/6yDqpR44KiyKsNmLKJU4+RkREmJibIm5EEYl05EotOHfwWSaeZjskCTFuC\nuVEgjXINU24lHE+OEEksU8wMU+uwDMtJAfkYI1eSBVjdK8G/EUBS6RgU0UjhAUoopXwPACzLhlAS\nnkRXugeLNMUoadVla2U5OgZMia4UsUrdgOVyGRV/XiqVtOHLTz+X9Q5ViqWpOg7VKjYacjUZYxK2\nQ0ZfMsb8/inGb93Fwj/9iPF7X03r6X8mf9dbEdPHsF9yD8np/VjDm8lnPN15NBoNut0ufX19uLbF\nxdTxaXBwkGzGw+3WIFsEyyb0SrhJyHJDkmkGBgbAMPA8B0QEPcP4fkgxm4bH2jYU+iEJWWu02b55\nE+VUZr1Wb+IHoTa8DYKAwcFBDh8+zOTkJKJtkjRrkgkZhXiZDDu2bKIdhGDI4vrIU8/RakXsLXqU\nMjZuZRU/8Xi60uLc49/lxIkT5PNP43kee/fu5dOf/jRPvOY13Lqlj/Z37qf69EGGXvNarEKZYPYM\njSOHMTBwCxmMsTIiTnByHnEYk8QxoiuwYos4jPB6CulqUhAHIXHarotEovVJqqY0bYOwHaZqy9R7\nAUNzGuIwZuOdexh79asQV9zCoeMnOfrj7zE2NkY+n9d8hKFwhZnvPkJjtk5pQ5H/8O0f6/FU2Qw0\nGg36+/uZm5sjSRKKxaJW1Sr/jy1btrB7925orFyymTcsCNspkU9IlXGqGVI08qTblmSmFDcyDClY\nMxxXZ3UY8qKX2Fwa4IPjyZEvif7tmL2oLkHtgFVmBaC3Fa7rytgwkaZsx6FswwwDgeS0W8UehO/L\n6qrWm3GM6Xj6Js9msxoUGh0dRQihk4XUm7ZeKbmeQq1IUErZqUxbisUiq6urhFFELu+weGSBnb90\nLfNPTTF+624ufv3bbLj31Yil84TbbiJjQDQ0SXzsR1SvuIPFxUXNplOsyKWVCmtrawwMDFAoFHCJ\nJAXackAIHBGxVJNtbKlUktsUy8QQMe1umI5QBvbKWRjbKX+fbpPzbYdySdATrYJZZLUVc/iZZ3Sy\n89TUFAALCwvUajXGxsYwx2/AtWzIFDEGJygC0wsrHD16lJGREb7zne+wdetWrrzySi7MznLo0CGi\nKCIMQ/0679+/XyenP/TQQ7iuy/79+7li/yxxGDP27g8jqnO0Dz9G9cQZ6ucXcPIZTEfanLmFbEoD\nTtI/MU4xKynZBog4IQmjdTe8PEBkUZDXSbvSxvYsBBC2I5JIkpzCVkjPpl4m3/Me2Libp4+fpvLj\nJ2k2m/T39+uDZWRkhI29Web/7D+xemIOwzKY+5/exfJffkbjZcpIFtDvpUrUHhgY4OTJkxqXuP76\n6+lzga4P2aI++UV1UYqrTCkeNNJRQaswDQVOitQGLklByXTMTvkRBkjcwc2keJOfGu+auoP4WR8v\nWnFQlVXRSdU2QBUJ9Xe73aaQz2sXG+lvEciZKorSudWF0L+UByiEZJilXYDyXlSp2IrQpN5Qpd9Q\nEm5lEa7+nyI7qc5BYSXlcpl2u83ktTuxohoXvv8cG1+2i+cfPMBV/8srSTptnL5RPCNm+uISG7Mx\nnWteQy0NVE2ShNXVVfr6+qjVapw7d46tW7fKC44AjCw4LokAU8QsrMrQm/Xyc8dSEfQGrWaDPs+E\n0iC0q+BkeL7SZWhoiN6sgyhtodENOPzMM+zZswfLsjhy5Ah3vfKVOK7LxYsXqVarDA4Ocmp2Cdcd\nZLx/hG6rzeM/eYpqtcqpU6c4d+4cP/dzP8ett97KwsIC3/ve93Bdl02bNvHoo4/Sbrc5c+YM3W6X\njRs3MjU1xc6dO3nNPXfzCm8Vq7ARd/JqgucPcvFrXyeoye2SW8phe27qbmRjOJZ0q44i7Iybzt0C\n07YkZyFtEZNQtu2WZ5MEEYZt4aTmt0mYYLkWUUcWBtMxGXjp1ZTueQ2LmREePX2a5Px+CoWC9i8F\nGBoawnVdNrs+7W99maDeol1ps+XX38Dv/uVntFZHdZ7Kt2N1dVUT7lTCOUit0A033MCWLVsw2isI\nJ4PhZuXWrb6SjsIBhiNVqUKtKkndnOJIYg9qC5GyJnE8+TUGMvhJYQ9RqA8VuSJtvWD69IuKOaig\nl8vi1FNhk1oz6o7CzcpdbhRK4E1ZXiUxREj6aODLedSWKxyTSxRoZbQBl9amapWqcIZaraY3JaqT\nWJ+wvZ7xpj4fRRGFl93Khb+4n/EbNzHzzyfYcOs2zn7jcXb99r8j6rSpGR0AqnaZomNpS3r1OkRR\nxOLiIlu3bkUIQTnrgu2QiFRoZhhU1uoaUDUMsCyTbMaj4wdYlrTb68uksWdeDkKf+bWmlgcL06Qd\nxJw/f4Hrrr0WRML56RnGx8cZLBc4dW6Gw4cPYxgGFy5cIAgCrr76ahzH4fTp01oMZlkW99xzjx4T\nduzYwa5du5ifn8fzPDZs2MBzzz2nzW2eeeYZBgcHue+jH6L9va/g7roDe/NVBIceZfqBv4ckIWgF\n5AYKkAgZm+d5mp9gWPJmjboBTiGT4gWGBphNxyb2QynaCkIMyyJsdjFti86q5MYEzQDTNhl90y8S\nXnMDx2YW6Z6pYBirOrFsvSlLX18fk5vGcJdOU3nw72ienyOOEpx3vJHfeeQxjYkNDAzo7US1WiWf\nzzMwMIBt25omHYahTrq66aab6Mm5iI50eMIwpTdJo0LSrMouIk7kFi5b0PiDkUq3DdeT2pegI/0x\nLQu6bVko0qQ3wlSibdmSTOVI0xej0Pdvp3NQBCTf9y8jPAVBQH9//7obwcBxXQiEBiQNwySJQ8xs\nXoIwtkTqTS8jGWWdFiCIEnFZF6I8K9UGQoGN3W5XW8itt8dfn5KtOg1VvFQAj2EYdKyY/GCO+aem\nGbtxMyvHL9I7OUhUr5K1pSaj1WqxoX0B84qbGTJaLCRy1FlYWOD5559nYmICIQTDw8NSex/HmIZB\nEEOz1UKANqk1TQdDJCSQ6kJa8iJNbAwRExs2Db+tsy9MwyCIIubnLzI8PEyxVGRlpUKhUODgwYN8\n85vfZG5uThfpYrHIyMgIlmVx8eJFrpjcokNYJjdt4IkDB6nVatx9993cf//91Ot1SQMeG+PBBx8k\niiKdFr53714+/Z8/ytoDn8T5xXeTjEyw+rk/ojM3T26oTBJGeL0FyUdodTFdB9k6m7g9BYJqE7eY\nk4laQSTl1QLJfjRMkjDCzrokUULYCoj9SG5WW11JkwZ6Jgawf/PDHJldwJ6v6EwJZa5TLpf15mp0\ndJQ+o034+FdZePow9XMLWK7NFwZ38dTffUuvvvv7+ymVSjQaDZQPieu6LC4uMj4+rg8c5ai+bds2\ndu/ejRH6koPjeLKQ15bS0z4VEdq2dBJPwXXDshHddurRIElbWFkp2U4LhCQ/ySxZ2S2keIObS0ft\nWNKxNRr3sz1etOKgAmZVFVbbCUDrFpRKE5AvoJuTrZfrpVxxA8N1SJoNWShiqcM3XOkIZdtSYan4\nEgpUXB9wG8exjrdbXzjUuBMEgZ4p18vKi8Ui7XabWq1GbcvVLB+7j+t/8+c4/+gxRl6yifmnpxl9\nhUniybTwnT1glHZBfRmzfwNlP6Jer+vwEs/z9KwbGg5OIh21K6urWu0XhiEFzyGKE0Ra6NrtNn1Z\nW8bAJSGJ5bFWrTIzMyOpuUmMH8UkQkbAua7L9773fc6dO6eTmZTn4fj4uI57v+2226hUKtx45SSP\nHznF6uoqzWYT3/fp7e1lYmKCj370o9x0002cPn2axcVFHMdhYWFBp4Z/+MMf5t4teYLvfhH3nb9H\nu9nA/ruPUzs+hZV1yfT1SAcm16Z5cRnXkrHxtufi15qYtkVuuJf2wioiEXi9JUzHImi0if1Qek52\nA5ych2EmeGWDqN3FKebwV5uUNg+y6W1vonvFbTz//PO61VcHgGVZZLNZRkZGGBsdwVs5A7XTBKeP\nsHbwGYJqk+Z8g6W3vZXv/vlf0tfXp7NN1GGmWJDKQbpUKhEEAcPDw5rkViqVePnLX8742BiiOpNa\nTSFNXJqrxKsL8nrP5MDMQOhjGiXtyaCMX5KgK79GGVqmql0ZnBvKMUQViCgEwktGs7YHSfiC7tF/\nsTgYhrER+DwwJJ8VfyWE+AvDMPqArwATwHngV4QQ1fT/fAR4JxADvy2EeOS/973z+TyNRuMym3il\nq1CntQyd8ZGUDyE9+tM8TLmmATNfQgRdzFzhUutkGJIzkK5DW62WTizu6+sjDEOdLwBcCs/h8q3F\nemakYkquN6kFmJ6eZtuN2zjz7SOMXLuR9kqL/iuGCdtd3OoCdq4XMbQd6ouIVhUj8HGyPSwvL5PJ\nZKTCMpfDFmrOFESWSxQlWrWpilJsWlhJTK0ugcn+ovRsiN08huURJdIoZufOK8i4DgKT+lqVqakp\nnn32WZaXl/E8j6uuuop2u021WuXo0aN0Oh1WVlYwDIM3v/nNjAwPMT4+zlPHj/Pwww9rm/1rrrmG\nZ555hvPnz/Orv/qrfPe73+XHP/4xExNSgASScHbP3XfzS5MliAIyb/kgUWONzHfvp3phBjvrUdo6\nhuU5YEB7YVWCy46DYVkkUURhfBARxYStLm5vkajVkQ7UUYRpmQjTQEQJdsYlDiLiMCIJIiI/xuu1\n6XvrW5jp20ZmZITxXIZt27Zx+vRpnSZWLpfZsmkDBc/GXT4D52cIF6YRYUC4sggYdNZaVH/1LfzJ\npz+vNw/qGunp6bksNlGpfZvNJuVyWa+8t27dSrVaZe/evdj1iylPRQKKormSOqjbmLYruwOExJm6\n0kFaSq5dbdSithZyqxEArsRnVFaFSsTSVGnjkuWc/a+feBUC7xNCPGMYRgE4aBjGo8A7gEeFEB83\nDONDwIeBDxuGsRt4I7AbGAf+yTCMHUJcrhdVN6PyaVTuyoq1qJKnkyTBwEiTkyPpQGS7GLbUqYsk\ngiiW3gFJfGlGS5F8RXdevxFRqVLr7eiV8KvVaunTQXEk1AWgOhDFljRNk1KpxPz8PKP33sHM3zyI\nX2uTGygiEoPlxw+Qu/IlGHMnWMiOMxpX8EvjeI1FFjoGzWaTjRs3Sp8HFxJTAk2maVBrtqhUVrXM\nW/H2k0SQpNw127bBNIlzvVixzER0RaS1IYmA4yeOc+rUKQ4cOMDS0hJvfOMbGRoa4otf/CKrq6va\n40KFq1x33XVcf921dLo+8/PzfP7zn9df99u/9VusrKzQ6XR4yUtewpNPPsk//dM/EYYhb3/723Vq\n00c/+lHu6u1i9g4TbNxDZvkMK5+9L3UlEhQnhtPVYkJ7cQ0MA7eQk1gSBqYjOz+3XMRodYg6MqhG\nJAmmbZPEMUlXZqZiGJr05JZyjL3xdTzjjbC4uMjVW3pkIQ87FPM5dm3dhGE5WGELp75IfOZxRBwR\npboDs1gmnD1Dt1Jj8fBZZl//y/zXz3xRXxvrRVSqC1UAt1pZZjIZent7CcOQxcVFWq0WN954Ixs2\nbID2EoabSyP7XESrnobR5OTo4GVImnW5lYiiVFWZbuCSWAoOAcNxSVoN+XUqtAYhxVoKqBSAiPVW\nT7IlX1jn8C8uPoUQC0KIZ9KPm8CJ9KZ/LfC59Ms+B7w+/fh1wJeFEKEQ4jxwGnjpT39f1RWYpqln\nv/WJ1Wrk8H2fKI5lZUwkGJOEXcnzbzcxbE8bWqhqmoRB2k5d8ohY79WgmGqqOKjnkM1mKRQKlyVu\nqTVnp9Oh0+loUw8FZKlV59KuW1k6vkLcDnAKORoXK+RHell68MsYjsfgxUO08qO4i1O0y5toNpuM\nj49LO7FCnsTJY4qIMIyYvjjP7OxFRkZGLhONqV16o9FgcXGRQi5HN0o59V5WJi63axSLRS5enGPq\n9Bm+9KUv8cQTT2AYBh/4wAd48skn+djHPsaZM2dYWVlhZGSE2dlZut0ujUaDl73sZaxUVpmZmeG+\n++7TY8T73/9+rrjiCg4ePMjWrVt5/PHH+Zu/+RuKRenXcMstt/Dwww/z13/917y8cQx73520R3fi\nzh1j/r/9Bf7yGpbrUNo8AonAzkufATvj4hazWBmH/OgA2YEyludg5zI6w8IwwM7KRDMhhNxmWBZh\nu0tQb5FEMYM37OPRbTfzJ/98VG8egiBgamoKkSlirs3gnTuAe24/1swxornTEqgzLQwnI701z59k\n7egpzv7DYQY/9n/yB5/4K40xKKByYGBAq3ibzSaNRkNbAQwNDWkezMmTJ7W48I477iAbd7S8GjeH\naFZI2g1ZMEnVld32JZt5y9LrR8XmBCSAGfiS8+DKfFdiWdyEkF2HxC5cSZU3lGNuyqT81ywOP3VD\nbwauAfYDw0KIxfSfFoHh9OMxYHbdf5tFFpPLHsVikU5HovjlcvmygBnVtiuVpHSCcmTLZJgpb1ya\nWYgkkSiu30FF5BkgsZd1kuv16yXVGqpioYJ8gyDQuIMC56Iousx7UkmulWtULpfT9m5ewcXKuCwe\nOkf/7g3MPXkKb2yc8NTTGCTkmguIToPpC+c18Dc2Ngbd1ObLtIijiOXlZQYGBvB9Px2xLG0zprYm\nV0yMg2lQr9V48smf8MADX6HSChHZHtrtNkePHuW+++5jcnKSgYEBbr/9dr7whS/QarU0h+Pmm2/m\n+eefp16vUy6Xue2229i6dStf+MIX+OEPf0i1WsX3fd75zneyedMGjhw9yute9zocx+Gzn/0sd999\nNxs3bqRWq5EJG/zHD7yHrXMHyN7zDmoBZE8/SftH3ySotzFMyI/2Yzg2mdFhgmqdsCW3S1bGIzPQ\ni+nY2PkM2YEeLM/Fcm2tqAxqjZTTIIi7gczTyGcoTIzR+Y3/jT88XqNYlqlg+3bt4KqrrsJ1XUZG\nRghaTbnNSltz0apJSnESk/gd4voq3YuzLB98jsVDZ/He+1u89Tf+vcapAK2kVdocx3EYHR3V4LQy\nDBobG9PhNL29vWzatInh4SForcgDzvYg6iLqK7JrcD1Ep4XhuroTEH4Hw5FuZ0aa5GY6GcC4pI8w\nTekAprgOkdzUoItNpDsUTZ2O/j/ykExHigeB9wghGuv/Tci++/9tT/L/+Lf1M77v+1rfoAqDOq11\nVqVpy0zM1EsPy8bMFyVxJEnWefanL3KSaJaYUmUqU1e1hVA/X2kYfN/XZi7qdAiCgE6no92y1Rik\n1pHFYlEzL6//2//C7FMzZHoyzD0xxcj1kxSv2AEI2qeOEy+cpb7xWtaqcrWlQCzflAay9Wabk6dO\nccUVV1AoFCgWi0RRRL3e0OSsJEkoFwsYIsJKIgYGBpicnGTHjh2cOHWKv3/425w6dYqjR48yODhI\npVJh3759nD17Vs/blmXxhje8gfn5eZaWlnRXsmPHDhYXFzl8+DBTU1MMDw9z9913Y1kW3/qHf+Sq\nq65iYWGBP//zP+eWW27hfe97H0888QQ33ngjzsp5RmYP0tj7KtYim8KFg8x87nOsnjyPW8ziFHPE\nfoDl2iTdDnbOw7RNsgM9GAiSKALbJgkjrFIvdk8PTj6LX29pHMnrLcpxKYwxbYvSdS/lmz3bed/v\nfIjh4WFuuukmRkdHmZqeZawshXWbNm1ifmUVYdrY49uxegakBqexRtJpES3N0p05z9rx84gYwre8\nlQ/86X2AHNsGBwf1OKpIeQq/UlsttdlS+SNra2vqnuGee+6hr68PwyumwKCLaNelNNuy0wAm6ZpF\nGGDYUkAlOg11c6XYQyiLQRxdWl0qx3XlExmla0yBvEeCrta46AzRF/D4mbYVhmE4yMLwBSHEQ+mn\nFw3DGBFCLBiGMQospZ+/CGxc9983pJ+77PHJT35S6yv27dvHtddem74WlxiKKnDGNE0QJkSBzKgI\nurJgRnL0kN7+XTmzZi39eZFiGsqKTnUN6iZTnIZGo6G3F67r6tNV+UoqfEFpNNSYopB+tQE5uBpS\nnihz8cBFxm/YwOqpOQZf4YLtYpfyJLUKSXWBJEnYsnGcII7pKZXkqlK4rKysMDg4qNeq7XZb/ywF\n0OZzMs6PxISgy1onYv/+/XzlK19hz549ABpHGBoaYvPmzZw8eZLp6WnW1tY4ffo073znO9m4cSOf\n/exn9Rh355138uSTT+pOIo5jbUhz7NgxFhcXuXDhAt/4xjfodrt8/Nd/iR/t3082m+X/+OB7oLeH\nYGQ3rmnj7n+Qhe//M3EQYjkWhm3j5hwpfvJDDEsKiNxSgdj3sbwMhm1hlfqBNfzFRdz+PpnvCKlJ\ni0lQa+EWsnjlIqV9L+FU/17ilcd497vfzaFDh5iZmeHee+/l2WefZaS/l7HhIaKUz9KKTfKWIw1z\nPen6RRwT1BosHTpN75Xb+NM5weG//qIOKxoZGdEaCdd19fu9detWpqenNVaTzWa1ClNdK0mSsG3b\nNkZHRzGjAHJliANiy8VorBDXKvIQc1zZ1bRqqZu6l2II0t0s6bakZyqpu3S3jZEt6FgG2Q3JrEw9\nkoBc+1sWP3zqMD/af0jdyT9bVUgfP8u2wgD+G3BcCPFn6/7pYeDfAf85/fuhdZ//kmEYf4ocJ7YD\nT/30933Pe95zGcFIob1qU6FGCsVHUCsZI5PFCHJSY+H7GJmMRHyV6Cq1ykrRKo1jDA4O6mRj1fap\nmz+fz19mNqs6F7ViVTemer4/7XFpGAalUonFxUW2//5/JPrg7zH/9EXGb9zI2mM/oLhrJ/HaCq1z\nF7D2vJJrrh6XVT8IpNMTsJKuGQcHB+XmJpbAYrPZJJPJaHNSz81Qb7aZmZnR+/Zt27bxrne9i9XV\nVdrtNk8//TR9fX1s376db3/725w8eVL7GV533XXceeedfP/736darer1XLFYpFqtcuzYMYaGhhga\nGqJWq/H1r3+dRqPBhg0bGBoa4sCBA1x55ZV4Y9v4i9/5n/nEJz5B/6ZJZqs1RKdO7xN/x8yPn8Ip\nZOWK0ZGXmOU52PmM/lgYNt3lFelZ4Hp4o5shConqdQzLJKrXiJodTNfB8hyCegunkMPrLVE/exFx\n8Gl237OZmYkJzp8/zzve8Q4OHjyox7UnDhzirpfdxNyaxC2Wqh22eHIWF0lMtDxHa3aR1eMXGHrT\nW/jIg9/jzJkzlMtlzdNQrNr1pLgwDJmenqaaros3bNigC4U6SJIkYd++fYyPj0v9i+UQY5CYDk5r\nhai+KjsA00KEksRkZKTRrpHJSSVmJH0gDdfTgKNhmOBmZLccpR1Gus3ANBGGgYGUD5AkGNk8t7/0\nGm6/fp8kEdouv/9f7/vXKw7ALcDbgCOGYRxOP/cR4I+BvzMM412kq0wAIcRxwzD+DjgORMBvCgX3\nr3uoXbNhGJqyDGiptgIkldtzLidfJMN25F7XkMeKCNI5SqSc8ziSs1r6c1QWoSo6YRjqMULd3Pl8\nXt98qtNQz2O9pb36WO2513cjjUaD3t5eDs/V2HP3y1l65IcgoLO8RtA4hOXalF/xag6fn+GGYYfF\n1jj5fP4yYFQVK+lxGeMY0kMzDHyNljfbXbJZKeABOHnyJKurq5r1ubS0xOTkJHv37qXRaGjj2tXV\nVSzLolwu4zgOR44c0XOxbdvMzMzoJG+1Yj1//jzj4+MsLS3R09PDysoKuVyOt73tbSwFFl/49Cfo\n6x/g05//Mq997S/QV5tlbXoat5jDdGytkMwOljEsEzvjYmWzJEGAgWSZWhkPd2CYpCXNVJM4gTDS\nWRJOIYvl2LiFLGGzS/3sRZIwIur4xPNnuPGGV5PJZHjooYf4hV/4BaIoRAhpQ7jaDugvFwniVMvj\neIjKDJ2TR6k8dw4rX8D6jffxvk/erxOv1fs8PDx8me2bAqTV+67A6JWVFT1uZLNZ1tbWKJfLWJYl\nPRsKBRKR0GpLRaTdqSH87qVVo+2mQCsYboakWZMFwkwDok0TIxHgurIjzjhpgJMh/SK9VH/SacrC\nF0kSmOG4Esso9kl/jziQf17A418sDkKIx/gfYxOv+B/8nz8C/uhf+t7qhVZ28Mqb8aeNYOM4lh1R\nSoJKuk1dVUUUSdVaqy4Vmmm7RRIjDEmiWp+svd4kdj2+kT5vvX1QhUNRYYMg0KKa9RZx663rFVEq\neOWrqd//Tfq29RP7odxezC6TG5xgTxRibNxJvLhCu92m2+2mQTe9eF5Gd0vNZhPLsvTF1tvbS6PR\noNVqaYB1YWGBU6dOMTMzw+bNm4miiImJCW0Q8+yzz9JutxkYGNDEry1btjA7O6tJS9lslrvuuotv\nf/vbGk/Ztm0bN998M3fddRdJkjA/P8/g4CDz8/O85jWvYWBggIMHD3LNru10hcktt9xCcf/XidN2\nNzc6gOXa+LWWJDlZJpbnYnoeSeBjZfMkUURmeECSezopey+JUsMWZQMoBXadlRp21sOvNelWaoSd\nkFwi6F44S+910qx13759/OAHP+AN976e1bUq586dY//+/bzzjfdiZWUcgCF8oueYiqAAACAASURB\nVKVZkgRG3/HrPHDwDN/84z+nVqvhOA59fX1YlgR/M5mMjipsNpuX6SjUe6Q8GhSZSo0U4+Pjmkpu\nOw5BOnqWe4qIxbVUOi0QkbyJ1aaNMNTOTySJ7KqyBdkdmBaCSG9YME1tYGzYjuT4YMgCYnuSNZmT\nDlvSx8H4t+PnoArA+ptLte/rnZ2VWxRCSK64ZaVbibYGWBK/I6mm6bpL8me7GKkPXxzHrKys6DWU\nApIUqWm9rkPJtwFtSqtuSPW9lEZj/aiRyWQ0vfnc/DLljf08/93T7LxnB91KjbgbULQSjIGNVOot\nstmsjvqT/I6YbNZMAcg6tVoNgIlNm/Aci7Yv2ZybNozjhxEXLlzg+9//vuZoHDp0iJe+9KVMT0+z\naZNcldq2TbFYpFar0d/fTzYrLeps22b37t3s2LEDz/N44IEHAHRocRiG3H///YyPyyXTxYsXueqq\nq6hUKuzYsUNTvm+5+SbiKGZ7tIC7+xq6pw6RHx/GymaJapIEZDo23uAgZrFH0p39rnSgGhhAdNtE\nq8tYxR6JridCFgwM/OUV6ufndQeRRBFho5MG6UaErQ61qQvknvtnNl/xciqVCv39/Xzowx/hU5/6\nFCdOnGBwcJDv/eQQP3/LdVhOHuF3sYfGKbzlThaqTQ4d/ntWVlYwTZOBgQGWlpbwPE8L6pSf6Prg\nWzVyzM7O6pE0k8ngeZ42j42iiJ07d0rFrQHNVJFpRkE6UoQYxV65YUsS8LuyE065DCKJ05vcRsRh\nCrbLU1+EqfjKy8oiYxgSf0oTrwzXk9aJqRhRiDQeL4lB51n8bI8XzQlKAW3qRVecBiW2UhsMlacZ\nI9cxZq6UOvCW5DcyDNk5KFutJJaorpsFkeibWtGifzowR5GjCoWCPh0Ut2G9yEqdFuvdq9b7TqpN\ni/oarydDeazI4pF56TcQJnQO/5CusHTRcV2X+fl57ULd7Xap1WoYhkGxWGT7tklcxyZOh7IzZ85Q\nazS114WyOU+ShFarxT/+4z8yMzNDEASsrq4SBAHj4+O0Wi1c12XLli20222effZZfv7nf55bbrmF\np59+WvtmKLq67/v09fXpbUaj0eDChQtcffXVvPrVr2Z1dZXz58+ztLyCH0Z4k9dI498kBhHLDBED\n7KyHNziAWSxLoM2ySXTORoOk08Iq9WgloVUexOoZpPb8OVZPTuNXpctT1Pbla+gHJFGCnc8Q+6F0\ngpq7QF+5qK3e9+7dy7333svIyAimafLQQw/RNbMkhokR+9IuzXZot9uasm9ZFktLS5qM19fXR19f\nn7yc0kNjfX7p7Oys7jIVhtVsNmm325TLZY33OCYEUXzJ7KW1Jg+xTC71XpBbNwWOim5HZ05IJyg/\ndYLqogObTGkbJ/zUit609JgByJE6NYKRo0fqEuVmodN8Qffoi1Yc6vX6ZWIoBfQpPcP60FvP87BM\nQ5I6pHu/pJG6sn2SL4hN3KiS+F05x8WRPKlSg1ilklNvqNpWqJtL3ejq+axP4lLPD9ACrEwmo1tJ\nxS5UJ00YhkR+RGe1Q9AMWTtdoTDai3Xj65hfWdNMUN/32bFjhw5EmZ+fT9HvDKODfdI20DQJo1jP\nxNVqlZ/85Cc8/PDD7Ny5k9HRUaanp6lUKtqi7NChQ7RaLXK5HKOjo9xxxx36d221WszOShrKhg0b\nyOVy+mvVtkYR0rrdLtVqFdd12bNnD2/85V/i/PnzFAoF7rrrLjbN/oSeYJX61z5JcO4EQWUFkSQ0\nT5+hvSw7H8PxsHoHAUiaNYkJ+R2SThur3I+3fZ+0sesdJgm6rDz+JJ3lqnwfUmAt6vgk3VDZNkhv\ni3xGag/iCLF8/rIRL5fL8ZnPfIaxsTGuuuoqDh48mI6Z8oCxAhkpsLKyoklvikYP6E5R4U7dbpfh\n4WE8z9OHi+oWlemPupabzSZbtmyhv78fI4m0DYFngqgvysKQLZD4nTSrI9VOhD5muT/lOsguwvCy\nEoS0pLs6piU7CceV7MdEeTmYUmwYRSQp61KkPCCCNHE7CiSF+gU8XrTioJBfZeqiOgj1Iitqtbox\no0gm9iTtJoZpY+YK0o7eTEkjacCNYRpyVywSFGNbdQfruRTKjEO1heoEWc+BWJ99qL6PWl2tH4WU\n9ThcytLMDeSwHJNsb4b6bJ2Bl17DbCO8zMlakZHiOGZtbU3zJorFIgYQJYLK6ppW/B07dow/+7M/\n44tf/CJPP/00Gzdu5Nlnn2VmZuYyYLXValEqlXQ25549e5ibmyMMQ3K5HHNzcywsLDA8PMyv/dqv\nEQSBpo2D5J2ogtPtdnnZy17Gu971LvxQhr/efM0eXvXyn0MEXYIzxzEtIXM1E2n6GrV9Mr1FnHIZ\nq38Ew81gFuTHZqkPf2UVM5vH3rgDEYVYPf10zk1Re+4kUVuGy0Qdn7AV0q02IRFYWQ8RRvjVFlHH\np1OROIBfWUNUl3QSusKD1tbW+PGPf4zrupw4cQI7aMjAH8cj6TR47rnn6Ovrk7yRclnbxav3LwgC\nHV04OjqqsTAVYagA7mKxqLs4dY1ceeWVlHOedH5OORBW0NBBuIaXld1ukOZMpI7RQjEmTQsU8O53\nZAdgIAuc35WdhONJq3oDeRDmShiul+aAmFKj0m6kTEsrTd1+YTZx/78wmBVCaObher9GdaJfFqZr\nSffdpNuS38iwNGJrOJ6MJ/c78vNpwfE8TxcBFaKrZNqqvVQSW8/ztPBKjTrr/SXUx+qhRiHFr1cA\n5vjte0kiQWe1g5118O5+p+YPqO1Jt9vV4KNt24yNjaVzv0+9E2Ckz1MBtydPnuTQoUMkScLk5CRP\nPvkklUpF3xCqoB45ckQHpywuLtJsNtm+fTvT09Ps2bOHarXKAw88wNTUFLfffht//Md/zAc/+EFG\nR0c5e/YszWZT08RvuOEGPvLrb8eIQ37yk5/wmttvxnr0sxiGgXfLLxKcOULUCUiiCL/WpLNcJWi0\nJG9hYFSDYCLwiVcXiZbmsbKeBMu6LaKFC8S1VRnk69hgmTg5D7eUk8EzQsbUdVZqMgE7iPHrXSI/\nojlfxV+rEzdWNXhYKpV0OPOPfvQjMpkMU1NTBGGEGUckKxcRccSxY8dYW5NdnDL1UWOlaZraiEgI\nmfauOlt1vahCUi6XabVaett08803Mzw8jJGEiPR3zxlRGpDrYAxuxuwZxOobvsRcNGXmBKRivjjC\nMG0JKmbzsoP0cpLkZEofSe0HKWSMIUhauVB+DkJg5stStq1UnC/Qnv5FKw7qhhRCaBReteUK/VUn\nvGmashswzDRZO5TrIMDwvHVgTSDFV24G4bcg3USo0aLZbOrOQJ0OygJOFQv1OXVhqBZSgVLr6dUK\ngFI3ryoMmUwG93W/id+UXoC9W3o4PT1HNpvFdV0qlcplBTCOY4aGhi4jXp08eZKFpSWEECwvL7Ow\nsMDk5KTmJNxxxx089thjrK2taZWhIo3Fcczf//3fMzg4SKMhT8nR0VEGBwfJ5/OMj8s16mOPPUYS\ndPnDP/xDvvGNb2h9ifK13L59O3/yoX9PhEmj4/OKl+wi/tZfk7niapKZY7SFjTOyETubIbv9KsJG\nm2x/D/mRfrzRjdK6PhVRGY5DXFvFrzbIbt+Ds3UP8eoSmDZJs07cDdP4OhlXF/khIhYkgWyf/XqH\noOnj1306K13irhzb2stVgrMnyFmCUqlEb2+vfh+jKGJmZobh4WEWVmuIyjThzBSx6WjHJjWOrPfo\nME2T1dVV5ufntY1APp9nZWVFX6cgu1/FmBRCMD4+zo4dO+jJZ8FypY+lYSDqS3KdaLmSwmyYkO3B\n2bgDq28Eqzwgw34yOTlqmOal1LDUml6kZrJG6lliWHYadWekBrSpxkYksmMJA5J2TY4TAKYjR4wX\n8HhRtxVqPZjJZPQIoU5KVckVKKlJI1Ek27JCj6ykUaTzEAzbRbSbiG4bs39MA5KKI6+kz6rqq5+j\npNvrgT7DMHThAPTKVSlGt2ZjZqJLar1MJqPTujqdDmemL5Lty+LXfQb2ThLn8/i+r+3hFDW7Uqlw\n5ZVXkkQhrU6XtbU1arUaTzzxBLlcToq6lpYYGhpi48aNjI+PMzIyctlWx7IsxsbGaLVa+uaem5vj\n0KFDjI+Pc+aMtFC/4YYbqFQqlMtlvQo1QplX+uSTT+rNTLfbZWJigk/98e+RBD4XujFbiyaVv/0U\nvde/VOpAWjUyuRyirw8GBqWICEF+80aClQqAJKolMWYuT1xdAdOi763vgdo80eIFkqCDaLforqyR\nxDFx10+zLKWxi5OzJQ4HWLb0QDC6MZgQdqRrdHupRmdhiWxzid7eXnp6eujv7+f06dMkScLMzAx7\n9+7l2498n9+463oZ0Yek0A8MDGhLeWVmo6475eNRLBaJ41jrTNZHKiq+jDo0FCPV6lQRuTLtToei\nFcvowk4Do8eTRcLLy3HCycjiGUdYXkp+8lsYltRPJO16usZcJxsQQmJsmby0L0hkKpnhuoAtA24M\nE2GastAIIXVJhgHmC2NIvqidgwKQ1qdpqxtXsc00r8C0091uV3LGoxDCgMRPEV4VKGoYEuCJAilk\nSunO60VLatugOgiFRqvRRp0IqjCoAtVut/E8jx1uh9Cw9SiyXiSmaLamabLv999DvRWS270P3/f1\nqZTL5bQSdfv27XJ8CSN6izk9A99www00Gg0ymQxPPPEEzz77LF/96ldZXFxk06ZNzM3N6aK6devW\ny76v53kMDw9z9OhRnn32WQqFAs1mk+XlZa6++mre/va3UywWOX36NGvdiGuvvVaDafl8npGREf7m\nU39O0YpZtnoYzyQ0HvprSldsl69xHBNVFrAQBLNniWsrREsXsRyH2skzuIMDYNsIkSA6TcKL5wDI\n3fEr0FgiWpyRykJDttNBo41pWyRRrHkqludgWmmuJRB1I/yaTxRIPwfDNIiCmKgT0V5cRazM0tvb\nqwvwyMgIYRhy4sQJTpw4wbFjx4gyJezhTSRrS1x99dVacdlsNpmbm9OdQ6FQoFQqMTw8rA+RRqNx\nmfeHwiBUZxrHMVu3bpVW9ZaNsD3yuSyiXSdeW5Rgqt+GfM8lAZTWSHgy87RnCKNvDCPXg2G7WIUy\nZrYo1ZeOK63mbQ9cT+JvqXDLyGRlkYhCjIyMFpT+Dkij2dBP3aFemE3ci1YcVGaEatsUCKgISuvD\nZQAJLgoDw7JlLHn6MCxH00exrLTCyqqMaes30TRN7cyjnKdzuZwuRupnrneMUii2AislMaZIe2g7\na2Zefx9VxFzXxfM8TboKr72VYm+W5R/8UI8MrVaLWk0axW7dulWbkuZzOYTpMDQ0RKVSIZfLsXnz\nZn7wgx9QKpVotVpUKhUymQzz8/PMzc1Rqcjgm71793Lq1Ck2btzI8vKyjs9Tr+Xa2pp2KFpYWGBg\nYIA777yTHTt2cPiZZ/mVX/4lgiDQs/enP3UfQ05ENTtCb8am/eBfkdt+Bd2Ls8TVZZme1ViDyMce\nGMF0s7Rn5whbXcJmJ+UtJPKizhZwNmzD23cH1JcRnabs+JIYEQZ0F5eJ2l26lRqmbcmxohsQNDvE\nYaSzJ0zbkuzJBEQio+tsz0Ikgs5yjXhtkWxGYksTExO0Wi2q1ao+9a+88koqSwsSqLYdenp66O3t\n1erK9b4ZaoxcWVnRh4XneRr/UvhCGIYak9q8eTOTk5MUMjIBTCSxNPmtzslNQpyu2JtrsgtOovTv\nWH8sR+EUh8gUoNCHUejDKA2Ak00j8oz0ek9XmMpSTvmYhF2Ewi7SLQiZvCwq/1ZStlutlr4JVRcB\naAxCCZsgBSYT+cuamQJGNpcavcSIJJLATcoOk71nOhMGbY1g53I5ent79UpzPbC4vvor8osCoBTu\ncAmHQG8c1Fikbnx1YWWzWXK5HPW2z97ffhPLz83S09OjWZmNRoOhwQENgBZyGQSCVrvN8ePH6XQ6\nPP744zz88MNUKhVuu+027fHYbDZZWlpiy5YtXH/99ezevZvvfOc7FItFKpWKboOVHf/OnTsJgoAT\nJ06wa9cujh49yle/+lVtcWbbNls2T+jC+LGPfYxtVp2KJy3z40f+huKuXTJQ17FpnZuWK+NWHWpL\nmH0jGIUSpm3RrdQobh7DLA9iZvOYuSJWTz/WyBZEbZGk3SBuNUhaNUQUkrTqWK6DW8rLwJpaG5Ek\nuMUchmESBwlxEBP5EUErkMxJA+kibRrEfkzQkABzMDeDZyR6rCiXy1oIpUapC76H8LvEnTYTExPU\najXdUYHcNCkmqSr6arRT9Gl1oKhVdr1eRwjB7t27uWLHDmiuSOMhDMwklNu1TJak2ybpNEmaVZm5\n0mnIa1UksiCQHmhqtSkSycnIlWT6dnkYa3AzRnlYhtq4Gcx8j9QSpd4OcoSQqmTtUK3YkUmc/pyf\n/fGirjLVrLbekWk9IKjANiEEJgLiMOU1hCTKdTeS+ZlCVWLTkjHrtnvZi6FaQXXKq7FF7fR/esxQ\nN7vqHtR8r8Jf1GyqnrtS5am4PJCpWOW3vBMn4+ikrVqtxuTkJKZhkHGdFITN0elI1Pz06dPcd999\nHDhwgEqlwkc/+lGpE1hd1a5WZ8+eZcOGDYRhyPHjxymVSrz2ta/V1mR9fX2cPn2a3t5eFhYW8DyP\nnp4ezp07x1NPPcW2bdv44Q9/yIMPPsgf/MEfUBAdduzYwfvf/35umyhSH9whQdWnvkbuymvkujgO\naS9VZXG8OIdZ6CUOfTBdwulTtBdXyY/1k5uYwMzksAbGMPIyUZvmKiIKZNdRXZJgWaeF4biELcl6\nFInA68kT+SFRN8ByLWI/xrQMRCwwLUNmUVgGTtYmiRKSWBB2IjqVNv5aHTfu0NPTo12hR0ZGAElr\nv3jxIk888YR0dK7Oa4vCIAg0bdpxZEdRr9dZWlrSzmAKbygWi7oTVRwHJbrbtWsXGRFI4M/NYogE\nUV8h6baka5NlaUenpNuWYGK3Ce2G3GT4bdlpdJvyOlaPOEKoyDzHw8j1YPZvwBycgEwBQ3UFlqPF\nVdLoxZafS+I0x/SF51a8aMVBocmK36BwAFXt19OSVbFAxBJ4NM1LLZJpSRAmbbNMTxKTRKcOYecy\nnwa1kVA36vrvr7oJxWtQGIjiSKhVZZIkLC4u6uKiioMQQmMTSoiTyWQQlsO193+SSkWCdENDQzJU\nFUHGjInjiHqzSRiGPPXUU3zta1+jXC5TLBZZW1vjwQcf5MCBA2QyGe666y5M06Rer/Pxj3+c173u\ndYRhyG233aYzJ9ToEscxk5OTzMzM8PrXvx7HcXj00UdlxJ4jGYLtdpuFhQUe/tEB/tf3v5+33Xkd\nYmIf7XaHzNmnsMsD0j6t0EOU3giWYxG2fZJOg1gYhJZL9+IChmUycMP12GNbMPvGMUoD2g08rldI\nGmtpZ4cc/YIuIo7wygVMx8L0bESS4OTkCWi6DrnBPJZnYzoWXo+H6ZgkQSIj7QDLlddAd61LZ34R\nsbagO4edO3fqcJlms8nFixcxDAO7bwQC6ZeprOSV14eSXudyOfr6+nQXpjZdiiatbOAqlQpCCG69\n9VauuuoqDBFDpkCMhRV1SeoVDMfBLPRoXwaUzUASEVdXiJZnSbpNkuYaol2XXIRuU+IS7RqiK1Wl\nuFmIA0TQkR6qtodRGsIoDGD0jmEUB2UkgYjTriNzqcgkEes76p/18aIVB0UsUmrC9ei7mu90wjYQ\nJ2nL5GXT3IrUjDVlzClgMmnV5RthWOAVND9BYQnKMVrd/IomrQBLhXOoUUHd8IqwZFmW3kooxWej\n0aDdbtNsNvUKLAgCSnQ4cuQI3z18hlwux9LSEv39fXK291t0hEOYBrJMTU0xPT3N4uIir3rVqzh+\n/DhhGLJ9+3ay2Sxbt27lyJEjFAoFPM9jZWWFL33pS7z3ve9l27ZtPPPMM9TrdWzb1hft7t27mZ+f\n58iRI1x33XWMj48zNTXF9ddfx/bt27Wo7YEHHmBi4xh+zwYuXJhmuLtIeOGkvKhNCzNfxBvZgJkW\nBjvr0VlYQZx+Gru+hEhihn7+lZImnclD0CaeP0u8MofoNKVoKI4R3bZ8f1KvgaTdxspKhyM746Ua\niljKuzOu1GWU89ienXYPJl6Pi5OT/hCGYWDaBtm+DK3FNeKF83iuozdSKovEtm3tEG2ObEUEPgP9\n/dpMyPd98vk87XZbA9ZqbAA5ArdaLe0zUq/X9bWqbOeLxSKG5ZDYLqZpQKeGMl5Rjk4qzs5w5QGo\nCEqiVU9Zoy2SZk1jMsS+zMj0m9BtpKtLZawcad4PIgEvi5Hvw8iVoTBwqYOwHRm5h/Ka/NkfL1px\nUICjIjip1l696Osl3XEcy1j6sCuTe7xsyt9PcQYhjWWxLPknjqQ8N/XvV+pLQANK6wuSGh/We1mu\nN4hR8yeg157q+SubuFKpRD6f1z6D/f39VFpyj/7K63bhHfhOylqsSpGO4WEAtVpNA5hHjhxh7969\nTExM6AvXNE327t1LEATMzs5SLpe58sorednLXsab3/xmWq0WzzzzDLVaTVOf12MmpmmyuLjIrbfe\nSpIkDA8P8+ij/8R3vvMdNm/eTKFQ4Pf+99/FMk2efOppxoou7f2P4m3YTFxfk6dftoDhZYn9gLjr\nS58GwyCpVeg+d4DcxCZIYqyxSamfqC0DAhFHWootOg1pXtKskwRdROBjZjIYbgankMPOZTBdBycn\nRwwhhPw4iiXWAFiOJZ2kYoFhyc7StE26az5BvUvcXCPjuZepehVIrDZSK0kW4XcoehaDg4Pap+KK\nK67AdV16e3v1AaFIcGqDpHQ6aiQBGB4elgXcNsC2CYKQOPARfkeaEmWkGa0I/UsiKuXVYNnpyBaT\ntKXuIW5USTopLhOGsgCkmwiSEMNy5bWuTAlUqlUcSVFWriy7aC+HkStj5PvkiGHLgN0X8njRiwOg\ntQpqNbeejajAIGnp7WLmJbCHIKWJprxzXVHTH5CClAo4XM+dVz9DmdyqTYkiKannpAhPihWnAEw1\ndqjULvX7qK2H8kUonf2JpEYbBXJbJxkpS4qvWpl1ul1Nevrc5z5HvV5ny5YtLC8vE4ahnn9HR0eZ\nmpqiWCwyPT1Ns9nk9ttvZ3FxkaNHj/LMM88wPz+vn0exWKS/v5/nn39eS8K73S5TU1O8/e1v5x/+\n4R+45pprcByH973vfew0Vjl2coobb7yBlU98lNy2nUTz04TnntOvMaZBpk+K3dpLkurdnZtHJDHu\nTfdyLL+dZt8k5qarMDfsxuwbTXMepYVZXKuQNGsyX6QrPTuNFCyLfR8nn5VchrQQJGEMpolTyuEW\nc1ieg2GB5ZjYGVu/j4Zp4PVI5l9cr2OKREvZ1Xvc6XSoVCqS09BsEreaDA70Mz4+rjGmalUWbaXD\nabVaussEdOixwqt836dQKHDdddfR398vtyCmg2ka2HEAQVve/LYNniyChuVIrCzlLIhIulIZjoOZ\nKyI6LcxMqvhNb3oR+ohWVeIRcYyIQ4Tf1B6qJAki7Mj1pWkiWmtyfenmZPKb7WH0jEhgs2fwBd2j\nLxoJSlFO1UNJpdUpr1yYms0mIyMjxIaFabskrRrKTVf65qXeeInUUpjZgqwPQmVrXlJaKl2Ebdt6\nvgQ0zqFudHVCKKGSIr0AugVVz13pLdTXJ49+jYVzpxh689v5yEP7eeyx/6JNQ778pS/Sn3fpBD6+\nbzI/P08ul+Mb3/gG1WqVN73pTeTzee6//35A4hNveMMbeOSRRwiCgB07djA/P4/runzqU58iCALG\nxsY0WDkyMqIl18oRKpvN8qY3vUl3DY1GA9d1efzxx7n++ut582vv4szCGmOjMfVP/B7Dd95O0mrQ\nuTgLSYy3p1cCbI5Hd61J1AkI210yfRGFLRMc3/Zynv7y19mxYwdgaPmzmRmjd/du7G4Va20WZk8T\nVxaImzViP8QSYHouhuHg9vYS1utkh/rortZJghjDlh4QIorAETJHM+sSNNpkemR34eZdDMsg25tl\n5JZ9ZK99OTPVhu6k1AgYRRGFQoGxsTF+/NhjvLbbJm/JkfbkyZNs3ryZSqWiC35vb6/mjMzNzenO\nVr3XKhHeMAxGRkboLZeBmMSwiOMAug2Sxqq8DsMA08ulRrkJpu3KjiLdNogowHDl72nYNkm3jel4\nMoel2JsWkrQQtGvSZdz20gIhJdqEPqLbxMj3XtpaRF1ZINLEbtz8C3afflGzMtVJq05s5d2oCoUS\nNclOQUBqQS/iSKZbWbbcl6dbCixbkmtMOVqIONKKyU6no+naSoWotgzq3xRJSW0t/ntKTNWqr9cy\nqDbecRyqRw/S89Z38ht/8Beajux5HnfffTcDTsypD/wm5c0DtH7pvTz22GMMDAzwox/9iL6+PiqV\nCrfffjsf+9jHKJVK3HLLLTj2JQ/J5eVl7T8wMTHB6uoqmzZt4uJFadGp2JSDg4PceOON9Pb2sn//\nfu2R2Wq1eOSRRzQ/4vc+9H5W29I96hp/Gq7dQ9JtE1WWaC+skO3vwSz1I6KAzunjqVgwxsl55K/c\nR/uWe9liGFx15S5AsFpv0Wg0OHfuHKdOnUIIwcjICJOTk4zvuIX82gWiC8dheQGr2CPHjbiNVejB\n6bUJVuRKUXXMdsZDCAfTCemuNUhChTMp/CFD7+7N9F57HeY1r2CuFXHq+HEtglLdnDIDXl1d5bEn\n9/Palw4j6hVuvPFGTp8+zcLCAtu3b+fs2bN6vKzVaiwtLWkAWLEps9kstVqNIAjYtGmTNNZJR1mD\n1Gu0tSY5DZYjr8sUYzGtdBzwsvrwIhFpvEIEtotVypAEkgavMykSyfHBSgNqkjQ+z3IQQUvSsm1P\nZmimHTWGmZrKKkq1RfICAckXrTiUSiV94ypNvAIn1Zyn2JPyJk0BHIFsr5JYUkZ9mSMoum35744n\nvQVsFyMO9CZCVf71VGc1WyrptbKlU9x8BWqp1lMh2UoXovGQdMuRy2QoTB2YFAAAIABJREFUvedD\niNVZ3vqWt/DFL31Jb102bNiASBIG/8N/Ynp5jcWpKRYXFxkbGyOTybB161a2b9/Oe9/7XorFIkND\nQ+zZs4f/65Of5Oqr9xHHMefPn2f79u1s2rSJCxcu8JKXvER/bmZmhunpaXzf56mnnuLMmTN84AMf\noKenh3K5zLe+9S1GRkaYmpoiiiJ+93d/l2E34tDMRa4pRARnzpPdvJno4lmaMwt0K3UGf+5WsD3i\nmefxl1eI/ADTshj65bfTmriakUIG6kvQWMHIFMl25zCGx2lPbCKXy3Hy5EnOnDnDgQMHcByHm2++\nmZtv/mUypx4nWprGKvViZPOXrP0cG8OyMF15WSZBgJXNENSaeD0FREFSq92ePBt27cTZdwdLIsM/\nPHuU2b/96v9N3XtH2XnW976ft+3epkszKiONJKtXWzY27pYFxOBjTGwgnGBqQooTAiFOThIgAXI4\nyTlphIRLQkJyE59cSABTbAuw5QJCbmpWG5XRFE2fvffsvt/23D+e93lGzk1u8Fr3Li/2Wl4ejUZ7\nZt73fZ7n9/v+voXVq1dj2zY7duzgqquu4rHHHiOZTOo27vTp01QqFZzcOvDbrFmzhmQyqYVvAwMD\nmsk6Pz+vsadkMkm5XMYwDO370dnZybJly1i1ahVGu4JI5HBdjwS+1DQ4cbk4zSQCZFAPQno0CKE5\nCEakpTCdmMTUghDDjjYOhZ9FAbtSmimWcloCX/pJmpZkRvouImNjeIbkTIQBWNKsNjBltuireb1m\nmMOVdFTluafAQDUGVICkEEIq3MIAo6MPENGYxpDQg2WBcouCKHm7DXZMjzJVEpHakBSeoUaYV2Z3\nqopAkZ2uzL5QTEKFXgdBQD5ukZ4/h1mbw8x2YHYNcOToUVzX5YYbbtBEmUa8QKXV5syZM6xdu5aO\njg6efPJJ+vv7uf7663nuueeYm5sjk8nw4IMPMjU1xeHDz3Ht1btJJBJ0d3dryXClUuGxxx6ju7ub\nu+++m1wuR6Uix16KBn7gwAGuv/56ZmdnGR4eZuXKlVy6dInNmzezb/MKvGwfWzddxcJX/4H0xs0E\n81M050pURqZI9XXgXHU1ol6icf4sjekFWnOL5N/3KywObJEaESuO4SQwsj1M+3FI5gknh0kHTbZt\n3cKuXbvYsWMHO3fupL+/nzNnzvDwv3yDxbXX46zbhZmP/AuiRRLrXkaiI6Mt4oIgJPA8zAgQTvd3\n03vjtfQ9+CmO9uzm8RMXGZuaYePGjdx1113s33cH1113HTfeeCODg4MMDAzQ2dmJ7/v6tLdtGyuZ\ngjB4hQvY4uIio6OjLC4uapBcXdMgCMhms/T19RGGIZ2dnQgh6O/vl1L9eBrPl/iGKE1K2zu3pY2J\niIxwwmZD+z5qd6YIVyAMEWGUvJ5IyUzMKIkLry1xBMMEM6qkfU/iDLZ0ykIEckNqlBDturS+D/xI\njxFiRc/0q3m9psIrdZorv0RAi5tqtdorNBfKHotqEZA0atotzERaAjuYhF6LQNSwupbrG6Jo0kEQ\naAGTMgMFiTwHQSBPlAhsurKtUK2HerCudKAWQpBPJzFK43IG3api+C7exZf51bfczKk7bmdLoqnD\nX+r1OquW93Kw1eLgwYM89dRTdHR0sGHDBvr7+3VM+6pVq0gmk3zuc5/DMAwWaw22bt3KpUuXyOfz\nZLNZ5ufnEUIwOztLLpfTMe+e52kZ8YsvvsiJEye48cYbGRoa4rHHHqNQKPC5P/wMxVqFoNZCfPkT\n9L1hP/7cZVqzc9Quz8oTcs0qgqkLeFNj1EfGZEn/a3/AuVKJTlO2DwofkrjJ19m0aRM37tjKidEp\nCoUWIyMj7Nq1i0ajge/7+t8sLi7SsWIzTjwh5/3zU1JwVZzGrTYAA6/eworZWLaFQFBYu4LYyrWY\n19zF+EKVnp4eVq9eDcClS5dwXZdarcb09LTWSShFbaFQ0K1VrVbD7FiO8OVGv2vXLh599FEuXboE\nQHd3t64gi8Wi9tlUMn8VRbB27Vq2bdtGIuZI78vQwDYNcOvy2YzFtULYjCUQQRB5kHhRUratWwbD\nkBMMqbT0peJYhUWDbE9UXoVhSDq070ryn+8CJoYvJ3TEknJTaZQRTjwiA5ryYOXVTStes81BjQMV\n0Held6P6vBLGGIoGGgZSeGXK2HE5C47yK0wLM5GUu7ItCTUySWrJMlyNLhUGEY/Htcz534Kj6sH/\nt+aiSk7e1dVFLqxiOgbCSUCrDs0Kwklg9ywnmJtga/96vNMvcPW1d/NHf/FFzba7fPkyd911F8uW\nLeOaa67Rdm2nT5/m1ltvZXZ2llKppHMrXnjhBTZv3syFCxd0ZWNZlib3XLp0iQ996EN8/OMf18Qd\npUB1XZdvf/vbbNiwAd/3+dVf/VVis8NcDDoZOP0vxDdvIKxXCOo1amPT1MYXSPbkEK0G3vg5SifP\n4fkWZ29+GwuHD5PL5Th9+jQdHR0cP35cX58LFy7wwgsvcOjQOn70ox9pheSOHTuYmJjgumuvpVqT\n4zohBCKewexahZgfxUjnMJ0YwcIUwg8JfXmi+i1peSY1FwGxjVcjklkMo8aJEyc4ceIEY2NjWilb\nKBRIp9NkMhkaDUmRfuSRR14hxRdCyAmC2ySWib3Csi+Xk9OYubk5SqWS5reoTSGbzVKvy43xqquu\nYnBwEKNRhEyXNK1xG1EFEGA6sWjMLvt9wzQlZ0FegOhEl+nZeG05nUCON4Vpyq83LYknhFFr0ZCe\nEIgoAs+0MGLJpXSrRBojngYMKSkwItq035KHZezVOUG9ZpuDOqVVFB2gF2MikdA9nnJIUmMvlURs\nWLa02kpmJJ3a9zBtJ7L5FrLcShUIy3Utv1b0acWvUG7LyuxV4Rsq+EZtTErKrBR7a+NNat/7Msab\n3gPtasR+i0CgyODD2fQ6Dp2+xPINt1MeneLgwYPa9v2nfuqn2LZtG47jMDAwwGB/D48/PkmhUNCe\nDUIIrX3wPE+DqI1Gg76+Pj1WnZqa4ktf+hJ//dd/zWc/+1k+85nP6FM0Ho9Tq9XIZrMcOnSIoaEh\n3vm6jbRXbGNwbozahWGS2zYR1hZpzczSXqwR70iT6uvAq7doL07gtQ0eXb6VxvB52u02pVKJy5cv\n64qq1WppIlkqleLChQts2LCB48ePMzo6yvve9z4+/vGPEzcFRi63NP71W3LMVliGaVqE9UXMVA4n\nk6Q2OU/QdmmXm8TzLvm1/aT33sKldpLP/+ZvMTk5qbEeZSuoxHEqNrC3t5fh4WGt3VGbg+M4mIk4\nQXmWZnKVVqFWq1WGhoYYGxvDsixtY5hOp2XFt2qVplMrjUU6ZmLEkgjk80V9lrBWwkxIHMVMZWXF\nq4JtY0kMEZcbSGMRI5OXtGk7vuTzYNmyWY4WP15L5l96bVkZGBJXI4hs30QAbiBp24pw5cQxkjlp\nyCy9BqVM/FW2Fa8Z5lCr1XQYqQqbUVz1xcVF6vW6zlpoNBpLyK1hyj7VsiISlAsGOgGIyP8fJwFu\nU49FFT++Xq8ThqF2O6rVanqMpcaZqtJQgGWlUtH9/MCFH1H67jc5/0+PslBrLl30RFZr582Bjcy0\nTZ588kn+j7/+Gw4cOKDVmHfddRcPPvigTp/asmULD3zwF9m8eTNDQ0McOHCAndu20G63WVhYwHEc\nWq0Wjz/+OO985zvxPI+NGzfKZO5cjna7zdzcHJ/61KdYs2YNf/RHfyTzIaMNQmEnmUyGT378dyGV\nY2z0Eot/9yd0XHM1WA5hq4lXa9IuN7GTMQLXozFXolVu8sLO25mamaFarXLixAmGh4f1FEcZqyri\n1Z49e/jdh36dn773HoaGhnRb+OlPf5oDB5/BFAGWJR85YUckNrcFiVQ0kQpwqw28WpPGXA234eK3\nfJI33MGff+8Ev/d7v6f5CvF4nDe84Q38zM/8DOvWraNSqWiOQjKZpFgsMjk5STabBdAeFkEQYGS7\nCOo15ufmtJBKtSDq+YMlN/SOjg4WFhZ0q5nL5di1axeJeFwSu0KBHbQR5Sm0yMmOApKSmUjzYEPo\naUWmkcmD6UirOITOtJTxjoEOcVJxdzrWzjAkczKZ09wfYklIZjGU1iKWWmo/4hlwlFflT4jwSmEJ\nCvBTi/LKUy8IAg0QBZ4bGcd6Mmm41YiUZ2Yke1UkpwisFAJiST1iVACnUtkVCgUymYx2mlLf/0oZ\nue/7NBoNLdpav349l7/2CJVTwwy99x3EI2ALoWzzbU4vuIhYikqlQjabpVgs8rWvfY1cLse6dev4\n6K/8Eo888gh/+Zd/yVvf+lY+8pGPcOHCBV5++WV27NjB0NAQHbksTz/9NN3d3di2zfT0NKlUiq9/\n/ev4vs+GdUMaRFU6jFOnTvHnf/7nOhbvoYce0nbp5XKZ3bt3s3dVnjMln7WVC6TWrAYEwfwUQasp\nvRQck9AL8GotTCfG0V13Uq/X6enp0RJxxacoFosUCgWNx9x+++1cd911mF/9Kwaf/zq//+D7uPXW\nWwmCgDVr1vDMM89QrtZpNlsRwSxA2HGMtFwk2I5UH5oG7UqTykSFVqlFz2038oUfDvPss88yPT3N\n1NQUuVyOP/nMJ+iJC+6+fjvvete7sG2by5cvUywWNV7luq7WubRaLTKZjKwI0x3gtghD2X6l02nN\ngFQ+mldqcFQrNz09jeu6rFu3jk2bNmG6dQg8LNNELE7LEFshg50NSyotRasu8QERAoY81GKSMk4Y\nYKay8vePHJ+MVF5yEszouTbNJb2EIJpgRJMLNZFw4rK9sOM6U5ZYEuIZQjty/TasVwq6fozXa7Y5\nJJPJV4iWYCnLQvHbla4imUzixKNyzGtrXkPYbklk23YQoSCo1/DLxaWLqmLJkThGLpfTkxAluwW0\noErjGywRodQ0wzRNTp06RWagC8MIiBdSZFKJpRsfT0JMEqyYG+G5w4cxTVPPzm+66SY+9rGP8Xt/\n8D/4p3/6J9785jfz7LPPatOW7u5uVq2SI8C2MDlz5ox2InrqqaeoVCqUSiUJQGYzdHd3k0wm9dg3\nkUgwOTnJoUOHePTRRzlw4ACmabJ371727NnD7zz068yHCQa6C4x++R9Ir12LNz2OW23gN9rMH7+E\naZv4rTZBy+XSDW8lkZb8gNOnT2sOSn9/P29961spFArcc4+sEFzX5eabb+bLX/4yvmtSPHGe0l/9\nEQ+9443cc889vPOd72Tfvn0sLCxoS0DLjCrBeFaSdyyHoLZIu1xjcbRCe9ElO9DB1I47dGjP+vXr\n9eRpulRFxDO4xw6ybfMmrr/+egqFAsuXL6dcLmspfTwe16xXlYCNaWHG4ixfvly7Z+XzeWZnZ7X/\npLLeU3oLVenm83l27dpFRz4nF6JhSEWw25Q4l2ktmQ+FIUY8FS3ayFVagYuB98qwmUDyHOQOIKSf\nQxjI7xHPyI3AkYvfyHVj2PGI3JTCSEQhvcorMnKs9oMQwzDxQwiCkKb3E0KfViNLRSBSHAS1iBVO\nAESKTQniKNNNfA8zkUQEHmG7RdBsEno+dq4QeepJFdqVaURXJl0p0FORsZTtVzwe19MNVVnE43EO\nHjzIs88+S2pgOc9d82Zq+eWMfPQB3BPPyM3Bdwk6VjE1NcX3Tozy+b/8S77yla+wuLjItm3beOCB\nB3j00Uc5duwY7373u5mbm2NhYYHBwUF6e3tpNpvMzc0xNzdHrCYziQ3D0Pbpg4ODmrZ77OVT3Hrr\nrTpxyTAMzTitRQrPY8eOUSqVeP7559mzZw/dy1cwPDYN3/571vzX+3HW7SSxcRdONkV5eBw7aZPo\nlNe942OfJlnoZGhoiOXLl+v0akX86enp4dd+7dd44oknuPvuu3nooYd47LHHuPmmG1l46QSV8TKV\n0QXm/+lvuOeuN/LCCy+wceNGZmZmaDalUra8WKHVjtitvoto1QjrMvwnDASJjjhX/dLPMj5xmXe9\n612EYcg73vEO3vzmN/OzP/uzfO/Jp1iek2pc22/q1PJjx45RrValBZ5hUCwW9SQqm81K059aHb84\ny4qBASqVCuvWrWPdunU6ErBUKhGLxSiVStrLVG3UyWSSq666inQqtbQ4Az9a0wFmMq3l0cKPCEte\nS7YVpq0rWuIZTdwj9CKQMvpPOUUrEpVhLFUDIpQCrChl24inI2VyUrYTyRy+FafVdhFIGUAQhli2\nRVL8hHhIqnQlQJdv6mYo0EfZpauS3wLpuae1FKE8cdwahmVixuKEbhMziEp9a+nXU2WjElQpL0d1\n8xXnQpGfVATd17/+dSYnJzVX4Le+9KfcYhVIXTqK253nhw/9Gb2bB1jzkQ/zsc/+OidPnnzFmHbv\n3r389E//NJ///OepVCps2rRJpyKpZCTLsti6dQv5XC5ibpo6m7K7u5tGo0FPTw+zkeHs4cOH6evr\nQwhBT08PpVLpFQapasrT2dlJPB7n3W9/G4cPH2bHmn7y8V2Y6TztIwepnD7D4sVJQtcnUcjgt1x6\nfuP3ma57rFixgnw+Ty6X0wrPhYUFhoeHue222xgcHOS2227jwIED2LbNnfvuYPvIYSZMMG2TZEeS\n9OoB8sv6uPnmm4nFYixfvhzLsshmsxqnACKfA6kNKJ6dxqt7WE6ccPdPsW5sjLWrV1KpvImJiQl2\n794tORsrVrCxOYZIpgnjad0e9vb2anxItYTK3Vxt9sW5WTp8MA2Dc+fOcdVVV2FZFul0mrGxMd12\nuq6rx8Pz8/MoR6i+vj7MZkkucIBWBeE15bMJS9wN25H9fuCCFUO0SpKspEBIK2JPOpGjkwh166wc\nnogEhyRzGoMw7BiiXcNIFRBeCyPTGVUxshoLfU+D6gnHwvKaiIVpgvmJV7VGX1P6tKoUAM1rB/SE\nQLEQJVsy2oUtR19E0awTui6mY0uhjgGhOo1CT2rfI66Cek/FcVCTCvU9FPNNceqPHj3KqVOnmJ6e\nZv/+/fT19bFv3z782XE6jHHaMyMcf/QU339+infdeQsf+9w/8IY3vomXXnpJf8+BgQEeeOAByuUy\nq1evZnh4mJGREW0r1t3djRCCqakpOju7WKxUpImpYbBt2zZtc1av1ymVSnpqMjIywvnz5zX7sVar\naTBVaSfK5TJ9fX08+OCDxGypF2j+/Z/T+d6fwz3+LO3pKepTCyAEdipOLJ+Gez9AmSR9fXk9iehO\nS+OQTGYT733ve5menta6l9tvvpE9e/aQCNuIp/43sydPYSds6pU6VjJG/qY3Yvottq4ZYKoiEf9y\nuaz7fyEEPhZ2dPq15xdoV11alTbdGztpt9tcvnyZXC7L7TfdwORcicnJSfbddD3ZE48TlBaIdfRS\nXqxopa2yw1OktmKxSF9fnwafHcehIiyyjSZmuDSxEkIwNDTED3/4Q2KxGO12m0qlgjImVorXzZs3\n09vbCw6RmYqPaNUQzRpmIhVN1owlq8LABSTtWY4dQ8JGReIS6Q6k7110kAXR6FMIHbArcQZJ8DOE\nkB6pCK22NK5weQqA0JOkrrgFTn0KUZ7DL80Q1MqEleKrWqOv6ShTneJK2KJcdhTzUHlKKt0DdclC\nM2KSwCTCqIcyDALXAyPycQilsakZS5JICJ1DoNBnhXarRaxo20EQcFWiyf2/+wd6XLV3715+9mfe\nAQvjiPI0woSJf/oHSBTYdd9ept79Dn7/wPd0itXWrVvxPI/3vOc9XLt3L8VSiXg8rgHCVCrFtm3b\n+Lu/+zuuu+46xsfH2bJlC0YY6BFlc+wMb3zjG5mfn8dxHB1zpx5uJRc2DIPZ2Vmd1J3JZPRcXjkc\nvW5NN9/5wfPs63OYt0yCiXO0Z6dpzpdxyzXMmKQsi7f/IiXfYlXEVtWj30YZw3ZI2g7Xv+46Ri6N\naixocnaO/uXLMecvwd59DHR2489PYWY78KYnqBz8Jvnb7oZ8D/3L+vHDJfKbuq+VSoVOR5bjhmVJ\nUDQIseI22coYu3fvlhkfgcFys87y1V1QW0AMbcXIL8fL93PqhRdky5dKsXr1as1wVdcGoKurS9/j\nIAgx01lEZZa1a9cCMDo6SrvdZmhoiBMnTjA4OKjTy5W6c3BwkO3bt5PNZqBekqV8qyF5ChEvwRCh\nHCfGkxpkRAiMRFpOIgIPM5XFGzuLs74QsXqjViIUkukLS5MFJy4BSTsmE98SafmMB56sJixPCq9s\nCyFCHNvCqUwRzo7gz14mXFzALc4RegFB8yeorXAcR1cQanykJhZqIWvHqCAEMxYFejTlDLndlE5D\n9UZElBFYcVPy1w0T2nWE4BVKOjXqUnNypZ9QmEcslqBSqZDJZPjwhz/Mnh1baX/vy8Sv3o8Y3EXL\nF6x4IMHsU9/nCzMGEydf0rmSw8PD/MFnPsOl0VHOnj3Ll770Je655x4OHDigH7A1a9bQ09OD53n0\n9vby3e9+F5BgGV6Tbdu2IZwGw8PDrFixgq6uLr7zne8Qj8fJZrOauKVs9FWEXTKZZGxsTF+vZDLJ\nxz7yYWZa8kSce/h/sfy/3IM3fg63XKMxXSTEwLIt4h/8CDNNQX+/dKmKOQ5GGJBIxsBIybI2NDEr\nM6xZvQpTBCw25Mk6PnEZcBgYWE012YfAYGJigu0r1xHWq7RPHsLqW4WzrYNq09ceGIr8lk6nQbhg\n2diJOKZt0ggErXIL/9wRUpmL5AbWQ8OHbDfzDR8rn6dYLPKDx57h/PnzBEHA+vXr6enpoVAocPHi\nRT2GVodOT08P9boMQmq6HvHuToTr0tvby4ULFxgYGOD48eNMTEyQSqUk9hOLacFaLBZjaGiIDRs2\nSB5CKk+IiWmYiFpRLthILaxyQaWFYRsS2Yi0Jz1OhdvC7l8LGLK9wIjaD0+2HJFNPfHIft4X8j3j\n6SVKdKogVZ8RA9IgxK7PE86O4o+fxV+YwS0vEnq+jBN0fUmzfhWv12xzUIEwaiNQpKNarUYsFqNS\nqdBoNPRCDoWQ46GYdNEN6xWE6yIi0lPgSlDHdOxI5740tonH4zQaDV3KqvZFEYyuTNf2Ejnuu+8+\ntm7dyg3XXsNivUli1214dgLX9Tj41DNSo9C3g1jpDNlslhdffJFCocC3v/1t1q0ZZP8tN3D27Fke\neOABtm3eyJEjR7j++uspFouMjIzQaDSkDD0I2LRpE0eOHOHOO+9kemGRwcHVuEHI9o421267ijfe\n+w56eqQOX9F6wzDUpa+ieys+hNIKvPvd72Z1zubY5UW2ZTz8G2+QY8tGjaDt4dVbOMkYvOtDHDp5\nkc2bN+tFaxJAbU6eTJ6UxRthAE4CszaHaNdJd65mzaoVVBvSkNWxLAqZNG3fZ/vGdXD+OexVG7FX\nXoWRzElmK7KtS8TjeBE47Lou8VRKjvr7BrATNjHTwKt7+MVZEqs3QjJHmOsjCENMU1ZNhUKBa665\nht7eXsbGxti0aROVqC1T97bZbJLNZmk2m1oPUa/X8YSJaVmEMxdZuXK9bgXn5+e1F4eKBVCVWhAE\nrFy5kv7+fgyvTWBL6rcoTcrrk8xIKXYqK3kJAiCMrOFbclH7rhw7pgtLI/jAlaNLEcj2wZJAo6Q7\ny0rYsJylKYcVIzBt6akqBKEAq1UhnDpPMDeOO3ERr7yIW6ljmKaMFwxCTMvESsRe1Rp9zTYHIYQm\nQMErx5ipVEoz31IpmeXgeh4xyXaKKNQmRiIJ7SZhEBldBKFMFfY9LVm1rKSeUlSrVS3JvTJCTr1a\nrRaVQj8f3H8tZraT4NwhUguzGBv3cmFimu8ffJowDDlz5gy7d+/mXKSsDIKAQqHAzMwM3/zOo3R0\ndnL/T+3DsCwaxPjQhz7E3//937O4uEiz2eTEiROkUinGx8e54447qFarDA8PY9s23d3dJGyTZCbN\nd598Xmsy2u22fnBVf93R0aHfs9lsamwlmUzyiz//QSq1Gr29ceb/4b/Ts/9NNE8cBiGojs8QuB7m\n/f+Vo2NzrF69mkKhIHEeE2g1pKv37MXIXctBmDa4DYmIWw526EGjTEc8DUETvACrViQF0KwQIvAn\nhrG6lhMuXMZcNkQqu4yYIx9sIzLMcRwHLwixnQRho0YsHSMWtwj9kPb8POa5o8RWtzDdJlbnAF2d\n0qmp3mjS29urreFzuRyO4+icUAXIKWq0IkQpINzs6SSsV+ha08X09DS5XI6enh4N5ir3J+UWHovF\nZC6mY4PjEHg+VuTpiOXIcKVYHExHupXFkvKkD31wbOkLqchJIsRwEhJMTHci/DZap04EOIZiaZph\nWUt/b1lYgU9gWBimgVmdxz/3PO74OdqzszRmSnKkGoaYti1jCS2TwPMjm7kf//Wabg6qd71ytgxo\ns9SJiQnK5TKbN2+W6rdWk6BWxlS5gYGP13IxTQMhDEI/wKvWsTt7NchjYmovBmX7ptoItZjUiZxK\npSiVy3R29eKPHMXI91DacDMiEBx7+UeMjIzQ3d3Nm970Jo4dO0atVtMEo0KhQKFQkDwFz+f4xQky\nmQzFYpGjR4/ywgsv6ByEgwcPsmrVKg4cOMCuXbt4//vfzxNPPMHg4CCnTp3CNuDMOeke3dfXp2PY\n5ubmdLWlrPUVA1SF6FqWxe/8zu9gT57i4qLFlpSL2LqJ9rljuNUGpbNjNOdrdN1/L/98fIQ9e/bQ\n1dW15JuhiGVeOyp5gVadoDQtzWajlGgRBrIMrhVlSpNhEJSkPVzYqMmFYtmEs+OEoY+17uoIrDPB\naxGIAD8Il76vYWBmcsQ7Mti2Sbvq0pwrYZiXsHsGoNXA8iVqH+b7NZC8YsUK+vv7dWt6pTmxMgVW\nobdqYuVGJ7s/O0HMMnSgsopFVM9hEARMTk7qBLTBwUFMvwmWiUWIJUKEIZ8zmddqSj1PKi8Zkq16\nZAzry7YhjMRTQYAwIo1Qu77EhHRikZzbwohZEdAIhERVhYMwTJqei2EEJEqjeOePUnnxeVpl6TEZ\netJWz4o5hEGAbUeyAyB0f0J4DirZudlsahq1knEru7hcLrcUae9mwxNPAAAgAElEQVRL63kr3y2J\nJ80oas22MBwptDJtU+6vUTgpvqurhiuTr5Q13JUTkSsZlAtBjPbGW7goOnBdl+PHjzM5OclNN93E\nG97wBl566SW+9a1vAbK8Xb9+PStXruT1r38973//+9m5cydPP/00H//4xwEpob506RK+77N582Zs\n22bv3r2sXbuWT37yk8TjDm/ffyMDAwN87WtfI5HOsHPDWl63eztnzpyhXC7rOf2V+RiKvagSpnO5\nHFu2bOGOnes5H+TJ57KEF44SVoo0JmaoTcxRnSjTef1u/uroKGvXrqWnp+cVwT547SXFoGkiqvOE\n1aI0ZnHbBJUi7dMv4J36EcHkBfzxs4TFGdwLL+PPjOHPT0VkNRdRXySolbB7VoBhkozZGFUZi2dF\nHBOlc5HTp5osf2MywMavS1GcPzsh7dO8NjSrWO0ajiVl9ApYvjJ86MqsEoXtCCG4ePEipVKJSq0R\nJbEH4DYplUqo6LxkMqlbM8XQdRyHdevWyeyRZI4AE2HaMgPT9zESKbkBeNImABFCO6ooQsVmjEaU\nhrnUOhgGEneIwEbTksIrvxXxIVLRtCIiWxkGvh8QiznE587TeulJ6ieP0Zgt4lbq+PUWoedj2FE8\ngyXBXQAMA8P6CZFsKyGM2hxAVhNKiKXainw+r2++kchIlx0h5A2pV7BSKfnQChV6E9MuUGBoGuyV\n0XZqk1AngiJGqRBfz/MYHx9nTcKHZJrM1g3ccVUfZraLly7NcvbsWZ2QlMlk2LFjB+Pj4+zevVuf\nNslkkg996EN0dnby8MMPa1xgenqa/v5+Ojs7ue+++zh8+DBf+cq/kMlkuP3223nLW97C2t4ciUqL\nT33xb3nd617H4uIiMzMztNttradQJ+T8/LwWqgG8773vQZgWntdkFTUwDOqzJdx6E3exRse6Pv54\nvMXKlSs1ceiVqlTJsjPiGakVEBIME76HmZZqTcMwZDiL15YCOEVdN6N8xjAgrC9ixBM4A+vkvXKb\nkRamDcLAuyI3BCCZ7cbqWUno+cTSDo1iC7cuhUNhvUKwuICdyi/lPhoGtiV5B4CegCh699GjR/X0\nS1Un2WxW41rCT+FXqiRM2UJUq1VKpRLr16/X/hvK59RxHPbu3Us2nQavhWHFMQ0Bfpuw3ZRWcKns\nkomLCCNyU8THMaOP7UREhzakI3cYSgwNQ+IKynLeysrrJSQoiWUTSgWVPNxmz9E+9SNq587TnCvh\nVpv6ezsZmTgf+D5OStLRDcOQ5sBt91Wt0f/XzcEwjATwFBAHYsA3hBC/aRhGJ/DPwGrgEnCfEKIc\n/ZvfBN4LBMCDQogD/8F769BZ5e58pQpTnfhKtiwXt4eol2R1EG0GYb2mTTLsuHOFAEv+vfIQVKNT\nhW0A2gFIJk/3YzdKiKlzCN+luzyLs2wQrA5eGhnn7PB5Ojo7ddhMOp2mv79f8w1OnDih3asXFha4\n8847MU2Tz3zmM7odWFxcpLe3lyNHjlAsFrnvvvu48cYbtbDn+eef5w233YQbCD7yB3/Mb/3WbxGG\nIYcOHQLgz/7sz3R4q1oUvu9TLBZpNpusXbuW61dmOVtqk8tmaX7n/8RKJGjOFvHbPq1yk68s28L0\nsBR8KW9MdfoKIfANB5voobYdjGSGsFrCiCflnNyyCL02eC5GIklr9DxOoQCmjZXrkIEtbityOLKi\nnBEHoQxXTckItKw4tn2FlNoAu6uPZE+B0L+E1/JpLdQwnDhmIkWwMI3VMyCpwqaFaRiEoKceSnSl\n2gPl8+k4DqVSiZUrVzIxMYFpmszNzWHlN+F0dWHU5L156aWXZJxALsdLL70kw43DUAPjW7ZsIZ2M\ng2kShCGO3ySsl6Pk69QrNwYzJnEvjReYEq9BgKlYjt4Vz6n8HYTXjNTHAhI5WW20Gwg7jmmACAXO\n/EW84Repnj5Nc65Mu1zDMKWlv2nbGKZB6PrYiVjE0gzxWu0Il/v/UJUphGgBtwohdgLbgVsNw3g9\n8BDwXSHEBuD70Z8xDGMzcD+wGXgD8HnjP/CmqlarmhBTqVRYWFjQFm3K7blWq2madfQDScVlpEsX\nQYAZk4vEjDlLoIvl6Dgwy7LwfZ9KpYLnebqEtCyL3t5ehtauYTBnYZQnEbEU/uAe/PU30Nz+Jk57\nee7/uQ/zhS/+DYlkkiNHjuisyY6ODsbHx9m1axelUolCocCKFSuoViq8/nXX0tXZyRe/+EWNmSST\nSXK5HOVymTAMmZyc5Omnn+Yb3/gGx48fR4QhG9et4fY3vpmbb7uDhYUFMpkMAz0F9u7dy/DwMPl8\nXmscFMNS9dWZTIYPvO99tANZzXSl48TyGaqjk4ReQOncDIv73sA3HzugDUxUmwIsjZWjKkD4nvYm\nxLLl9QSC8jyGYcqchcUSdr4gWwi/jb8wLVWWgS83CMOMXJEa8kGtLche3JQ6AANjyfrfchCR+MtJ\nOsTTDl7Dk61jvgt7+SCiUZWjwZaMkjMMU0vvVYuoDgLla6GYkWoj1KG4novV0YexMMm6desQQtDR\n0cH58+fp7OwkCAIuX75Mo9Ggv7+fnp4eLBnUKTfS0uSS1sdtSgwm0uXgtvSJTyggcCUOodK1o/Gl\nYSciZ29ZtcmNL3KOMqRpMgmZveJ7PkargnfxONWTJ2gtLBK6PqZlYccdrJiDFZfX0Ii8Pv1Wm8Dz\nCFwf4fkErVdXOfynmIMQQhkuxAALKAFvAb4cff7LwH+JPr4beFgI4QkhLgHngb3/3vuqtqFarery\nT0mpVZq1soDXbYeyhms15M4c5RtYcSkzNiwLM5kCIsaZWMpuUGM6RaGVobg5SuVFLjdNJurgGg4t\nV24go6OjzM3NsX//fvbt26dP/r6+PiYnJ6nX6+zfv5+9e/fyve99j+3bt1Mul3jdrq0cfuElXnzp\nJV5++WVisRjFYlFrNNQ0IZlM8txzz+E4DidPnuRTn/40zxx6ToNi27dvZ2ZmBoQ0Rt2yZQu2bVMs\nFnV6l0LnS6USfX193LBtHQvxbhKJBKXPfQK/6WHFbNrlGvmbr+GTDz+ixV0qS/JKf8xmsxk5d0dz\n9YhpaiaSkgoMMgrAa0smXrMWMf/iURJ0XOY1iBAznsJIpmUwjmFKmbIdJT77HhZC40BhGMrRnWni\nZFKyyqm5+C2pRjQMU25WpuSugAGtuiaxtdttPXXyfV+mh0f6CFU59Pf3axGVnEjIJC8zJy3qFeZV\nLBa1M7nS9wwNDZFMRgpI3yNmiigpW8iqAUNSpoWQRixOTP69YjzacenroERWoTzAhJCt1RJQGWks\nTEuOOE2TMKqibcvAP/sjWsMv05qXG4NhW7KNMA0wDcyYpTco4QcIPyBouQjPx601cRcbvJrXf7o5\nGIZhGoZxFJgBnhRCnAT6hBAz0ZfMAH3Rx/3AlQTuCWDg33vfxcVFqtWqPgGV246Ko1OuTZlMRnMQ\nFDPSsGzJHLPMCIX1cFJx+VBbEfIbl3JqNZVQva0ScylfQVU2KgpttVrl9OnTPPnkk5RKJVatWsWq\nVVJQtX37dkZHR+nrk3qB3bt388///M8IIVjT3wsYHBse4YknnuDFF1/U4Jbycujr63uF6Yzv+8zM\nzHD8+HEdvqLwEZWqhJ1g3crlKDcqZZjabDYBOX5dXFzkoYcewm3WZd5jaw7huVQujGHFHLyGy/8Y\nntcg8ODgoMZY1OapSGAAgWlDulPeqMgPwEznloBKITASCYx4Ar9SpTExGSkQE1j5TqxsB8JrYSYz\n0eJB9tvqNFSsYFtWdbYtw2DJduFk08QyMjWqVWpiOfaSj0GUeiZaMiDHQGBG1aHa4FQbqu779PS0\n/DWiqYU6bIx8D0KEGNku1i3r1KY4lmXpSkJVrJs3b6ZQ6ABAxFLQWIwyP9tLtGg7EbEhI3l1GEj8\nIJnTCkzDji1JqwM3cocGHaYrlAdqKMFIwHUjjGziFO0LJ2nMLkRWekQAo4wOtOOObq8D1ydwfUI/\noL1Yp1ms4tVauPVXx5D8cSqHMGorVgA3GYZx67/5+4j/+R+/xb/3yVQqpUdPismm2gtAx8Eroo/j\nRDx234O4dPJFCIx4Eiubw0xmsLMZ2VI4MZk7eIVWQ1G12+02rVZLL7Lod8D3fUqlEgsLCzz77LO8\n9a1v5bprpdz5hRde4NZbb2XDhg3s3r2be++9l/Xr1/PZz36WU6dOUSgUOHr6HN1dXTQaDVatWkU8\nHmfNmjVMT09jWRa7du3SgKLaDBXJZnp6mrGxMZ0Xms1m2b59O47jMHzhIqnyOLdevxchZGK0kg9f\nunSJcrnMtm3bWJ9sMRdKR6uZv/srYh1ZgpbL3LGLeA/+NpOTk6xcuZLu7m6mp6c1zqNOXkCnmhum\nBe0qRjwdzeuTYDuYuQ6srj7MXJe0QQsFTiFPPJ+RrUSrKceYThyro08uPoB0h6xEUvmI1RdHGBbN\nZktPBWQ74hFfPoCdtHHiNr4b0izVEb6LaNYiT4RIBu21JPAZLShFjVab6pVGQerQAcnMnZ2dJVyc\nR1RKELTp68hqIPpKg2Ml0Fu/fj22cUU1OjdK0KhL1aUVTT2UFZsyYLFjUm3qNvQ0QqDMWqT+x4il\nJOM/npHvoxSW6QK+MCQD0zSxvQbe+Bmalyfx6q2oIgYRCEJVHYShXmkiDPGbbVoLFbxai6Dt0664\n+O3/n/wchBCLwLeBPcCMYRjLooW3HJiNvuwysPKKf7Yi+tz/4/WP//iPPPbYY3zjG9/g/PnzmnOg\nHpYrpxiqBVGZg7Jfky6+IJWahvLfC3xJq3YiY03Qo1CFzvf29rKwsPAKbYf6vtVqlY994F0sz9jM\nTIzyt3/7t1x77bWEYcj3v/997rzzTjKZDF/4wheIx+MMDQ1x7NgxaYNueLRaLdavX8+xY8f0HL6r\nq4tMJkO1WtUmq57nsbi4yKFDh/joRz9KMpnkK1/5Ct3d3aTTaY4cOYJt21SrVZ67XCVx8vv8+R9+\nms2bN+tT0TRNenp6+MAHPoDfsVI6I5sutulTvTRN6cIchdddy8d+53eZn5/X/gSZTEYT0BTbUjlh\nGYaBGbiRB4ElY+zaDYxEFiudl2HFmRxW5zKJhMcSspUzTMxsXk40RBjZrcclxhD5C2DHMJJZ8NxX\nJIQZRjTOA6xsB10b+6XztBsghIERT0mn6lQW4ml5YhtGhN+jNzrXdSmVSpr+rFyelCmN8gipVqu0\nQgPheRiF5XTks+RyOU3dV1VtIpFg9erV9PX16dNfCCFFTPOXMbMd8pkLA/mTGKaWVWu/hijdSoLo\ngZzWWDGMiExGIiu/1neX2gvAtpciG8X4y7QvnqFVrOA3InDRMjEMsFNx7GREwUYQer60+Cs3aJaa\n/HBkhr84dpYvDF/gC2cu/LjLHfhPNgfDMLoNwyhEHyeBfcAR4BHg3dGXvRv4evTxI8DbDcOIGYax\nBlgPPPfvvffdd9/N/v37ueOOO3ROoTL0bLfbGoNYXFxcsvCyVAxapJf32rI6sB1ZqkajNTOTl8Cl\n7+mHAmQrU6vV2LZ1C5lMRo8yLcuiK5tkIFjghvXLeOzQS3zyf32ev//fX+Wmm25i79b1PP/887z5\nzW9GiJBPfOITTE9P84EPfIA1a9bQ2dnJddddh2HHWLlyJbu3XEUYhhprUD4CavNTrYxSEL744ous\nXbuWtWvX6s1r79695PN5dm5cx9FTZzmZ30L6h//CJz/+O/pnVmDkNRtWMj5blGDb49+kNj5LY64K\nhsmfnJnS9nsDAwM6l1NVZc1mU28K6mEMTcn4IxYZjGCAJ+f2ZiIdoeCuLH9NU6ZpawKPgWE70tfA\niWLjnTgimSM0bEjlIbrHykVKfV8j04kQIXbSIZaUgGRzbhEzk8NMZCKTVl86J8UkthSKULNGgyBg\nZmaGyclJjTf09/dHi83WatIwDPFSBcxsnnYAYbqLtWvX0mg0yOfzuqItFousW7eOjo4O7S5m1hcg\n9HFWbZC4F8gTWymG/Ygn4kjhlWHaS+NXy9Gflz+UI5OrnISkqoOsOjB0wLJdnca9dIrG5BxetYlh\nGthxB9M2ZeXgBdKQ1zTwG23cSh230sJr+rgVl135HD+3cR2/vGcjv7B1/Y+3K0Sv/6xyWA48EWEO\nh4FvCiG+D/x3YJ9hGMPAbdGfEUKcAv4v4BTwKPALQjWy/+alNBSdnZ36hFSMP2WkWqvVdFAtEDnh\nROScMMAQQmYv+h5epSb7uuj9RRhALKFPKPUyDAPba2pwavXqVayqnCMVNGh0ruHUfJv/+cd/ysTE\nBPv27WPPzm00QpudO3dy9uxZPv3pz5DJZNi2bRu1Wk3nUty0aYDZco3OQp6zI+Ncc801Wj3Z3d3N\nwsICnufpHEyVe7F582a2bNnCjh07uPrqq1lYWOCDH/yg9Iicfhlx5HF27NjBww8/jHjTz5EvdOjs\ny0qlwtve9jacRArDMOlI2lRf+AHtxSaBG8DP3MvBQ8/pRdHR0YHjOBSLxSsUiksp4+r6YBiQzEQE\nn8gD0bQlKh94mJk8ds8KrM5embGQ65LX3rK0dV/YaqLckMh0S+Nlw0AI8LC12lH954dChsDGEiBC\n4rkYfjugfG4K4bYJa+UIe7BA+FFCtY1hmDrjUm26ly9f1i1kT0+PdqNWqthsNouX6iSoFHFbDcxm\nmT179mgvj3a7TblcJhaLsW3bNmIm8pkzI4ISYCTTMhDYa0nNj8IOwiByepIYlyAys8GI2KFNaTmv\ncljMKOTWsuUmY0tLAt/3sURAOH6GxvlzuNW6PACDUAKQhgQhDcvEtC28agO/5dKutPFbPm5VVmeG\nZWgswzB/7EYB+M9HmSeEELuFEDuFENuFEH8Yfb4ohLhDCLFBCHGn4jhEf/cZIcQ6IcRGIcTj/9F7\nK/677/taHq3MUFXkm3L+Va4+ol1f0rbbskwVnrQvd7q6o7xM1XghrewjPKHVamGapiQUVVtcv3Mz\nmzZuJDE7zMLyncyFSZKJBJcvX2bt2rXcdddd3Hj9tZQqdb7wxb+mVCppZ+VMJsNtt93GD37wA9b0\n98jKZ2Ajly9fppCwuTgywtvfdo/OS5ifn9fVi9KPmKZJoVCgq6uLG264gfXr13P06FHy+TwAN954\nI5Wjz1M/dZR1vVlOnz7NEwef5uzwOemkVC5TKBS4986bKbYkTmGPn0UE8vTuvu0GfuF//o0GdpVl\nu2VZ9PX16ZEfvNISD8D3XFk5pDukSa8VeTzmuvXkwEiksHoGooc6xMx3Rn10AivfpQ2AZVqTi0mo\ngVh1nxUYqslQvouZSJFdtYxER4KSG1C7XMTs6JMkI8OWy81OQFtuVIr9qq7J9PS0luSXSiWaTanB\nmJub04G5pVKJ2eIiVr6brGMQVEpSHRrdn8nJSQCWLVtGX18flpBjXQOgVpQJa56HGUtKTCaZ0+NZ\nLCfCQ0LpKamf2SCaAiXkweV7SyPLSAqAZUksQbVY1WnaI6dozZcJ2h4iCDEdW1KjPTmyFH4gq4Vq\ni1apReCF+O0gGoyY+K1AhsS5V6yNH/P1mobaqNGlQplVVmWtVtOTBOUZKISAZBZKU3KurvEHpEQ7\nIu3Ioynq364YZSrPBiEEJ0+eJL57F6lUkhl3Gc1qVfogRMQmwzAYHR2luFjjmWee4eabb2ZkZISN\nGzdy4MAB9u3bx/T0NPfffz9nzp6NOA8T0kp+/iKTk5MYdoznnnuORCKhtRxqjOl5nlabJpNJvvWt\nb2ka85/93kNUrSwjIyNUVlzNtukjpCOy2COPPEKxWNRt1+tf/3ryuSxT9YC4bXPhT/8Ut9IgvbyD\nX/zuC1qSbpom9Xqdzs5Ourq6tD2fKucV4Uz934lFLUK7Jntivy0Ze2GIke/GbFRk6xBPYS4bJGxK\narWRlACmaNUx43LhGBHq7gVCj0tt23qFIlZdHywTI5EmsbwXwzTxQiGBtEoFO2ZFhCIQzUWMVF4e\niIakX6upzcTEhA5OVvaD1WqV5cuXa3xD5V8K4RNE3ImBgX5tE1gulzFNk/7+fro6OpYYjsq4ONoE\ntbmwE5dcDsuR2EFcmrpg29HoVqoxRVsG9hhRa0YsJTkbkSU9ELEbAxIW+BeP056axKu1JKch5ujq\nS7YxJl69hVtt0q65BO0g6l4kHmHFpICNQOAHPqb9ExKHZ5qm9liIxWKk02ldSSiAUOEP6vTXN8ay\nIndfCFt1tDOv21rKj3DlTVGzajWqUw7Ex4+fYHpGpjsVCgVWDfRjXkFH7unp4ejRo5owtGrVKp59\n9lnuu+8+wjDk3LlzdBbynDp1CsuyuHjxogRQI8uyk6dOSzux6PdUzs35fF5bsNVqNW655RbOnDnD\nyMgIt9xyC7nu5SwsLHDixAm+9Z1Heb5zKx/7gz/RrkgqjOf+++/n/e9/PwueNLIpVEYRvsv69/00\nhzZfx9jYmKYAZ7NZEokE+Xxe+2MqdeKVPb96Kb/OwEnJkXDgRaJAAaYT2ZJZsmf2oxRpQwKHot3E\nTOdkq5HKywVg2joMxjRNYpFS8kqHLtM0Ze8dRcGlerOEgN/28RstjGxXxCQU0jcxAjt9X9Lim80m\nJ0+eZG5OhvFe6WZeKBSYm5tjYGBAC9fGxsaw+1Zihh5mLM7qFStYtmyZbk2EEJFXZEKe/qYNvkvY\nqOmpgGE70gi2viixBMOKsiSMKMeyGf2ckVTaMMEyZVSdCKFZkRtK5JgemFJY5fk+FCfwJy9Rn1zA\na7TkiD6ULMegJQFZr9akXanTLDbx6p7cCADTsbATtmZECiEI/RDhh7ya12u2OaiH3HEczWVQuRL1\nulT5qZ5dcRRE1JMJ30eEAUKEWNnCEvEjCAhrFcJWPRqZRcQdYyneLBaL0dfXx9WRGnFxcZG5uTkm\nZ2aZmZ3lkUceYePGjeTzeZ599lk2btxIoVDg6aefZv/+/Rw5coQjR46w7447+P4TT/DMM8+wfv16\nEomE/LnTBTZs2MDDDz/ML//yL+u5u2ma7N+/n3g8zsjICGNjY6xcuZJz585Jk9OhtTLe7dJLbNl4\nFRs2bODtb3871WqV8+fP6+yJqakpbrzxRv7bbz7EsmXLmJycYmpqisbzT7Dxv/0mqV2vZ8223dpV\nSnE8lO5AidkUIKiqCLUxu64rGYCmJVWQvidHkqkOueGq/MZoMzCSGYQIsLuWE11sRCSkkmrEOLWW\nnABIbkUcI/SxjZCMtURzBqBVw0jml8JmgVAIRCAwMh1y1IelGYZCoAVorVaLM2fO6Pags7NTT7kU\ng3RkZEQ/W0eOHIFUTgKtYUAyEdO4RTKZxHVd9uzZQ4xozOo1JV5gIPkbZkR2EpFng2ku8UAcOco0\nUnn5e7RqSy7lWort6EpC+TiYpoXvy5YoLE5SGb6AW5PtlzwUTYK2J5mh9RZ+28Nv+NI5K2bhpBzs\npKMrhNAPCX2hiW2vtq14zTaH7u5ubQp6ZRReoVAgn89rXrwaMUrxDK80lzUtwnpVSmAjVyjldmNY\nlvR3iMrleDzOhg0b2LN7F7u2baHeaDA2NqbJRcqfcfXq1czPz5NOp7n22mvp6upieHiYDRs2cOrU\nKXK5HOPj41y1fi2jY+PMzMxgmibdnR08++yz4DUppONMTU2xc+tmenp6GBoaYt++fTz++ONUq1Wu\nvfZafN+nXC5TrVb57ffcSyao88lPfpK/ePIUZ89fYHR0lN/4jd/gs5/9LLOzsziOI0872+YPf/4+\nrGOPUVi8yNYOi4F8Euf6t9A4+gMq8/N88YtfZHZ2lmQyeYXDVSwyst1KpVLRrNErK7UrnbmWVIEC\nIxYF9xT69GgO05YEICF5ByLwEIEvyVLIysOwHGmLFlVPlmUt9drRA2+3FjXTs4UE40QoiOfirOpK\nEk87WEnpfYAQsmRPZiEMltS6wIkTJxgdHdWp7YuLi3qDUM5YjUZDP3cjIyMQSxMUZyDdQeD73H77\n7Tp1O5VKsXz5ch2MhGESVheWBFVCyPwIlWgVBvr3fsXkwonLnxcwnAQgn1sCT4K9IgC3LqsOJB5j\nLE7jT13Cb8kNxYo5Eog0JKhpOvJrvVpbAs+hkJuWCgwKlwBIK2ZKJynL5FXuDa8d5qAMTDo7O1lc\nXKTdbmsWm2VZ9PT0sLCwQG9vr7aql6o16e1vODF5wpgWRjwBbltayHmh/LwlQ1Ks0JIjwZ076e7u\nprxY4fLklAbpDEMmGpmmqd2v5+bmsG2bNWvWaFnwpUuXOHHiBJZl8Su/9AuMXBrjwoUL2LbNyZMn\n2b9/v2RDhjZD3Tlp6xZ32LlzJydOnGBkZIQgCFixYgWDg4M89dRTzMzM0Gq1+L2/+Qovv/wy7Xab\n3t5eDRyqE1UJii5fvszOHduxy1OIwKdx+LtYqTThzAxNEZK++S187tuHGB0d1aM9xX68kpWpAnGW\nNl1DA3tqcxACjKAtH3DTkp4C7foSU9GJyxK6VZUiLMuW7YUIMdN5iQmlJb/BxNRRdIZtE1o2xWKJ\nVCKGaacxjSUJeizbS2zNJhJdp+jd1kMskyQ+sEICea267PWbFch06Z95YWFB2+0pFaZKGpcBOhLT\narVadHd3MzMzQ7FYJEzkEfUKuE38ULBixQo9Pdm0aRNJx4K2dI5GBNCqSTDWsiNiU5RjGYZRRJ0H\nnieB00DyGQg8QBKeRKsmg5aiUFzDsCSz0rIBg0ARJKcv4E5eIvR9Qj/EitmYjo1hm+CHuNUGbiWi\nuhsGTsqRICRErYWQYGRb4gx+28eOW6/aJu41qxxgqdxXHwOamGTbNp2dnXR2duoRnOG1ovLKWZK4\ngvR28NqEzaZ0ghKhLGmjPIpUKsXo6CgHDx7k5MmTutRXcuVGo6GnJCpqXeUudjnyZCoUCly4cAHH\ncdjdm2Bs4jKmaTI4OEi5XEYIwQ033EC15REfkdTpZ37wA3bv3q0t8Pbt26f7X9u2qdVq/OM//iMT\nExO86U1vor+/n0/t20Sj0eDTn/40CwsLOnClWq0ihOCDbyK1uREAACAASURBVL+XYGGK2qkTiHaL\nxVPD+M0Wmd3X8/bf/EO++tWvUq/XdaugxFWxWExb8yWTSQqFgpY5qzwMBXQGgUS4sSJeglLzRale\nCF+WypHBr5HMoEg4AGG7IdWEgQTxEraxJPIScPDgU/z8z/88v/27n+Dpp5/m8OHDGpSs+WD1DZJe\nsYxUZ4p1D9wrDVRb9SjZLIB4WnoqRJvdoUOHIpfqnL6vpmmSyWTo7++nXq/rMaayl2+32wSmQ1Cv\nEJoOsaClrfuWLVvGvn37pBKy3ZCcDreJaDckzyOuks6i/Ih4YgmQTKQlcJrMRw+5JTcGkG7TYYDR\nMSA3GBFqTYXaGKzAhXaD5lxZiqjMiGsuBKEbSI1EtYnf8vEbMrHbsAztgeE1Pfx2gNuQGITf8rEc\nE78d6Irix329ppiDir5TM3hA39Tu7m6WLVvG0NCQ5LwbIJoV+Z/nSszBi041w8QwbWn8Ev05bMgT\nAaQCVE0/FDvRsizq9bp+wBTlds2aNTp81TRNFjybqakpDh8+jGVZfPTDv8Jcqp9//dd/5Z577pGl\nJ/J0X1hYIFHowehYzr1vvYeR8csMLe9kenqa8fFxHSnX1dXFLbfcokHXixcv8vzzz/O2t72NxPbX\n88QTT9Db28v69etZs2aN5oCsWLGCW29+PbGNV5MaHMSttWgVK7j/N3VvGiXZWZ95/t67xZ6REZH7\nVln7rkJbIYR2MMMis9nGuPEyYwwGm3E3TdvGbhub4/bY2J5mevDYYGhjW6JBSBYgAUKAQAiEkFRS\nSapFtVdlVlbuGZGxx93nw3vfN6vGHjf6pEOco1NVUiorM+Pe9/6X5/k9rR4f+gdJqAb0Ll/FwClu\nhnJiqkjAfD5/hUpRuT11CplITEK+K41TfUOaY0i+Im+O0Je/ikR2bRjy8E7gJnGnBoGL4ziyWvQD\ndu/ezR/+4R/ym7/5mxw4cIBSqcSpU6dYXZX+j2h4O7kduyjtnIQwIKqvSPl1ppAMOE3trG02mzz0\n0EP09/drIZfrunr7peIEVcvUbDYZHByk1WoxM3cpQbsZRPVl/TEHDx5k06ZN2L062Gk5eAylV0KD\nXJxMImpKy2rBzmwE0ATyBid5iMWKTh0FUiHaWgWEbjcQAkNRyfwuQXWRsNNL5gsCYQj8rkvQcYmD\nELcuRU5xFBO6AUE3IPRCgm6AZZsE3YDI25BTh26ElZJDypfyetnainQ6TafTwbZtnbegKE2qtJ2c\nnKSvr498Po9tmRvrJJEYTnJ9xIEv/RbEYJoEzQZOTirqiKMrYu5U361KTzXXGBgYoN1uMzY2pmGj\nvV5PMxoeeughZmdnefe7383Q4CBf/+a32bFjB+vr65TLZU6cOEGpVNLyXXNsJ7dMOXwPwabhQX3D\nnTlzhlarxaf/7PeZa8vW6oknniCdTjM7O8tNr76R+773GA8++CB9fX1MTExw4403Uq/XKZVK7N69\nm5mGz/jkVYih7fRvOUP65GG+2izw1AOfwvd9RkZGuO6661hdXeXEiRPaP1Eul/VqU91EalCq+AdK\nL0Did7EMO4ljy0GrKn+vNA+ZotzXJ09yhCVXn56PyBWJ3Y6s9MhAp0GxMIgbyrVjPp9ncHBQi9Mc\nx2FoaEjOQfCIjnyXtcd/SN+mYYxcHiOdk2IjKw2pDLHpYEQxvZ7MF7kcA+e6rqZGh2HI9PQ0tVpN\nb6yiKNK298OHDzM9bGEEPaJ8GcNY1UCYoaEh8NflwWeliOtLklOqsAFBkkehTWHJzCEZNgLgtWXO\nhNoECZFUtIloKvDk/5PKI/weIQZGfYlgdYnA9SQYNmE1gCDoSZ9E4ErMXZxk3sgWBQzbwO/KSlcY\nAsM2CL0QYcphZvSTsq2I41iXd6lUinK5rDX+Chiq/snn85iRHGRFrTrCdmRWILFU6GVzspKIkkFk\nJA06csiTfKPJ0E1Jj9VkPp1O6zTqer3Ogw8+yNLSEul0mlKpxHe/+12Wlpa44YYbeNOb3sTn7/1n\nvv3tb7Nz504OHTrE4OAgw8PDWmTT19fHMy+ew75wiImJCQoT27j++uuJ45hKpSJvCCfH6Moxbr31\nVu3YfNvb3sa99/0ztm2TzWZ57Wtfyzve8Q6mp6d5y5tez0+NWuQt+XN78dwsrpXlud/9U06fXOC/\n/e2n9TpYtSurq6tJepbJwsKCdh0qizygJ/sqSFjFAiozUxwnKUx2SuodbBm/JgyTuL22ERvvuxK7\nbjngpIk7Ddn2BR70msTNVURjiZTXIO8YpBKpfBzHGN06hZTJQD5F/8nvsPyx32X+83dJQGq+Lxno\nJQpZ00xuKBJvSkMnbkVRpNeYagOiXKxTU1N0u11KpZIeTJqmyfPPP4/RP0DkucSGzNAYGBigUCiQ\nT0mjlLBS8vv0e4kKVK5T5VYilXgiQvngUjh6xWhINB4S7pIMKZP5AqY0Y6lVb2w5RKEkaHnrdSLX\nx7BMQs+XqLc4Juj5cgCprulkyKhUkHJoCVbKIo5iIj/CzliYKTOZlf6EtBWGYdDpdK5YowHaJKOw\n9CppWslSjUKJyOuBCg0NQ+IgkOYry5BoeiDudoi99hUKPEUoVpBZ0zSpVqvEccx4Xjonu92uLk0v\nXrxIKpViYGCAj/7B7/Hwww/zpS99iV6vp7Ft6XSa1772tXQ6HXbt2kWv1+P06dPExWHK5TJGp8Z7\n3vMehoeHdQ7oTK1Lc9tN2LbNxMQEV111Fblcju9///ssLy/zsY99jDvvvJP+/n72bxnHfOSzBI11\nLiyusrCwwMTEBM7hhwgj+G8nFunvl+vTTZs2MTg4SBzHeutTKBQYHBxkYGBAWpXFRrqXojOrwaea\nPaiSHWHIJ18YbIBnTUv20VYGka/INzOQjIa4104szGlJOlIRb6msXNt11onXF3FEREpEmK0V/Bce\nofe1T2OszxOsLuDVZbZE0HUJmw0MJTZKbPiRnSEIZIVz/vx51tfX9dxIDZnX1tYYHR3Ftm1KpRLz\n8/OMjIzQ7XbZsWOH5pTOzs5iDm8mWl/SHI3t27ezb98+RLsqWyOQFWivI1sQlUkRJQ8fw5IHh5PR\n9CdhpxNbdiANgnZa6nLCQNrNDSMRlnVkxioCPwhJOxZxa53I9YgjebNb2TSmYxEFIVEQE/QCwl4A\nhhw+WmmZehUFiRnLEIS+rBbiKJbKyCjG7/j4bZ+X8npZcyuUdVq9ueqmVDHrIyMjWigDyIs18DBS\nGfl0C+VaM/Y9om6bsNdDGCZGTllpYwyBHkp2Oh2pq/d9jVnL5XJMDg8QLJ1jZWWd0dFR+vv7dYjM\nVVddxW++/9d54tBhnnrqKTKZjIaujI6OcvLkSYpJyMrQ0BCO48h8y+Ik9dUaQ7kK+/bt481vfjPL\ny8tMTk6yuLhIo9HgyJEjHDx4kMnJSe6++24qlQrbtm1jz46t+K6LcfEFeo99C2+9ztP5AjbywOxb\nO82pf/g8C+95P/V//Ec9ZFSot1arxdjYGAsLC6yurmpeRafTIYoiSqWSVqMqkZiSThuGoWcOglg+\nGdXGQiU8mRL/hrJRW86GySj0idyOdGQaZqIlcJOnqYWwHJkt6fWIFs6w9r1H6a7WSU1uJmw3CdyQ\nlBCEXoCZTssWJl2QvoZeGyPdh2FEuFHEXXfdpQ9o1aLEsdw6KPKToonVajVdhU5MTHDx4kUZpJQr\nEXfbUhUK7Nq1i927dyczgki3DIaTlj28293wQgiR+H2SiiY5IOQBYCJSOTm7STYWkvEgMymwk6oi\nScQyDANcGSYctCUT0rBMIl8GOnnNLpEfJtJogZH4K+TaWaohAzfESpkEoOfDcRRLq7bYGPr/uK+X\nrXJQq7Ver8fy8rIuaZWDUA0OIdH+x6H0TngJFUqBTj0Xkc4ikkm4mUmoRXGEsByCMNKGLpB9fqPR\n0ClYowMlRKfGgijiui5XXXUVpmkyMzPDa1/7Wu644w6+/Z1Hufvuu/UTqNFoaMVhp9Nhfn6eF198\nkbm5OWZnZ8nn89x1z31MTYyxvLxM6PbYtGkT+Xyea6+9lnq9zsmTJ3Fdl2eeeUYPSu+44w5ubJ+Q\nYqBj38U99iSNEycJtr0Cw5bmIsMwqP3oR8zc8SY+9rGP6Uj7c+fO0W63dY5GNpvVg0cVO9doNKhU\nKnoqrwRSyi2qfA+qigsuE+wQJoPJtIyUF+m8VEoqZaBI3LG5fozikCyXExGaRMOZScsXypVeu0a4\nvkLt1EW6Kw16509hOA5REOLVW4Suhyj0S5t0FCFy/TIcJwYMOb+Zn5/X2xXf93VwrrKmDw8P6zZK\nUa5932dpaYl2uy21Jl0ZJydSks61e/duCoVCIrKLk0OppdeGKlRJmhcMqcqNla7BS3I+LDmcTecS\n7U2yXTMtOVhVhOpEFyG9hJJyFdbX8LuuFDx5Uk8RdF2iIMbvJavNVJJjEcdyrawUkFGMsIyk6ogJ\n/VCmwDlJWxH+hLQVsOGvcF1XJxkHQUA6LRmRqiUIwzCRzsqeiijSU2YjLSW7wpSI+bDb2dhmhD6m\nkENOVX6qQ6Hb7cob1q1ycrlFPp/n4sWL+qIZHh5m9+7d3HPPPXz2s59ldHSU0dFRxsfH9RBV5Ssu\nLy+zurpKo9HQeRR79uwhly9gFAaIApdrr72Wc+fOsW/LBIcPH+auu+5idXWVMAy5cOECH/7wh3nr\nW99K9g2/StxYIWquUz91nsj1OBJXKBaLpFIpdo5W6KTzfPzu+zRibc+ePeRyOQ2yUQg8ZQ9PpVK0\nWi1arRbtdpuhoSHNNlAH9OUhP+qAsCw1XBNyRRcnyc+91objMluUCkEnvTG9j+VwOO5J2bFI5WVQ\nSzKDoNckaq4RNao0Zht4LRdvdRVhWgQ9qfhzijnp1xBCHgqtVSBGhC6dbo9PfOITuv28HBOnNBxq\npqVWpK7rksvlWFxcJJVK6blEL4gwCv1U6y3t4JTRCIZ0VibbGuGkpdEvCDbmMIEntw8qCkHRnBJB\nGF4PhCm/76xkYWjFZJQ4Sy0bIeQ8jMAn9gM9PzAseUB4bQ+/7eG3fblxSOYMgRcS+hFhooS0UrLF\nsFImkRdd4aUwLIP432Qy/cvXy1o5qMmxmj8oOAdI+atCrHW7XelUM2yMVC6h3sQyDi/wtNTWSKcw\n0mm5vQh8CRXB0E9JFUQL0hU6Wc5xriNBIdlslrW1NUzT5C1veQubN2/GdV0ef/xxBgYGmJmZ4cCB\nA1iWxVVXXUUYhjz33HPcdtttNBoNSqUSTz/9tCZNP/LII1yaXyCXzVLv+hQKBd77nl8jXLvEl7/8\nZcbHxzl27Bi/8zu/w/vf/34qlYqkYNlp4uYqXnWF7kqN+ts+QDabpVqtsn37dpr3f5oP3fMQvu+T\nTqfZsmWLhtGqVkgh66enpxkaGtLSaQXQsSxLw1MvF0Gp2Y/acMQxsnWzHOg0EhOWJ7cTCe5MKBSa\nKdkPwnJk3JuVwugfkW92HCWbjQSC4nv6JrOz8udvFfqIPA/TNujVuhiOTdxpIYqD8vM6ebDThFHM\n3Nwc9Xpd2/FVS6U2T+p7BPQcYnl5WR96SiDWbDaJEcRej9CXMutMJkPKlrkSwrQRUbDBfOw05OzA\nTuYLviuvP2Ekq0tLPsQMU+ZigNyyOBlwW8ShJ69NO51sflJEpkPPlYd01K1LendyPQc9D7+TqCAR\nmLaZzBbkPEG1DdLJnsBeooigF+rDPo5iOXvwVUTfj/962Q4HtfNXijSVrK0zK5P5g5L+ClkXSV99\nmOCuDEPKpwECD29dqvUQyDctWdUpbqNqVYrFItfv28nFaktzJer1OkEQsH//fh555BEWFhZ44YUX\nmJmZoa9PKh4XFxdZWVlhaGiI9fV13vGOd7C6ukq5XObUqVN6rXnnnXeyurrKX/7lX9JaX2Owv4Db\n67J/osKf/9OXqVarHD16lHe/+93cfvvtXD2cZfvUCFOTk8QLp+m9+Cy1518k86a3Uq/XNcuy8Pi9\n3BsNU6vVcF2Xffv2ceutt2oephrwLi0toRiIKgBHCMHKyorWljiOQ6vV0q2FUkeqGYRMkU8IgH5P\nzg6iQN4ITnpjOBnLHlhk8lJmnZT9on9UltHpgrQ7Z4vyaStEwl70icKY4Wu3kC71MfvwU8x+8ynS\ng2XGbzuAlU4R9lxEfoDYycgKJfAIhckXv/hFqtWqxtpfe+21+jAAKaS7fHWr3vNsNsvOnTvxPE8z\nS6u1GggDS8hZhWVZGJe5JGNVvqubPI5l9Wpa8oAEeVikC+i8ikR9Hvu9DeVkDAIjSeM29DrTiEOd\nFUsUEwWBBMP6IX7L1RVDr97DsOTKUhiC0AuJ/OQhGcl/FwN+S4qfhJCDySiKiPyEafKTIp/udrvk\ncrkrAkvVvlq1Eyr5SogNYEXUXkeYJlHXlTOG8jBhbZkoDDEzToL2DmUZGPramXj5wO3gwYNUGy0u\nXJghlUpRLBa1YOaJJ57g2Wef5QMf+AC9Xo+pqSkqlYqeZqtUrlQqxfDwMHNzc+zbt4+RkRFarRZr\na2vMzc3xoQ99iM985jN8+h/u4pZbbmHz5s3khge47bbbuO+++xgeHuamm25ieXmZieVTVD/3BfKb\nN3H80HH6Ng3Q/5rX82TYT6rXo1KpMC0aNPbcxFc+9bsA2uG5fft27rnnHs08VCpBlRnpOM4VWLjl\n5WUtLVZQk8szJJXV2Q8CHNVb2xkZ3NrrSOtxjAzWjUNwssRCzhN8M8AyQCjycrJuhjhxIsaQ7sMo\njmLYDua+28i8eo2xKCS4dFru6vuHMAoVovoS9Do0IhvR6VGwgShkbnGFQ4ekHT2Xy1EqlTh27BhC\nCO24VKTwvr4+hoaGME2T8fFxTpw4ocnjIKuKQ4cOsfvaCUK3S7E0QBTKFCw9RPW6aP1CHEm5s0rC\nNpUa10UownS7ishX5O+jINEhGHLVq3B5ImlDokg6S11JX8fvyhvbMIgSpLzkMwSYdrKWN9QWIkwO\niQhhxBi2QeRHcu2ZzB2l9DrZRPkvLQoPXsbKQQghQZ9J2pDS+Su2oppDqKeaBop2WtIKiyDqtghX\n5xOwhk/sh8m6SaK2FPNPmW8ajYbEumVtDh99UfehoyMjWKbBzMwM586dY3p6mrvuukuX4YVCQZff\njuPw+OOP63nBNddcQzablU/2QoFOp0Oj0eDYsWO8613vot1uUygUWF5epuNHjI+Pc/fdd/Nf/ugP\n2DUo7d0i149TyHLx4afprrbJbZriybDEpk2b6Ha77Nw8Rfd7D/DO//Bh7WZNp9McPnyYEydO6G2P\neiKqr2NpaYnh4WGWlpZ0jkMQBFdAalUUQLfb1UY3NcCLogg3kHOGUJjS9OQn4qZOA9rrEEVcWlzi\nuedfYHVtjVbXxTNSROkCUa5CmC3jZcq0nBLrVj+tzCDrcYqlpsfyepuqyBOUJrH33oKx5xZOu1nO\n1DxqxS0camU4eeqUFMB1G8R2hi9+8Yt6uKy0ErVaTaMEfd9n27ZtLC0tkUqlaDQajIyMUK1WmZub\no9vtMjIyopka1WoVkevHth2sOMAmgO66XMUqjDzJ4A8SuXRuYwib2NjjKJlFZIrEnfrGfEZF4Bnm\nBgDH78l5RBQQJfEKvu/L2VkcEroevVpXrx9DTypQQzci8iL8jpw9WGl541sZM3FgyipBDR4jP9L/\nXvrcXtq24mWrHNRNp3QOjuNQq9W08aq/v18/9WzbBr8JpoWZ7ydcW5BiKMsmCl0IumDbmHEsh1gK\nh27aOgbPNE127NjBq3dNcOT0BdrtNsVika0TwzjV86xEUm48OjrK29/+dj7xiU8wOzur8eSu67J7\n925qtZomS42MjDA+Po7v+ywvL7Nnzx6ZGVGr8fjjj5PJZPjABz5AoVDgz//8z3nzm9/MCy+8wOTk\nJK+7bg9tK0clbVL9H18i9AICL2T0lZu5cO1PM5pKsba2Jg+IL/w1dy25eJ7HyMgIhUKBhYUFKe9e\nW6O/v5/5+Xk9T/E8T69Wle6h1WppjoGyMC8tLV2xLlbwGbWtUHoHQYSRZIZgp/WFjWEShgELCwvU\n63WOHz+O67qMjo6Sy+W0KCuXy2lOgvraCgUJdR0dHdV08dnZWer1uhYvTU5OknIc0kJe3Isrq3z/\n+9/X4TWpVErPEFRuaDqd1oI01S5ms1na7TbVapXh4WFGRkb01zc/Pw+FQfKZPEa3TpjKJz1BRNxZ\nl9+raROuXsIcnEr+WwJ5icKkAgiBZKUb+NJDEUvOZux7ckOhU61cOey0bLBShFGc/NzTxN0WQUda\nsUM/JOjK9sKwpLpRDRittLUhukyqB3UgCFPOjqIw0hwHwzaIvAjhvLRa4GU7HNTqTEFe1brRsixt\nNVblfhBsUHlj39UDmziKJGvAdsB1icOIKAixKmkZtGKntTx4dHSUn75mKxfqAcePH8cwDEZGRkgT\n0O0bpzE7x8rKCjfddBP3338/uVyOEydOcPXVV2tFXbVapdPpcM0113D+/HlyuRyB19PItVarRblc\n1gG19Xod2xQQyaHYoUOHmJub44YbbsDqq2ApInMqw5F7vsvQjjJDr3s9LyYX9/j4OGPHHuHiyGa+\n9eA9ejWpDFStVosLFy7Q399PrVbTvXUURVQSTL7qu/P5/BWzHTWHUNsMxTBQh+nlh3YYgWVaxMKE\nAOitynmC5WAYJnv27NG27PX1dQ1LUQe7Mo+pFbUaGEr0ex7H70Dksm8wTbxnN67nk3VsYmJE6EO3\ngSgM8F//7A802atUKmnFp5JMG4bB0NAQ58+fx7Isut0uYRhqnYeaOY2NjWkJfafToRdBpteAbBHT\nMOSswDA3dA6Bj1keldVA0rZKvUIgZePdOmT6EMTEAokn9CRDU9iSiakOHEEsCVExxMJACPn9GIDf\nbeHWm3j1jhQ7+aHMx04GjnEQY6QN/LaPmTZllRDEiCiZKxkCgo0WwkxZUjIdSzrU5SzVH+f1snor\nVB+fTqdpNBqaSjQ0NKQ3F1IGm/R2QOz1MOwUURI/Fnsuwknh1VsYSSwYkKQvdfCRDsRrUnVahXG+\n+8CD2hK+ZXqKbqdJ0+3SbDbZvn078/Pz7Nu3j0OHDrFjxw5+8IMfMDo6ysjICLt378bzPKanpzl0\n6BClvjxpr8HKygqXLl1i69at+iml1mn3f/kB5ufn+Y3f+A3uuece3vve9zI9PY2YPwqTV+EHIc47\n/j3WXz3E9J038EJ6is2jZVkeV49RO3+e//pijXw+r9eTanCrnp6tVotutyuJUP392jOi4gYLhYKe\nkygjkkq8Uq2ESpZWWZzq79HiItvGFonJKpWVNw4gOlVyThbXyGNZFgMDA1qBqjQU5XJJ9vCGSXTu\nEMHSRaLaEl6tRpxOc+mZ48RhSGXfFvJveR+ZvkFEt47wEoNTtsiRE6f0oa6clwoGBOivXxG1R0ZG\nsBLiFECtVmNiYgLP8zaAxaA3ZqnOIubW6xNMvCvDfMKePAiMZPZiJdQmrwsZO5lLOBtuUSWMEoa8\n/tRA10kTt+uyojVt+bFODhEFRFGiK3EsYreH1+gSBTHNhRbpvhSBJ4VN0taJlk+r9iEmJuyFxDEY\nShXpS2KUYcq1pqG0Dz8psBfV5ypun3oj1dDs8sqi13P1DtnoS+ClliO99YYgRmAXZCshLBMMQdRp\ngu9imiY7xyp0pq/nc5//gnbrjY2Nke6ucWF5o5XpdDqcO3eOt7/trYyPj2tkXK1WY3p6Wg+zhoeH\npRS5XSOOJRfx4YcfZmZmRj/xlYlsdXVVw2lvu+02xsfG5EZGGIhQGrUylmDk6hHaP/VO+or95NMO\nO1pnaB19gfuzW2g0GvqCVvMA5bI8ffo07XZb+wfm5+dZWVlBCKGriMnJSZ3H4DiOdpKePHlSrzTV\nZkgpVdXPX2PjBbghsr8WyY0iRAJLdUlZBplk0Ke2CIqX0Wq18WKDuNtA2A5WZQQME7tQILVpB+Wr\n99C3YzP28BhxYQDDa0tic7sKlkNg2PzFX/yFnkmpSiCdTmsRWLlcJpvNcurUKdbX17V0HNDD2svf\nx2KxqAnVfq8jtwimJXM6wnBDGq3s/3EkB5FBMosAWT30mpDtlxoFty1DgzsN4iQQV4NzhJCfz3bk\nr16H2LA3dDzdJlGvS9hz6VY7WI5J6IWYSSsQ+Umb4MtDOegFek2p1JBymCkwHQPDFJgpE2FJS7dh\nGdhZ+yXdoy/b4dDr9fRFXq1WtXVbpWKr7YFWNwrkmxImqVdKDioMifFKyqrIC4jdHlF9ld6z3yXn\n1Vhp+/zdpz+jb5pUKsX+HVvoxZamXx85cgTLsti9ezcDcVOLipQf4+DBgxw5coRbb72VZ599lhtu\nuAEuvUhgpjl48CCVioSPnDp1ii984QscOHCA4eFhXvOa13DHHXfQ6/UkYShskcEj9rp0A1lSvvib\n76Vw+62stT0mx8cYbF7CX6/zg6EDPPDAA1q34Pv+FU981R6oQWOxWKTb7TI9Pc3KygqdTodarab5\nnJ7nUalUaDabV8TpKSiK53mazKUYjKqCiCJpbQ8NC5xccvVI4RmmlE2bhtAbpl6vp/0xapXsm2nE\n0DbE4CZSB99A+to7MLdeTeENv0L57e8mfdsvSLOX2yHutRC5ErFp85UHHtQ4/csHw6pCU6xR5cRU\nKDhlvR8fHycIAjZt2sTMzAyA1nU4joNvpIjDkLi+CJ11KW4i2rBgq00FbPg81AzGchLGZHItBpI5\nInmm8muNe+0kXTzYmNfYKfm9qpeTJg4j3HqXoCudl6EvB5BxFGNYhiQ9xeD3AgmcUtVDBFEoB48k\nYFkrbWGlLDKlDFbKJFVM/eQcDt1uV5ef6omgrLWaNg26Z5Q0njiZJUixjQwnlYdCHEaJMERSf82B\ncVJ7D+JmKpy9MEMcx5pxcPPNN8PFI7x4UQZ1FQoFlpaWWFpaYnp6mrgwwBNPPKEdozt27GBoaIjZ\n2Vnd8lQqFaJzR5hdbVBfr3HnG15Pr9dj3759rKysWKBqWQAAIABJREFU8PDDDzM9Pc2uHdu58cYb\nueP226hUKrRWl/Cf/CrG2G48V6r3ihP9lN7ys1y1fx/WD7/I7Kf+ls7Wq/ncPfcyPT0NSFGYck9m\nMhlGRkaoVCoMDQ3p8B+ljDxz5oy2RKtqIJvNambk2tqabjk6nQ6Li4ua31mv17XWRHks1CGUyaTl\nz9tyJMzETkG2JJ+0CTvDFOinuiJQqYPIC2NI54j7xxCFAURxGJHrJ86V8QrDRKk8RmOJOHDlEK9v\niOVqnSeffFI/MHK5nF5FqvehUqnoKqdQKOiqRYXTqBmFIn7ncjmCIGBgYIBut0uxVJY3t2FqSlMc\n+MnQNQnx1ZqGlPzYONwIy1UBP2r1q1FyiSQ9SQ+TKlJHDyfVAkSu6iPCbpsoCAm8KInBiBPOS0yY\naB/iBPoSeqFMBUsIUMQxhm1ipkycnI1TcHDyNqYtKwbTNvRa88d9vWyHg+M4+umWy+V0aa+eVuoJ\npGLrwiiSEl7Lkf1c4EmLqmy2MNMOVsqW+n3PlZkGfRWCMNJTd9VSVHrLnBWD+L5PNptlaWmJmZkZ\noiiS6sdYrlnL5TKzs7OUy2Vt8PnkJz9JqVSiXC7jN5uUy2Ue/OrXeM1tN/GqV71KQ1qOHj3Kn/zJ\nn9BX7Gd0oMyp02fYsWMHX33qOObYZi6uVDHdJlkL6heWKdGleddfMfuV79D/htfwJ5/4jB7GKr2C\nZVkUi0Vs29ZPZWXLjuOYgYEBpqamME1TrzPjWEbLKx/I6uoq58+fZ3x8XINZFxYW9IT/8uRztUpW\n/wRBKJOY1LQddA4kdgoRupIMLgSplMTDK9Nbo9Gg2WyyvFplZa1K3Y1YC2yWGj2WVqUyVcwchva6\nxNln+uh4IZ/61Kf016NMea7rSgYk8saqVKQ7tF6v64fN6OjoFQeAakdUElmhUNB5ml5sEDVqiFxJ\nbhISwphKcheZJLLOMJItRcKJVD18Op9oI3rJ1R1pM5Y0cPlJ8nYyWE/lwM5o0FCv15NQm06LoBvg\nd6RALI7jDZt14o2IQqmMDHoBUXJYWCkTJ++QKaVJFVISK2cZyUJFbiy8jo/X9F7SPfqyHQ6e5+lt\nxPLyMs1mk/n5ebrdLuVymf7+fr0GUwYYYcuYd2E7CNOSZqtEwRb0PIKeJ+k5hinflMt2u2qAl8/n\niTt1XaUEQcDDDz/M/Py8nq6fujBHpVLB8zxKpZIOnFEuv0OHDnHTwWtJb9lNprMsczbWJZDFNE1K\npRLbtm2jXC7T63YIfI+xsTGOHj1KtVqFzddy7MWThHaa6OyzRJFBnOnHGRojv/8AH77/h8zNzek5\nQbvdptPp6HJdkbnn5uY0GzGVklBbVf0899xzCCFYXFzUqdwqZl7Jo9UqUEnHlYJSDelWV1e101Pp\nHoQQBDGEoVIDxomwx9D8DAMIApmhoBSqgwMVSsl6WmV45DIp+jM2w5aLsfCiVFoOTsuBp5PhS1/6\nEoZhsLKyouPtlDxcrbqnp6cJgoCRkRE8z2NyclLL5ZW2JZ/P6wpoeHhYu3J3794tr40wJKytENcX\nidrrkMoh0nkp3BJIL4Sdlu1rlKRom3KmgDDktiJOBpVeRx4CCUIvDgNZKUSJ0YpIflws6ek69StV\nAGFKVWOQ5ISGUhrtNtyNNsMPZVamSL6MlJXAXCTcBWTKdtD1cRsuXsvD70paVNB7aUG6L9u2Qk3c\n1YDNsixs29ZvsIKsgqwyZE6CIxV5qu8DuR4yLaxMmshzUfIw6d6MNKhVcQviOMYolIlr67iuy+zs\nLLlcTu++Pc/jU5/6FH19fVqMlclkOHXqFPl8npGREc6dO0eutYh9/U8TBT1+9Zf+HQ88/Ai//Iab\ncZ08W7du1QlT3/7Odzl48CCO42hhkiBm69atkoswOEm32mHtc3/N2tEZ7pvao+XNpmnqZChVGTSb\nTc1DVKW7+rOywVerVY3dUyu7iYkJXnzxRS5duqRj+Wzb5ty5cxSLRT3/ieOYYrGoiU2+72t8Gsjp\nvm2Z0jKfIPl0P26YiEBCX+xkpWdYFjSXMQMPM45JuS3iXheRySV9uZlYmpHJUaYNvSY9K8/f//3f\nc+edd5LP52k0GrTbbUqlkr750+k0c3NzBEGgEXMq9AfQ1ac68FSbE4YhhUJBA4K73R5GrgDdppwl\nODKVSjgynCZGqj5FKgcq1SoMdDiwDK1JrlGEDPaJJE5PmIkaUqkr4xhMiygWesOigoAj35f4tzjx\nQiTzA9O2MAyB1/YwbVNyIw2BnZMYeqV/CF15sESh5DyE3gYwOEpI7C/l9bJVDpcz/zzPY319Xd+I\nxWJRD7LURSC9FaAF4oEvU5fSWU3nkWE3Bpim7Flj9NBJCXKq1SrtvglGR0cpFot6Pbhz506uuuoq\nLl26RLPZ1AeVekqpaDV14yx2I4I4otqLaHsBN930asmSSIxAjuPwwx/+EMMwOH36NCKOGR0dpVKp\n4McGzzzzDMK0qP7z3ayeqbL4xDEuvfFtnDt/gVarpdOn1GBQ8RgUJFWpIZU5TTkUPc/TCdPqwkul\nUnroqOTSp06d0mvXRqPB2bNnqdVqWjGpNkXq71ElcBRFRIlGArWqU7ZuZV9uLEO7BvUFWL8kb7rm\nKtGlEwRzp/FnjhMtzcgnc+DK2ZEpoShxcwVMm7/91Kc0zWl1dVXf3ICmOY2PjwMwNjamtysKqFOp\nVK5ABObzeUqlkt4kKcBuX18f3XaL2O0Rrq8QuR1EpiirAUiGiSaxuyH8it3ula1Vvqy5D8ShPBiU\nycyQdvcY5DDdkjMHRSZTX7fneTLvNY4hTOjRSeugvBRmysJMW6SLaeycnVQWQrYiXT+By0qeZOiG\nCZJeVhRW2iJVTL2ke/RlOxyUrl8NIPv6+shmswwODpLNZq+Q8OqgV9UqWDK9mTiWga2G9NDHodz3\nCtNKzFmCOAy0Ak+V5DMzM/oNOX36tAaAlMtlDV5dW1vTOn3FJjx79qxOw2rGNi+eOMW5c+fIZnOk\n0xleXOlgddb0E2p8fBzP8zhx4gQDpT7K5TK/9Eu/iGVJRFm1WsV4x2+w92f2Ef7ae/jsPz+oZczK\nnTo2NqYPNpUxCRJSow5PtQJWCdGNRoPl5WXiONYDxlarpYVOlx98ruuysrLC4OAgjz76KOfOnWNt\nbU1DYtThpIaU8imXvIlxhOYaREl4rNsk9rvE6wvE64sSI++7ROsrRJ02UWtdKgEXZ+RTudeR5Tpx\nYnPu4MeCb3zjG1iWpVsdQK8fHcdhYmKC1dVVpqamOHHihKZbX36YqhV5JpMhn8/r9W86ndb4uF6v\nR68rvwYVr4hpSQOfArQIgcgVkhs+SIJzBWDIFiHwNriRQsjr8zLpdRwnWRW5finqSkyEStEaBAHZ\nlEOv1iToBMSAnZXbhhgpgLKztsTLC/Shh0CLnNRMIg5jLMfCylhkKmmsjLUBl/1J0Tmo0k+tntQN\nDOgLXc0EoiTARu6dQ4kcS9RqRr6POJS0HCOTTVLbkr1yHBFcpl1XPn7Vx6uyfXV1ldOnT2uX6Nra\nms6uvHxVmE6nWV1d5cCBA3hBxEqig7j33nt5/vnnGR0dZdW3GRwckCKrLVvYs2ePLOPXavS68sku\nLh7h7NmzLC4uksvlcPqyPHZ8hp07d+oeVA3g6vU6hmHQ7Xa57Ta58Wg0Gtp5qZ7onueRzWal5Thh\nc6qf3czMjGZTqidpEAQ0m02tn8jlcnS7XQ4fPszRo0c5d+4cjUaDarWqDxxF6xZCYAhBZMjQGsIA\nOnX5+yiWluxek7C6THDpNFFjRY6GfJfY7WH2DyJyfYTry4T1VfkktpzkfrM4duqsls6r9aXC7Ckm\nh4LuqEP8wIEDNBoNut0uAwMDelXpuq5epSqvhfLFZDIZ2UolIbZAEsQTyOF36MmHTmLPxjATlqZk\nO2CYshVyMonRLA1RTNyqys/lZIA4SSrPyoPEThMn4F4tTxcCmiv0qi38nhxIKiGTnbYwHWNDr2Ab\nRKE0XmlsXBBh2iZWxiLVl8LKWXJ7F0t5tbwX+MnJyvR9n8HBwX9B8VEl49zcHLVaTSviBMg3MAwS\nKk8yVwh8hJPGsG2tZot9T578dlr3yyrRSd18isa0tLSE4zgcP36cYrGo07hLpRL5fF4nIAEaMVer\n1eQUPOnvn3/+eb7yla9w3333IYQgLWKyaWkV3rJlC7fffjsLCwuU7AjTtBCmxW//9m9z+PBhTp48\nyenr38js7Cw7d+7UKsNyuawHhkpe/uKLL2rDkMLVqb5aUbQuD5Btt9tkMhkmJiY0vapQKLC+LkPR\nlWBrbW0N3/fZvHkz3W6Xp556imeeeYbjx4/TbDZZWVmh0WgAaFZjEMqBI2pNB9JP4Hch8nXfHa4u\nEK4uSGt94MtELCEv2LC2QrB0UTIgnIy02acLfOfR72mNyfz8vG6RVIuoYMCTk5PaYzI3N6ft5opJ\nUSqVrlCBKvdpKpXSUJ/BwUGaXY+4192YncShbHF8Vyse4yDhWujsjngjYNhtS9s2STReTs574iAR\n76lHe0KAkoPISH+tQgji+hJes0voBlrQZDoGRiJ7FoZIyGeRrhKEkOxIy5H2bytlkuqT7bSdc7DT\ncmthpS2cgkNmIPeS7tGXHfaiErAB7RJcW1sD0ENE0zQxxEb0mBysbOC+YxVJRkzoJSsn0wSvo/0E\n6gJRffq2bdv4xje+wdzcHGfPnqVer9Pf38/w8LCe0m/bto1er6eHd9VqlbW1NZ5++mny+TzXXX89\nV199NWEYMjk5yezsLEeOHOHkhYu0OlLOnHVMKpUKxXKFnl2gYnmIXInz58+zf/9+JiYm+NyXv0al\nUuEb3/gGfX19+smmSmUFZVFPGhVAMzg4SKVS0S2HOnABLbpaXl7WyshSqaQDeFTV1Gw2WV9fp91u\nk8/n9XxhZWWFU6dOceLECarVKisrKxqw0u126fV6uK5HrLYU2X7iwEPYmUQJmMYa3YpZGcUsVpJk\ndHfjhvM9RDqH2T8gKdOGvOG6ttSc+L7P1q1bdSBNpVLRN7qavyiTWH9/P6dPn9bCtdHRUbLZLOvr\n61qi325LcG06ndaqz7FErZpOOWBZsvxPZimx10XkiohMAWEYspWwHFklaNVjMmg0ncR5qVLeXYmH\ny5U2pNfq52JJjY7n+7TbbV0ZhStzeC0Prxdqn4RhGcmTH0iETn5PzhcURNYpOJhpqW2wMtJLYWct\n7IxFupylMNZPadsIIwd3MfX6G1/SPfqybSsU3UglLhmGQbFYZHV1VYNLstmsllf7QYR9mY1WmJZk\nR9opyRmIQsJeW+YKul0Z5gqIhI6zuLio07UOHjyomQBKDKTWWktLS/T39+uvRzEbQB5olUqFS5cu\nsbK8zM4d24kCn/379xPHscw6QDIvjxw5wtTUFEYhxVhfitgLmWs0yA/0Yyyf4bbrruKf7v8qlmXx\nvve9j89+9rNalKTaGfUz6PV6eiYzPDzMmTNndGzf2NiYNmIpopYqvfv7+/UBoG6c7du3MzMzo/0W\nijep/s5rrrmGs2fP0uv1uHDhAp7n0e122bx5s3afqtAhlXXh+z75tIPRN4zwe5It6baJQx9rZBNh\nbVm+X9k+onYdI5snTueIfU8GIadkFqfoG9JzgVwup52zSiSXzWavOOiFEGQyGTZv3syxY8fI5/M4\njqODglUb1W636e/v11WXEILh4WHdMlq2g+GkMLJFTdqOK5MYcSzR+rnL1JGhn8Bt+qTU2s4k9mxL\nBth4XWmsUhg9Yml1D31ZNRh2Qm1Cw3Usy8I9fYTQDTANAZax4bpMqgNFgDJtI5GtJ8PGhDgtnZux\nrhRSxSyFqWGKV+2HHdczH+X41lNPv6R79GW1bCsBj6LyqJJ+dnaWXbt2EYah1smX+4vEfo/Ybes1\npkiMMMK0iAIPI+1AGGFkC1ps4gfy4FFT+Z/7uZ9jV9lmYcHmd3/3d/nQhz5Eq9XiFa94BZcuXeLI\nkSNs27YNz/NYWlpiz549XLx4UZvCFN59ZnaWPdOjmMih4fHjx9m8eTOPP/44YRjKVSXw/aee4/ar\nd/KDo+e47rrr5LC026acT/Gbv/5rmKGHmcpyaP9+vvKVr+iKYX19XYuelHgrm83S19fHwsIC3W5X\n05TVjEGlhSmyUBiGuh1Qn1fxJfr7+/X8oNVqcfHiRaampjRfUuWGNhoNvalRa82BgQEqlYre+JRK\nJcJSSWZU5vKYcXKIdxuQ6cO0HMLVORktYFoY+bIE1cZA4CKKI3Lyb6dZu3SB1dVVhBCcO3fuCpqT\nqhzW19d1rKBhGCwuLlIoFGg0Gto3EoahNu4pRoWT5GUo0Z0ifJXzaaKFtkS75YoEVpZWR8J8c7kK\nxBFmAoCNe015MLjthOhkadZIrLIrDNVKIK/VoCf/mM4RITCTg029R6VcmrULl5JAGnmDm440TKmD\n3kwnXEg7OVDScv1pZ23pLLBNMuUc6XKB3MQQub1XE2+/nm88+QLf+j8/zczMzE8Oz0FlEs7OzmrO\nn7oglSe/XC7TbDZpNpty9ZnKSWxXMleQE2YVrCtzAqJQilSMXAFhp+l2utRqNcIw5I9//3do/tVH\nOfz2X8RxHAorpzRX8vz58+zYsYMLFy5ocRZICbGCkqbTaWnDtm1ZTQTXgBC87c43sHXrVnq9HocP\nH2ZpaYk77ridcH2Ze154gaGhISqVijSadRqQzsDwNtxWi8yzX8eY3sO/e92NXLhwgcXFRT0AVSAc\nkOXwxMQEgAanrq+vX7G3V/zKTCajtz3qhlI3isLHra6u6tmF0j2USiVGR0fZs2cPR48exfd9Dhw4\nwM6dO+Us5bKtknoqq0FyoVCQX3PoYyqFYBwTry8jbAth2YTNdYRpETariHadOPAwx3cQp3IyOi6O\ndG6GIncp0E6pVGJpaUkrWgcGBrSXZGFhgU2bNrG2tkaxWNS6BhVko16qclA3ZaFQkIeJaRH5riSa\nVzaxWq1ppoXig8p5Rg7LzhAKkzhdxBKxPgDjMEDEgbwmbSdZYfpJVZQEQMdyRen5gX6PhRCwOktn\ncU37JOysnBEoKKyZNpOMJoFlWxiOIWcOyIohN5gnVcpTmB6heOMd+Ntu5EsPfo1H/8dfsLi4qJWj\nl/8sfpzXy3Y4lMtlarUa2WxWK/eUfFqtzVSf29/fz9jYmPRW2BJBL2wn0cB7sr+LIsgWMDOxNLzY\nKYgCfF8ePB/90P/O4Z/7Few/+TAPfutRXnHVfgZHi+RyOdbX15mZmeHaa69lcnKSRqOhL/4TJ06Q\nSqX0mkxH1AP12MHzAga8Jebn57Xq87HHHqNYLGoQbblUYsLqct+jj3LrK69lwHMRxHzx3vvo9Xq8\nKh9xIDjBf/nwB/m7z93HF++9F5Bl5/DwMI1Gg3q9zvz8PFNTU3qLMTk5qTc96smqCFqNRoNyuay5\nCb1ej3q9ztjYmN4QqUGtArCqNmLz5s0cPHhQVmzlsq5Q+vr6EvaArNZYX5DS4mQF6PgNEFnibl2S\nogIvwaOlEJk8pmkTt9Yl+DcKiXsdouM/JFhZwF2rEbS7TE9M8Ocf/iDPnr7At77zqNZddDob8yOF\nuVtfX6fZbGqth1LUzs/Pa8rX3Nwcu3bt0sRwpfkIw5BLly4RRRFZPKyBMQmaTRepXjxNpVJheXmZ\nYrHI2tqazvYwDINsNqvt8qT6JLPDsKRGw0pWi74rtxpRIH8FiEOiyNRqXUgUvAtn6K62JOEpY5Hq\nT2FnpGNTmCIxFEbYCePCtAyEIw+G7GCB4tZxClunSF//Ok62LP7pT/9MxwSqymlsbIzp6Wm+/vWv\n/9j36I81kBRCmEKIw0KIB5M/l4UQ3xJCnBJCfFMI0X/Zx/6eEOK0EOKEEOJ1/3+fM5VKMTo6quXG\nyoGpkG4K5qr29KYaCCkbbULgESQmmWQLQBTJdsOQQ7JsNsu1WZ8XfuFXCP/zB1lsyEGeF4Q8N1e7\nQjikErbV0yufz+O6LsVikU2bNumLr6+vj02bNpHNZnEch3WjwJtfd7vuH2dnZ3nooYeIoojbb7+d\nyXTAmlORVch6i2BgC6zO8LM/8zNs3ryZv/nkp5gzyrTv/xve96ZX8653vQvHcejr69MTdTUX6Ha7\neutQqVT0xkf14r7v6xsauGKXrqzLKiQ4lUolg0VXawqKRZkOfXnKeaVS0dF5nU4HP8kCifqGIZUj\nNhwiYcg1n2EgjGTnn+2Xa7ykRzcKFcypPZjj27FGprHHt0hVpZOCKKKzUmPliWeY/+hvs/nhu/lP\n123hg7/6LiYnJ/VqUlGjFxcXZSZI0jq1Wi0sy9KzB3XNpFIpVlZWtKhObcAGBwd1fknKAGtsC8JJ\na0CO53la36KEegr9rzB7yo6/Wl2XAjKRwc0N4aeKRIVBCcVN5UGYsuI1ZVYnbMCOLMsirC7hNqSb\n03SkT8LKWJhOQujqhWBII5ZpmRiWiWGbpPrSWNkU2bFBnN3X08iN8b3vfY+TJ09egV7csmUL+/bt\nY+/evT/2wfBjHw7AvweOoxspPgx8K47jHcAjyZ8RQuwBfh7YA7we+BshxL/6d+zYsYN0Oq1l0kor\nH4ahRpp1u12iKNpQ7ZkpqXtPZa7g8hnpnFxxem7SBya0ntYamRPfp/7NrzLz3vfy6FPPUa1Weeyx\nx3j7q/fz9a9/XSciqcGdaZoMDw/TarX0mtOyLN74xjeyfft2XfL+6Ec/4szZc9i2Td0NiUyHt771\nrSwvL5NOp/mpn/op0uk0B3ZvJ6pe4rOf/Szj4+PMz89zbGaBsDLNsePH2b17N3v37uX5xSaF1/08\nYXmS//WmXdx66606X0P1+QqHpspRBWmpVCpawOW6Lo1Gg+HhYS0muzzlqlqtksvlmJqa0kYktQFQ\nkm8lsFKrXEVZUhWdmr8IIYhiCRwxokROnIjVRK5fXi6FMqI0Jk1NuX7ZPmTykMoTdVpErQYEsh2M\ng4jQ9TEdG7fRYubue6n/6R/znrzLX/z+B7npppvo6+ujVCppzFsmk2FoaEgLwgYGBiRpKwnW1X6Q\nRDylJPmGYciBsWEgakuIbB+iJJF5lYrMCRkYGKC/v19rQZRoTHEg1EaoXq9rLcja2hrtnst6o0m9\n2WK92abrh/hhhJ+YANX7p1aufr2BsEziKMbJ2dhpGyPRNAhDUp7M5L/7XR+nzyY30kdhapjC5BD2\nwDBeZTPfeuQ7fPvb39Zw3cnJSbZt26ZTvBTy8Md9/U/bCiHEBPBG4E+B/5j86zcDtya//0fg0eSA\neAvw+TiOfeCCEOIMcBD40f/3827evFmX4sp/r/ryyclJut0uZ86cAdAo+Fwuh20mVJzQR9h2Ip2G\nODAQqUyitoOo16b+hf+bVsPg/C0/w7FvfpPx8XHOnj3Lb/3WbxGvztFoNPRN1m63dfVw//33s337\ndi5duqRLyYGBAXbv3q3tvmtra3z84x/nIx/5CGOjo3z9oYd4w+tfzx/90R8l2DKbVOxjnDvEj+oy\nE/PMmTPcfPPNzM7OMjs7yysP7OGvP/OP3PiqG9i2dSsiqFHrhRw/t8p/euttrK+vc/ToUYIgYH5+\nXq85VUKY0mM0m029iVGEJJX6rTBtKttCrfa63a7+3lRUXLVapVarUS6X9Y2n6Erq56R+1aQoITAt\nE4STgFAsOe33ezLPIl2Q6dupHPTackbk9STMxeslk/dEJiyEJIt7PsI0SRdTBL2A6uHnCX/0LD+1\nc5x3/McP8ndfepgfPvEECwsLGs+nqjbbtmk2mzQaDbZv3069XieTyehhdzqd1k7UV7ziFTz//PPk\nHNmiKqekNOBJJWilv4+eH5LP56/AC1SrVf15FXpAMUnU4ao2RMo2rpSzSoOi1phRGGFaBk7OJtXn\nyEi7BPWmMPN6c28I/HZAfiRDfmKA7P6DuHtfwwMPPMDf/d3fEQSBRhVmMhmGh4e1Xf2lvn6cyuHj\nwG8Dl+d3D8dxvJT8fgkYTn4/Bsxd9nFzwPi/9klvueUWbr/9dq677jpuvPFGduzYoVdkYRhqa+7i\n4iKnTp1iYWFBrulMR6YEOelE596Tach2Sl5YvS7Noy+w/r1vkr/uZorv+7BWx6VSKe584xu4dc8m\nPvvkeQ0fVf/ta1/7Gt1ul1tvvZXrrruOs2fPsrKywtraGvPz82zdupWJiQlM0+SVr3wlTz/9NH/z\nN3+D5TW5+eab+fYjj/DRj36UJ598kiNHjmKHLiupAQ6/cBTLstizZw/PPPMMe/fulfbjWotbb72V\nbdt3kFs6ReP0SWq1Go/86FnWuj6/9LNv0ZoGlU6lpMCqd1aT+MuzMNXmR2kjlPxYMR9M09RPQzWU\nVNPzlZUVfeGqKklVcKq0V7MK3/cRcaCTr1UUHKbMtySdl+u/VE6u9VTCtCEg6CX6FPnkjHwfI+Ng\nJCQvqf6Uqr7Ij3EKKVaPz3Hit/4DP1s9wd/+wQe58cYbNYei2WzqClNVNWoTpr5utbpcW1sjm83y\n2GOPJTeucu8KLNMgZRmYyWzF8Dp6oKtMbv39/QwMDGhuhapy1SG6vr7O4uIi8/Pzuv1ZXV3l4sWL\ndDod6vU6CwsLLC8vs7KyQnp4iHR/CitjYdgmUQJ3iZOgXMMx9OpScRnSg/1kdl7FpaH9fOQjH+EL\nX/gCxWKRbdu28YpXvIJCoUC5XNbvr5rNvJTXv1k5CCHuBJbjOD4shLjtX/uYOI5jIcS/Jdr+V//b\nJz/5Sa35n5qaYteuXYCEwAwNDdFqtVhfX9dTezV4wzKToaSi/5rErbqGdobtNoZlUrjhZsyxLVpF\nODg4yFvf8mb8R7/K544e5utf/4aeaCffh2453vve92KaJo1Gg1wup9sM9fTftWuXvgC///3v8087\ndvCut/80t912G0NDQzSbTR577DH2793Dd599kVKpxCtf+UoWFxfZs2cPTz75JLfffjtra2uUy2XC\nMGS1MM6EY3L48GGy2Sw/vLDKa67by5133smS+DqnAAAgAElEQVSRI0e0Z0AxCGq1GiBveED3smpL\noWYMqnxVlYJSoCos3+TkJKurq+r9Zm1tTYfjqATyy3MeAL3JEUIQqX46iuWOPtpwaBIm7AfDgkBK\n3uNOXa792nXiQFK9wp5HFISyAslnMFO2pCIFIbEppBu65WFn5eW6dPgc/uO/x6++4dW85vd+mz/9\ny4/ra0W1Tps3b9aiMVUpqaeqHiaSgHQtGXqLaZIiQPRkarZBTGza2KELTgaRHAYKKgPQarVIpVIa\nShTHsa4WFOBWEav6+vr00DiOY44fP8709DS7SvLZatqGFj6FfojfCZK1poFhmxi2QW6gQHa0TPGa\na/H23Mp//7/+Hw4fPszExATXXnut/DzJVkqBf771rW9p6/xLef3P2oobgTcLId4IpIE+IcRdwJIQ\nYiSO40UhxCiwnHz8JWDysv9/Ivl3/+L1kY98RBOLG40GJ0+e1E8513UplUpUq1UNPFEDS8xYavET\nUKcwDe0OFE4auzJAqlCSF2kqr38ot9xyCxdmZhl49jG+MeNpXLoC3So3Zblc5rnnnmPv3r0afKvs\ny4MDMtzm6quv5uGHH2b//v2cPXuWY8eO8c2ENv0LP/tWjp8+z/ve9z6yZszZs2d1qfrKV76SVqvF\n9PQ0j//gB9y2e5zVXJmhwQHmFxY5Gwzyjhty/OIDDxBFEbt27eL9r30Fv/KjH+k11Pz8vHZLqvmA\n2iKMjo5Sq9W0qSoIAvbu3cvhw4evSDPP5/N0OvKJqGCsajCpRERhGOoNjZKgq8g5QJu94jgmk0oR\nEYMrDVSySjCRhWkMkS/XhE4SctNtyMqgJQ8KM5PCdH1iZStOO/idHqlSAeIYd72F6Zj4bQ8rbelS\n++LXHyf35GG+9OlP8P4//D84cuQI1WqV8+fPa06oCttVmZlqSxPHMe12W64y/Z5URJYnMNw2sdtB\nRD5YGflrUvWYiSXbdBJjXBzqwSKgq7nLVaxKbq6EV8VikWazqQ/oer1OnDfx2tJPYToRYRzjrrtS\nGp2x5LbCD0n3Zxi6YR/ZfdexNno1n/nkf+fZZ59ldHSUAwcOaBGYMp7Zts2rXvUqbr75Zs21+Pzn\nP/9jHw7/ZlsRx/Hvx3E8GcfxZuCdwHfiOP4l4AHgV5IP+xXgy8nvHwDeKYRwhBCbge3AU//a5zYN\ngdGtk3FsBgcG2LNnD1dffTWbNm1iamqK8fFxPUFXfW+ceOGFZSeedksSnxwJm43aDUQqLQk86RzE\nIa7rcnDXNGNP3isxab/2O9RqNWq1GoVCQd9oii/5wQ9+kHf+/M8zMDDAG9/4Rvbu3csv//Ivc/2B\nvdz/pS8ThiFHjhzRac1jY2P8+q//OgsLC3znO9/hnvsf0OvQj/zZX+G6LpOTkxw5coT5+XnK5TKF\nQoHJqSmElaKYsWl3umRSNqdPn+HpJY9P/Nkf8+ijj3L//ffTHtrFu975Djqdjp6BqNJWZVsahkFf\nX582k6nNgtIE7N27V9vW1X5fmbbyecmfUMpM1UMrDYPyaqi/x7ZtbWRT2gcRh5h+N1EBXp4O5SQM\nAxCmIduIwJcUr24iIhISXmtYJmHPQzgSXCtMQ/5jCAxHGYkk1ci0DayshWEbdNc6HHrn/8bH3/5q\n7rzzTgqFgtaLKD2DmgWoQ00xNBU34/Jov7i+JL0SUQR+V/7qZGWVqlazvouII+JYkM/lyGYl3FgN\n2JUwbHh4mP7+fnK5nB4YX47Ij+OYyclJ3IU5TYh2Gx5BN0hSsqPEjh1gmAbpcp78q/4XDoeD/Oc/\n/EMeeeQRSqUSr3/965mamiKfz+shZ7FYpFj8f6l78yDLrvrO83PO3d7+Xi4v96ysrF21qFBJQrIl\nAUKAkeixwGaxjRtjNHS0gTCDw25s2m7bPTPYjTGDF2yzDIZxWxgZaNltJIHEJiQkIVQCSrUvWVVZ\nlfvy8u3LvffMH+eek1Xd7WhplqjoG6FAlEqprHz3nvtbvt/Pt2gPDMdxmJ+ff9EHw3/3cPhvXKZF\n+EPgtUKIU8Crk/+PUuoY8AB6s/Ew8B71z/CwVULKYeU8Tm2JwT49HR4eHrY3YLFYtNmPZi2lcVpV\nLYJq13Vp2tNsB1wP1Wraqbnw02R9l+X/+Ke4/cMEQcDMcpXBwUH7IGQyGaSUlEolVlZW+OhHP8q3\nv/MdGrUq73vve/j0pz/NrYeu52+++GVSqRSXL1/m5MmTRFHEzp07+dM//VNmZ2f59re/zdDQEK++\n4yf5/ve/z0c+8hGCILDp3nfccQfPPPMM9XpdcwXGxlCBzqFIu5K+TMBTTz3Fhz70IYq5HL/5v7yX\nJ598kjPnL/Lqvs29eLvdvorvYNaQxt1nbN1hGNo8DSMearVaFvnm+z5DQ0P2sDBVRaPRsKG7TpI1\nqrFvgZ1hmNVpJq0Phk3gKgkIWFqvkaafhtp/0W1qo5IQ4LqIIIUs9CODgKCQxc0EeNlUglWXuGkf\nJxPgpgPctI+fC5COPjik2MyNVJHihf/wOf71RIZbbrnFzqqWl5dt4M7q6iq1Wo10On3VSrS/v18f\nYiQFqBCJE1PPUVS3qQ+9TmPz0Ij0P5MqRCYp7gbZZ7gTRjQ3NjZmN3E6hxNrsy+VSuzcMkZj5jyt\n9VaSTKXoNXuJv0ILn1LFFH4+oG//LpqDO3jggQe4dOkSk5OT3HPPPUxMTNhIASNQM7M0k3Wi1Z4v\nzXj1okVQSqnvAN9J/n4NeM0/8/s+DHz4v/8VhR1kqdYGRF1KhRGk1Bgvk+BkSTbJCkg5WuOgkjRi\n1W1DkESmhz2tUJMSpSJwA7ovfJ/D/8dDDH/hr1hbXubEiROMjIwghOZEmgegVqsxMjLCzp07eeSR\nRzhy5AivfvWrGRwcpF6vU61WrThq3759doB68uRJPv/5z3P27FnuvvtuCjLkr/7qr9i2bZvlBhw/\nfpwDBw6we/duzXYYHGRqagq/MEAchTinniQcmuYXf+Zf8PDDD/MfH/wqPxOscMstt9BsNlkKPW65\n5RZ++MMfbgJXzM8jGbKZ1ZrJjzR/pnK5TKlU4vnnn7e/DpqNYOIBh4eH2bdvH4899phd1xl7u9mV\np1Ipy1806z7HtBDSRaULiLBtSU4qXdIHRxRpnH2vCr2W1qREkXZiuj50WjjZPEo2SA+WtHEuk8Lx\nPXr1lq4ehMBNBTiBR9yLiLo6Rs5NuYSdCNETxL2Y43/xZd5+3920X/lK5ubmCMOQ4eFhe5gZVL+R\nWmcyGaYnxzbBLIYfaSjnoqvvqyjUNOx0XisiXT8ROfkIIRHdFr7r0+r0rHjOOHkNWMakePVC/VLM\nZDKMjIzQFze5cHlRZ0/EOpzCsCKFAMdz8PMe+ckhsgdu5AcnTnHkyBFSqRQ33ngjg4OD1kxoXMdD\nQ0N2JiKltKtNM596sdc1c2XWGk1rbSWOdCZAp04+n2fr1q1s2bKF4eFha64xaznhBsnGwtfZFHGk\nFXe9DgiJSOcSgrBE1ZZpnz9DdjjL2Jat3HnDXubm5njyySc5deoU2WyWbdu2sWvXLsteAK3eNMKn\ncrlsseimTHv00Uf54z/+Yz7wgQ/wpS99iXq9npRxBUI/y/T0NCsrKziOw3XXXcfw8DCPPfaYFfOc\nPXuW1dVV3PYGQkjkjptYjXx27zvAu9/9bo4cO0Hu5a/kt95wG7t37+appTZvumGXNaIVCgVKpZK1\ndJdKJTzPY2RkxM4f8vk8IyMjGqibUKpd17W+imKxaGcMpVKJAwcOUC6X7cFsSNXmbdhsNlleXkYp\nxfDgQDKMTByHKtbBulGk15RBVkNNYgWtms6fiHXLodoN4kYVVEzcaWomR3EAkc7gpANAkBoogpQ4\n6QDpusjAQ/o6MEZIiZd1kY4g7GosmkoOijiMOfKJf+I9k9rt++Mf/5gzZ84wNzfH0tISS0tLzMzM\n2DVjrVajXMghMgXwM5o2JnSrQ9jZZIi4nmYzCKEhQ15KVw9hV7ceAoTQq0rTrplNxuZqdBM2ZH6u\nY2Nj9M7+kHalQdgKdRUUxyD1cFLFOiA33V+gf/8unO2HOHr0KAMDA+zevZsdO3bY1s7cs8Z9a4Rz\nRsdinLkv5bpmh8Pi4iLdGERpBJEp6ZO7uoiYP0nWlzayzJzCBiuuei1wHD1Aki4qjok7Lei0UZ0m\ncbuhS9xY6/uLN9/C5Ct28p3vfIf1hUXLUDTDxvn5eWZnZ20Zvba2RiaTYXBwkG9+85s8/vjjHD9+\nHM/zuPvuu6/q3zqdDnNzc9x+++2EYcjnPvd5HvnWd/mFX/gFms0mZ8+e5cyZM4RhSDqd5rnnnmN6\nepp0Oq37Py+FFArl51DSZWOjyr++75d4y1vewkJuK93xHVy8eJGvfe1r9K+cs2KbWq3G6uqqHXz5\nvs/g4CDr6+ssLi6ytrbG3NyclV0bQKsxVBlLdCaTob+/34qdCoWCpU8bPYNpJTY2NuxNFyNwpUAq\nbRTSm6NkMxElYJSopw1JjqtbiTgGJMJPaUJ4HCNzJd2ChD1AILMF/FIOXI/MUAkvExD05fDSCUQl\nim2atHQdvJRGrgMJI1FXmT/4wwf5Nz91iw38Mej9YrHI0tISq6urlh9Z7ishMzlEvpy0DclsIVVI\nZlyJRyJZ0SKk1m3o/6hunaSLEgJHCoIrhFaw2UKYysFNuAy+7zMyNEj9yPN0qi2NnY81CjHqasCs\ncCRu4JIaLOJv389Kz6FWqzExMcGhQ4esCvbKUKLR0VEKhYL9/MyvZ7NZ6xp+sdc1OxxOnz6tDVGu\nPl3j9UXi1Tni9TloN+zbzuyoza7epg4BUbORbCz0ECtq1vU/E9LSp+NOh/5ffh8333wz//D0Yfvm\nMGpCw45YX1+nXC7bN41xMJqDY3JyklKpxOrqKjt37rR77larxe23325NWcePH0dKybvf/W4uXLhw\n1S58Y0NTr0dHR/Vqst2g04totlqM5DxSmQxqY4lLly5x4cIF/uxzX2DL43+PUooj3zjNTQcPMD8/\nb2E1rVaLZrNpoarmoDBtgWEhOI5je+7V1dWrdv/pdNqG2hpVpUHMmcGjmZPk8znNjQj1oaDQZbiS\nziYExRiNlNJvVaX0r4GeM/gBIpXVhHA/0JVgKoNIIKsiyCA8T682U3pl7QQuwpU4Sdyhlw1sByAc\naQNfrA8hUpz993/BB3755xkaGrJr4KWlJRYWFmg0GhZMO9SfkJxQes3qpXSVoKLEzNfVq9deZzNx\nWzqbYNwo1BVTAiGK4hgnCVwy8BkTT+i6LvRa+MlQOSViahfn6VS7xGECb4kUMpm5eBkXJ5Bkx8uI\nXS/n2LFj9Ho9du7cyfCwXn8amb/neXYIaV4axpRnzHEmB/XFXtfscDh27BiLi4u0O11AEXdaqG6H\nuFlH1VbIZDLWz2AYkp7nJaxIfZJLqXmRRCEqjoi7IcL19AcpJRATdkIaR87ZN2C5XLYlnvnaJk9y\nYGDAmmxMbL0ZBO7YsYNsNsvRo0fZsmULU1NTVmffarV43eteR6vVYmZmhlOnNFvy/e9/P8vLy0xM\nTHDw4EFWV1d56KGHrP16rqorj8XFRa0BWJqh/b1/5Gf+pzfw3e9+l0cffZThn/ufee9734sckLzx\nX/y0lUdLKVlZWbHqUsDOZgy7wMjC5+fnmZyctPF05mFJp9MMDg7agaZ5kAxc1qSem/RqDCJO6r5c\nOPpmF516EvZyReS8IR+RWOuV0lCUIKejBTxfb53SGUAg0jmdCpVUHdJzka5Dr95GOA7S93QL5rm4\nKR8/5yM9x2ZBCjdhGiS5DvW5Gvm/v5/bbrvNrhqNJ2JtbY0o0qpHUVvSFmw3lYTeRrqVEA6qUdEt\nhIHAhN0kKk8mGRUiEX5JRBwihcBTIUpIuz41ikrXdZEq1rAXAanAR106Rq/eoVvr2pT1OIx15mXi\n4EwPFkntvJ7L603Onz/P2NiYFTeZdta0KaVSib6+PttGmBeJ4zhW9fpSrmt2ODz77LMcPXpUC3Di\nCOKYuLGBatUhbONIQT6ftwMVk7dgb75u27oBVfJrbj5H3O1okVQy3EnteRmFPVMEnstbf/ZNXLhw\nwVrDu90ug4ODVKtV7r33Xl544QXa7TaXL1+2kJH+/n76+vqsxl4IwY9//GMAqyS8//77OXToELt3\n72ZjY4OBgQErXHrta1/LpUuXKBaLHDx4ECEE3/jGNywXstFoMDU1xdmlKiJb1BV6bdla1d/5bz/M\n/r3XkR7tZ3T1+H8FOpFS2rbLukUTJWQ6nWbHjh2MjIxQqVRsnmQul2Nubs4a3szNaxD1pgw3Wabm\nLWgwao6T+CyU0tF4SRoZiRzaTPM1mCfUABSTOdlLmI1J6yeESGTwDiKVRub7NE9S6tYjKOU0iQmQ\nvnuFfFshXY2bk67ES+v1tp/1iCNFtxdx/rET/PLLd9FqtahUKrzyla+0TE7Tg6tWXWPlzSo26iVE\nKHR2RZKWrV84rs7UEFInfiXmP6IkjTvSMXfmMo5Y0PySThjpbM3VWdyNedpHvkev0dbDxyT4Vkit\nIPXzvgbLZlO4U/vs/ZTL5SxH1Ii5zIrZKCEXFhaoVCpWMm22fle2Oy/mumaHw9zcHN/61rdYXV1F\n+Vm9++71dPXQ2ID6qtWsr6+v2yGZCLJaOu1oX4VSsdY0SJNjgQbOdprQaxHFivXiGH3rM/zd33+Z\nTCZjjTsmKGXXrl0sLCxw7NgxuyExjINWq2WluCZJypCRzN76zJkzfPKTn+Rd73oXu3fvtklSR48e\nJQgChoeHkVKyf/9+3v72t+O6Luvr69Yy7LSrZHxXOxeDFIfPLbBjxw4KhYJ+M2zMMzI2wvp3v2Wl\nvGZgWCwWGRkZscxJs10wh0+1qlPAjUHIbDXa7TZbt24ljmNbiZi1pRDCpmxVq1U9CBaCZrurmQRC\n4ElBpNCzBtfT7Z6bwFmNejXsJg+Vo9/A0tFKQy+wD5HqdbX0PaUPARWF+mCIIqKOriCEK3FSAU7K\nTyzLDlIK25u7gQ6dFYkMWjqCdFZb+7//nt/hXe96F2EY8sUvfpEgCJibm2N9fV0PvIMMcV0zNVWn\nmRxosR4MqighSSeOX5EoQIXQa1npEgc5LQePeighiRO/iXljX+nCDEREfPk4nee+xsaDn2bhuz+g\nW2trnYfnEHUiu5oVQFAMKF63k2q6TKvVolwu22rWDKLNwNMwJ4yB0KDxrtz4GfDPi72uaZCueTup\nblP/8FWsH+xmHZHIUA230Ny4Colq1TW1R8Wodou400YgiFstZJDSfouwpynIwNraGmfpY9u2bRYs\nc2U/tn37dk6cOGHXXK7rWrm2WRcODg4iVWzNSboH18DZyclJLly4wNe//nXuuecehoeH2b59O6dP\nn+bb3/42W7du5fDhw7aFOXjwIJVKhWq1yuzsLHSbDLfncP0Uwd6XEwQBn/nMZ3jTm95Eq9Xi/JFj\nZDsVctNb7Fq13W6zbds2FhYWLF/RfK/m52Zi6ExepZSSAwcOEAQBxWLRHiZRFFnTmRHvmD7WrOaM\n16Lb62mkoQIpxWYfbv0TSdCLkcTEkV73+elE1ar0ARGkkekcTqmc2LyTTMpkW6CAYKCPOIz0liOO\ncAIPmRiVzJd3XEm3ngQrJ7g0N+XY31Obq/P6dMPec41Gg3q9jlKKiYkJZN+IHmIncBrMoeB4SVJV\nhEqqCT1rkBYlh3SQUYhyA/1nFgIlJCrJyDSeFIC8J4hOfo/2C8+w9twPWTs2Q2OxaucNejPhEHcj\nnEADYwsTg2SufzkXZi9Zsrip5AxXQkppQ3HMnOFKwZrRP1zJSXmx1zU7HDKZDJ1Oh/X1dVSQ1VxB\nCyHtQrNiJ/KgSyORrJiQDqrXpVet6bDRbpu4lUyQDYo7yVJwwg7Dw0MMlss2CMXEoxUKBbZs2cLl\ny5ftSW+kx2ainMvlmJqaYqIvTSNRU164cAHf921FYKLzVldX+cxnPsPnPvc5K3Petm0bp06dYmpq\nikajwblz51hZWbHS5VKppMvm4hBsLBBWltk1USYMQy5dusTi4iKRhO7aCulX/xwAhUKBdDpNqVRi\ndHSUKIrYsmWL5UEWCgXrJzDrSWP1Pn78ONlslu3bt1sRlKFClUoly3swSDyAwHPtYNVxHD2gj7qI\nKEx+zrGuGtykpDYDSRUjMkVUHKMiHfgCCjqtRP/gEHfbNvtUZgp2ruFkc4CgV2uiYoWXTSMd7TFA\n6HEoShF29TxKhUk8fXJIuCk3MYfFLP3d17n55pstSNcki+/duxcVx7hS6IAd10ta3FCrJUNtdhMq\nRrgpPWdobmzCZXsdPWSNeiBcFLpiiBVW8q+UIuM7cP552keeZunpH9KYX6O5VKVT7dCpdYi6ISpW\nhJ0Qku89PZChsGuK9uh1llthNk5mrmSqSDN0bjQarK+vW7WriWd0HId6vW61Dy/2uqZZmel0WmvL\n3RQy15fIovWgS2X7LcKs0WhYkrAI0skKSeFmUsgg0KlXqQxISW9Dqyft4Mj1yP3gH3FdlwceeMB6\nN2q1mnWALiwsWBqVCfc1op+VlRX27dtHIBSrq2tWbm1i9FKpFENDQ4yNjZHJZPRm4cgRa8IZGRnh\nyJEjjI+PU6/X2b17t863WFnh2LFjCU0og8oNMN8LoN3gwnKV97///Rw/fpxut8vS6jLCcfm//unr\njIyM2JzPwcFBQGv6z549a3+25kEHPRfZsmWLzWwYHx+3GxOj8R8eHmZ0dNRO182w0jgRw1hZCI/r\nuojY9NbK2ucjoVPHsNoA3fqpdgOE2uQtOp7Gt3u+TSaz5bzjIIKUjsoTgrjXJTVYQEhB2O7qVZ8Q\nuIGHm9oEoriBa5mLmxFySQy9I1g/s8Sb903awWu327UaFOEFkOtDmlmBnwI3pVfm6IMBIfWswfV1\nhZTOa51GkCWKAccjTtaoJkPEbAbiOMZvrbP29f/Mxcd+wNqpBdrrdV0pOHo7QdIKJWNlhBQUtpQp\nvPwOVuodm/FqKrggCCxnwyggTS7olWpWM3NotVoEQWCduC/2umaHQ71e58yZM3rQKF3wU4hMTm8j\nOi19Wl/xBjc/dNWq6RvN9Yh7ekuhuu3kdHeRiRFLB5g6CCFxiyVLlTYRcIVCgbGxMRYXF6lWq3bd\nZGYEVqjkurz1LW8mzvRRrWrpdV9fH8899xyVSsVWIfl8nsuXL9tS3KDLjKrRyKgLhQIXL160H+jM\nzAzRzA/pyhSlXAanrINgf+bG7fzcz/0cO3bsYP/e68i/4R1Mbpniw7/32zbQ15Ss6XSaxcVFS4oy\nBCvf9zl16pRFpRktQ6FQsEq6sbExW0FIKalUKlftycMwtG8f3/evKL0VsUje4n4GR23u/PWmQrd9\nwvMR0tWfj+MlXAJdVag4+VpegPBTqFYDGSTcAengpNNIz8Mv6FLaGLOMID/qxtZz0a11k4h5TWsO\nOyFuoKvOXjNk4IVjFr1vyu6+tKvXmI6Pqq0k1Q66cnASDqQQuuJRSbK2n07CaQIkIImJYmUBMObn\nZrgf6XSK5lMPsfzDM6wcX6Y+X6e11tZoeSmQSe5l1IuRnoOX8UiVUhS2jcPWgxa2aypoM4g2K0yz\nhTN2feOvMXMic1gYdOBLua7Z4QD6RFteXqbdTfbFidpRxXqqa05L48F3XRe8JEg30mYUAQjXT4aZ\nXe37ySQnZJJt6O24gQcffJDDhw+jlGJ8fJx9+/Zx8uRJWwmY7yefzzM3N2eNMR/84AdJRS26Slpk\nfrvdZmFhgeHhYauN8DyPM2fOWHqUAX6cOXOGTCbDM888wxNPPEFfn559PP7447YnlZkiKQeyvQ1U\nq8Y3vvEN4uEd1Ot1/vf/9fdJnf8BKlPi9uYxhtZ1hWD0CCah3HhRXNe1nEiD/e92u/YArFar3HDD\nDezfv59CoWBNWFe6C43k2BiwjBhKxj1cJ9laRHqWgOMj4kgf8FJsemYiHc5CkNFVgRug4hDhZ3T7\nIYTWNLiu7eHd4S3298a1qt5cOC5Ru6vbRUjCXYynIsbxtT1ZHwyJbSPlkioGtppQSnH52z/ihv17\nbVuRy+VwVeL5aG2gKou6Guq1k6Qq9KEQR8k2JjkYeh2Nfms39GxC6EGuK4U1VAkhbOsilKL6oyNU\nL23QXmsTNkN6jR69elebrDoRUVsPceNQHxi5sX5yh25lrSMsGPZKrodZw5sDwfBBDfovCAIraIui\nyK66jU39xV7X7HAQQtgcgmazCaAxb4n9Gse1slDD/9MDlWRYZDiSaNhs2GxhwkDiTsu4aHR5mtbR\negay2dfXx9LSkhU4GWKPMatUKhWGh4f54Ac/yIEDB/joX/01CwsLfOtb37oqtr5arXLzzTdbQrRS\nivX1dbLZLFu3biWfz7O2tkYul7OCqsXFRcrlMrt27eL1r389W7duRUzs02/cTgNVHOY9/+o+lio1\nbvvJnyB74nGCl72Cv/unr/OfGmV+6/7H2LlzJ5OTk3S7XVZWVqhWqxYC22w2WV9fZ2RkhMnJSavx\nN1bxoaEhSqWSdXVeKZIxfoOhoSE7aTc3n2Zp+Ppn6uqWQiSrvys+VS1BDrubwztbaYSbuQ6On0it\n9Wfm5BMZvdlWOBKZ0QNOFWoqlJdJmf+EbS+CQkCQD3R1WfATGIqj72qh38Z+Vr/925UO73vzvbZt\nKhQKSBNr56b0wRBHiTRaax2E6yeJXq5e2Rr0fLsKXoASkjDW3pY4mTcYfYNZYWZ8h9ZalagTEUU6\n4k56EhVD2Na8Buk7miyd8sgOZSntnMSZ2k+tVrMDYVMNGG6pWVUbJonRp5h20PApAQvf/f/blfn/\n2XVlKaSU0qWl69sAXFC2nzLDsV5vU5GmzFAINOI8nbK5gEJKRCqtrcKdOhuhXkEODQ1RLBaZmZlh\ncXHRTuRNHoPp6Xbu3Mnu3buZmJjg137t15idnSXstLn11luvOqyMAEUpxcrKCoODg3ZqbIhECwsL\n3HjjjczOzhIEAbOzs6ysrPCe97yHg9Lifi0AACAASURBVAcPMjExoVOjmhXWvT5+588/D0IymnPZ\nl26y8cwTVL0Szz77LB/72Mdot9vcdtttFAoFZmZmLBrNyIF9X0NMFxcXba9qZgWFQoHx8XHrs0in\n09Z41uv1rCTczGIAe2Dqn02ocWChRtKZ4TBSIsJWsrkgwbCjDwE9IQQnSEhQyRVktWcBhQpDZJDS\nCddJlL1IpYlbDYTn42ZTehAJif1bQ1adwKPX6uGm3M1qApUAXHT4rEiUhgjoffULFls/MDCg51RR\nFxV2kIWytvp7KUBtbiuE0IPKsJ20TMK6UIWKcYVCJqsTQ083P1Pf94lXLxE2OsSRwkt5BMVAC7gS\nulPYSoJ1EXhpl9xoicz+G6Fv3LbUxitjthPmEHBd1x4KVw7TTRsI2D+vGVC/lOuaHQ7m5ltbW9Pl\njnT1TRak9AfS0WDVqakpWzLHsR4OmdRi4QU4/cPIXAm3fwh/bBp/eAKZK+lgmyCjIR2Ow913300U\nRRw9etSKfjKZjC2fM5mMNSa97W1vI51O85GPfISlpSVGR0c5euIkpVLJaguWl5eZmpriiSeeoFwu\nU6lUrNDEdV1yuZwNqjW5jceOHeNTn/oUn/rUp5idnaWvkGW4PEg3DFHSQfgZ3v72t/P1b3yLi+st\nRLFM8I7fJHP2GT7ytju5/2//lk9/8pMcOXKE/fv302g09MByaclq57du3WrnDWaFubGxYQ+DbDZr\np9bm5ovjmCAImJ+ftzfXwMCAZU5eieO3OgZivesPuwnDwUU5LrF0UY6no+adJPkpGeDplsHX/67r\n68MkVdCtRRwjgwwyk9eyaj+NTGdxCv2gBFG7Z2Gr0ndRsS7DncC0DrqiMJmSQgh6zR5+Vvsvom7E\n5ceP8rrXvY44jrU0X+p1pD6gutpxKROKthlQSkcPVjt6QGnj7xLVZ4RESmFb0yvVqqlUCupr9Jpt\n6wvx874+zNBfSgeViySlKqC4exp35yHWKlX7cjSbCNDMCBMQbAaNRkpv5kIGR2CqQQNVeqmrzGuW\nW2Gsxo7jaLVeObBbCJFkEAaBb1drFqKaz+qdeByhui1ix9GiGVw9Na+t4eRKqE5bl7xeiqKrqG5U\n2LNnD48++qgN7L0SDmr8FkopDh8+zHPPPfdfJUOZJOtGo8H09DRPP/20zZgcGhqi3W7T19dncWSN\nRoPbbruNUqnEyZMncV2XEydOMD09zcmTJ9m3cxpHRIRJ6nLgS+bm5njqqaf43d/9XcbGxrjvvvt4\n9NFn2LVrF29+861UNjb4iz//M6QUzC0s0eu0OHr8BNu2befYsWNcvHiR5eVlOyAzppvJyUkrADMV\nU6fTwXEc0um0jZ4zN5d585nSVPMioNtu4Se2bFLJbKeXvFWF0R8IbddOVoK0G0mGg44xtGlRQmpl\nYlLSx616YpHWK0+RyugVtRRaABVFuKmAXqOF47tJj65bh069i5/z6dY2S3rHlYTtCBAEeZ/2epvf\n/rcf4sknn2TLli10w0j/WQzsJcjqw05IiyAkmW9ZmnYUJv6dNHTqOOkCKGGrBlMJGwdktLpA2Aqt\n/8MJHFvlgOY1CCGQriA3UqB4062E+RHC9Yo9lM1nYipbA5cJw5Dl5WWbp2LoX0b7YA4MYJNd8RKu\na1Y5mD+AGbQgJDLfp4lO7QZxdRWR3Nj9/f2WHCwcDxBaWBNkiOtV4maNuLpKXF1D9XrErbq2c6sY\nais0K6ucv3CR2dlZO6Xvdrts2bLFzj6MxLZWq/HMM8/YKX6r1bKmpRMnTtgKwagLoyiyke/GEFWt\nVpmZmbEW70wmw+XLlzl06JCVKWcyGXo4fPWx7+BFLY6cnqG2qpWR9913H9lslnq9zk033cThw4d5\n+OGH+exnP8sb3/Qmfv3ffJC/+dsv8IlPfIJwY4Utfbo6MetZQ3cy7YRxX+bzeVuemp7UvGVN/sPo\n6KidgBt5thDCHty+n8x7zMEgpB7UCYFgcw4UJ7OJ2MvogyE08wmpyUrm1vNTljXp5Pu0a9PzkVcE\n1grHxS9k8QpZnMC3LYV0JI7nEPc2A3CF1HMH6UiclIt09VtZupKoF5N59LOEYcj27du1R6TT0tWD\nlIh0XusdkkqIOFmHS7m5rZDO5pA1ldNzEcfTS43kQb6S1RhtrCbtjSAKY2Ty/cWRotfuaRRc4JAt\nZ8ltGcaZ3EO90bQiPXOPXWmoM7LsWq1mV/21Ws0OIo1pbn5+Htd1qVartj15Sc/o//vH/P/5ZSTK\ntVpNh58opU06cZQE00gbFGskw0ihe0VA9TrIVFoPssKIuNsh7nZRYZj4K2JUKg9xZB2JZs3k+77N\nnDThs6a16O/vZ2RkxIJXgyCwBGrTrx49epQ4ju3DaAarps831uBMJmNFUEeOHOE3fuM32LdvH+l0\nmrn5Ba6//nqWqm2mpqZYWK8zOTbMWLmf++67z7YGUkr27NnDQw89ZA/Ls2fPcurUKb76+DN8/P/8\nG+6//34mJyfZunUr2WyW2dlZ6vU6YRgyPT1t0XLFYtH6M8zNYsAws7OzHDp0iGKxSD6ftyWtUkpb\nVSLNeSRhZ2iNQxfadYh6xEhEHCHi0D6sMkp+bypny3Hhp5OHLKuHgYm3RvV6Wm7tesS9jmZO9nrI\nfAk8X4up4lh36J6bpF9LnEDPFMJ2hJvSIFYrhkq7OnDW0wrIxSeOUSwWreALgTbuhXr2gOMmM5No\n0+SnVLLSjK8wXSnbCuufoWPf9OZt7UiBOzxBZqSPVDEgKOoZjPQdG2dnVJ2p/gzpsRGi7IBt5Yxx\ny2w//suNRaVSsYnwAwMDtg0xLFZT+QVBYKvil3Jds8NhaGjoqt6JTAlncAwRpJOoO3CSMslIfeM4\nWaFJJxlg6pJQKHTfCsiUnlmodkP3hWuXEVGPLVu2kMlkGB8fp1Kp2OGMCYUxg5tSqcSePXtQSlGp\nVOjr62N9fZ3V1VUbFSeEsPBb413YunWrlWZPTEwwNzdHJpNh7969PPLII/zu7/4uQ0NDrKxowtP6\n+jpf/epXrftzcXGREydOMLe4gu8I3v6WNzI8PMypU6dIpVLMzs4ihGB8fJxer8fly5fZ2NigXq/T\n399v1ZlPP/207S3Nemt0dNS6UQ2QxAytTDK34T8Y9WU2m7XtlBQCJ2wTCd2fE2T0gRC2N7cVYQ8p\nEpfilUatONlyGDxcHCYPnK5ECNvaaJXO6aDkxJQlXI+43UQODINhRijwMoGePYSRxtijn1cv41m0\nuyE4qzgm6sb2792US/X8Cr/0S7+kV35uIpkOkkpGSF2ZRj19kMWhHlDGIfS6m6wHFWsvSaQ5FELF\n9hAHzalM+R5SSNxtL2Pghr2Utpfp3zlIppxDOHoGEvUihEC3GsSkJqaIvJR1zRp37JWGKTOAXlhY\n4OTJk/YeNZQvs2o3xiuzqTBbj5dyXbPDoVKp2NNsfX2dXqS0dLqrcyi0wUdTmcxcIDYyXaFXZioJ\nzdWCG4VMZyHs4eRLiHyflVGnCCknOC2T/2hOV1NJZDIZXvOa1/COd7yDmZkZLly4YA1SY2NjNkB3\nbm6Oubk5pqen7aF19uxZXvGKV9Dtdm3IrREYXb58GSEEzz77LD/1Uz/FZz7zGbLZLC/bv5d/dd8v\nMzw4wMbGBsPDw6RSKf7gD/6Af/jaN6l3Yv7wf/v3uK7LxMQEd9xxB71ej1KpZENcHMdhZWXFekEM\nhMYkhDuOw8jICMBVclqjfzDCMiGElXvDZnnc7XaRKkaGbei1cCy/IEzeoo5uEVwf/BQqjrTmAf12\nVca1iUjexvHmijDJGtGGLL0VkJkC0k8nmSQSmSvpwbPrI7NFC5oNCrqlcTKBJlFLbRGXjqBb7+p1\npgA3cJMyXlcXwhHEYcSdxURx2K5BHBJ6We338DO6RYp6OlcjcZOqZgW6jUT+jRWBaZaF1mkYDUHa\n94iiEEcmbVamRP71v8jkz/404684xOjtB3FTPnEvEWqlPLysh5fL4I5sodvTn0u9XrdDxEqlQhzH\nNmpgfX3dVhBXBhubA8oY7EzlYQBFLzXY5podDoVCwVqWV1ZWiBK3m8zkodchbjfxXZfp6WkGBwdJ\np9O6DHTNvlsiHCcx82glnk7dTnbpob6RRSpPvHiOmfPnmZqaYmRkxA43TTk2OTnJW9/6VqSUfPzj\nH+fcuXMW8Z7P5y3JZ2VlhY2NDfL5PFu2bLGzg3q9zvz8PP39/UxMTDA7O8utt97Ka1/7Wh555BE7\n5Ny9ezf79u3jne98J9XVZS6fPUnZ13F/S0tLFv565MgRYqXoD9c4ePAgv/6ed/OWV72cMAxZWlqi\n1dLJ4SYJbG5ujlqtZnULnU7nKu29icJLpVK2rTB9sQmkPX/+PIODg5TL5auk00Zzgkhi5V1fPzjt\nWgJJASWcZJCMVkUSb0qlhSCWuuzH8TATf+EFWu3qaDAwjvnLQfgpfR8IkWRbdCHs4eWLyMDD8V3c\nQFu0vUyAQuH6nh5c+g5hZ5PebJOiACEkcagozOntDqEOu11dr1BzcoTZQaJMP8rPQrqgU907DWyi\nYxRtei/iEDpNrfVINheBKyHu4UZdPbCNI30fZvvwbvlpMne+mdTulxG2e/Z7lJ6w3AaZ67sqTMjI\n283GwUCDarUac3NzV31eZhBqMjLNy8/ocgyK/6Vc12xbYcwhnudRqVRYW1tjNHlryHwfMsgQRzpa\nzFCTdbmsrA5fxZHuO72AuNMkanc1azCpPFCg8oNEjTqlgSmmp6etzNg8AIbn8OCDD171wRQKBZrN\nJsVikcuXL3P99dfbDE/jb8jlckxMTFiT1MGDBzly5IilQ5tp8urqKuVymU6nww033MCuXbv4wIf+\nHYODg+zatYu3ve1t7Jssc8z3WVhYoNfr8cADD/DzP//zpL/9ebb7aT783XMWWmsyGnfu3Gl9Jwb+\nYeYzpkoaHh62oFXzdjNlqpnqLy8vc/ToUe68806azSaFQgHXdXFF0mN327r0jnp6u+CmgKo2IaXz\nutWI46TkBhx0hECieJVekEBck4pDKW2J9oJNE1PYTmIH/OQlgVYNqhjVCYi7HW1KSgf06i2k7xMm\nW4+gkKNTqemVZQeiTgQCpKNTrMJ2pHFyQrsf5x57mr33/Sqq16IqMpw/f55SqUQURXZjUygUcFIl\n3FRe4+Oirm6Jem0t9Y7jTRGYlIheR992jYqemSmlWyk/DTJF5AS4uX6idpNeQ6sjdeulW6LCzino\nn6RTbdkBsRGiGal9EASsr69bjEChULCuS+PUNYfAlZ4Lo/w1YsMXe12zysFkRrTbbdLpNAMDg7rk\nzOT0gDGOkK4erkxPT9uVphJCpxGlc7Y8jXttkBK31JesOU1ynyLsdvF2vIyVBI56/vz5RJ+vaDab\nzM/Pc/nyZarVqjVlmYrCcRz27t1LOp3m7NmzNBoNSqUSe/fuxXF0OtXs7CzZbJb19XWee+45azHf\ntWsXX/nKVxgcHCSOY2699VbGx8e59957OXnyJAcOHGB8fJxnn32W97znPZw4fZY9W8fxfZ8DBw6Q\nSqX45Cc/Se/2X2Bh91189eFHbIydiZhXSrG6usr6+vpVidlGwWnUdObvDb7ehKyY3AtjJx8aGmJi\nYsKi6kHYqkCb2AII8hq+mimgHZYJst2s+YR+ewJ6WOe49gEyB4OeFpIQqBOClPR1X+9r8pLqtIhb\ndT18dN2E3QFOJoP0ddXj+J710kDSYaY9GwRjNA/SExYOo6KY5koD98IJ6J9kdnaWM2fOcOnSJS5e\nvMjp06eZn5/nwoULrK6ustFo0yCgm+rX1UShrCvUVF6naEc9/fPQ6qxkPtFB9VooU2GAnseEXXoL\nl+g1u/Z7lp5DejBPML2HlvDtPWjQAOYgMCbEubk5ms0m5XLZ3qObL07s1iKVStkBu5Fanz9//iU9\no9esclhdXbV03lqtxvLKCuOuR7S+TFxd0+Km0TV78pXLZX3DOoGGiHRaSQvRtnAQ1axpYYynrcSq\n00IK6JYmcT3dm2/dupVnnnnG2pvN3n9hYcHq0I0BaevWrRw5coQdO3Zw6tQparUa4+PjdLtda182\noTv9/f1WANXX18fp06epVCrcfvvtpNNpzp8/T6fTIZVK8aY33ssz33+WSqVCvV5naGiILz38Dfbs\n2WNnFm94wxs4ceIETzz1tM0fuDK2PZvNcuTIEZt6Zeg/ZlW5c+dO+89GR0eti89IfI2fYm1tjRde\neIGBgQE8zyOfz5MOfKJYESGQKmklomQQZ+AtvS54mrWITAZmcagPkOT7FCZ5O9ZvclKOnvQnTAgF\nycPVS6TLSaBtwm8QrgdhqFeFqQxuKktUryC9hgbACD1cDVsdvFyaXrtG3ImJw03eQ7fZ1W5NpSsI\nhKDX6LHyT18m7J/ixz/+MUtLS5asNDQ0xPLyMgMDAywuLtpA4Ww2a9eIxaL2rnjJxkWqWOP4W9Uk\nDKeNCDKQ6SdytczaUTGqUaF6/BSdSps40mlW2XKG3HgZd2o/9QTEYyDAxgRXLpeJ45i5uTkbKG3E\neMYbZFoJs3427ePi4qJFC16+/N8Mn/tnr2tWORiOo+M4nDt3jkajTrxyWadWSYlq1iHsanx3kmoc\nhiExQu/CM/lN7b6T7KRdnbGo4kj/+66LjLp2i9BoNDh48KCNeDM49/n5earVqi3hMpkM09PT+L5v\nZchGAGWyKkwvD3ole+7cOYvSz2azPPDAA4yPj7O8vMz73/9+3vnOd3L27FlyuRxvuGk3tVqNSqXC\nhz70IZrNJq1WiyeeeIJ6vU4ul+PizFkuX77Mnj17+Id/+AcboLu4uEitVrPor06nY/0Tpi9VStl0\n5ZGREcbGxqzeXil1VfDrE088wdmzZ7nxxhutyrIb6nbNId7EtYddCBN1pCFt+alEw5Ag2h1fP/xu\nMuEXQld6xtod9rQdOmzrg4VkJJBUg6BQtTX9Z8kUkkNHaYOToX45rnZrSs2TFFJubi2E3kponkOS\nxq7Q1YVUeg7R1e7Rxe+f4PSpU7YE37ZtmwXPXrx4kZmZGc6dO8fZs2dZWlri1KlTzMzMcPr0aY4e\nPaoH0/MLLK2sEQoXsv06b7OxTrRyGdXcQLWrtLvawBcLSbx6mfVTl+nUu4TdCD/jkR3OU7rpRsTg\npJ1dLS4u2ti+KxWShm86PDysZfdKUa/XbdttPl/zkjItZhRFdjb1Uq5rVjkYXYHZ3bquhxABMsgQ\nrc0jE6JxPj9iteRhqAm/uD4q7Oo3i58iblY1ScoLkL2uHlD6KV22Rj3WNuqMjo5Sr9ctmRegVCpx\n9uxZG4ZqnJhGS/DEE09c5dE3klSz5jSDIBOtt7i4yO7du1la0tGhr371q/nrv/5rfud3foc///M/\n5/Tp0xrjJYt8+H3/ki8/dYz777+f22+/nXK5zI4dO1heXuZl+3bzve8f5pvf+hZPPfWUDdwxA1Fj\nya7X6xQKBWuQMpNrw3kwfw7ApiEZNV0cx1y6dIkHH3yQUqnE1iQrRAiB7zqEcazpZwocmegUWskQ\n0uRUmP2/kUKbFoJYfza9rp4/GLqTn0U0K4hUQT/wsRZUiSAH6BtbFMu6LK8sJXJrT/9vElqEq7Fn\nTqCHnb1aU3MYwwjpaMGTipNQGFfg53yibqQXDQkV2vEl1dkNitmUrpSS+dPU1JRVwtbrdVKpFIuL\ni3bjdCVa0Pd9W81ubGxQLBYplweRnab+eWVKEHZJLTyHzA9AKkd3boawFdKpdHBcSVAMKO0cJ3X9\nK1itNrh48SLz8/MsLy9rbH65TF9fH5VKxQYFl8tlxsbGSKfTtuUwYsIwDDWxLBEYmvu52WzazcVL\nua7Z4QDY9Zs2YTUQhYz+AI2AqbqMlxu1Qa9KaVMNcYT0U4Qba0nl4Gk3H11UGGn4RqsOvQ7dGL7/\n/e9zzz33MDk5aR8M43NfXFy0w0czkDp06BDnz5+n29WBu9ls9iqtugmKCcOQvr4+Wq0Wi4uLTE1N\nsbq6alOIvvCFL1iwzBe/+EWuv/56FhYWdCBNcZB/+bafxfc8RKK4NHbuj370oxw9epShoSGOHj3K\n6OiobWdarRbDw8M2NMfMOIz1OpVK4bqufdCNH8RYt6+ceH/uc59jY2OD1772tTYZy/P0WtiRgigG\nRyTKwGSyrx2XUrcLnbreSoSdTUdjKrdp107AsJESOCTsxVROezIAvQnxdRoWiQozkVXLwgBxbU2v\nMTN5/Xk6WsmoXJ+gr0B7dQPpe/iFDN1KQ6dzK4BQw2chaSlASJ2x2al29QYljDk0UuR7zx62askt\nW7ZYOpl54xr1rJktGUWicRQrpdi1axflcpn9+/drgdXEOPLSUVrPfQsnlyfYeytqY4nKkaM0V5oI\nR+KnXYpTRUqHbiTMl7l06pxdoa+urrJt2za63S7z8/NWU1MulxkfHyefz9PpdOwa2xwGRohnXh7m\nUGi328zOzr5kheQ1OxwGBgYArNMMEhZAHBNWa7j9AXGrTtaX5HI5e0qqOEKE3UQl5xM1q3pfbloL\npZIczSaq26bW2kStr62tUalomKhJ8a7X63ieR71eZ3h4mNtvv50f/ehHtpzrdrusra3Zw2H37t0c\nPXrUGmCiKKJcLgN6+r+xsWGR75VKhdHRUdtmmJN/cHAQ4UTMr1Z4yz13cWG1xtLSshW1vOMd7+Dj\nH/84i4uLVtwyMzNjVY31et2CRcz3YOYRjuMwOjpqzVMmDdvIpA3s5OGHH+bw4cOMj4+zd+/eTVl1\ncnAS9ZBusDlrcBObta+DcenpWHrrQdBpLLpySOWSHAtPo/ocBxWhE6uVCaY1HgWh25F2bdPLkPyl\nU6ZAxSHST2kOS72qw5NTaYRbx01k1N2NpsXDRd2I2LAeYgURqJ5K1NjKxs5d+LM/onD9q+0Mxqxv\nDQXMGNsMJGVpackOCTc2Nrh06ZJtMwcHBzl9+jQ33ngjtxzcR/M//x3N+SVS5T76B8cBRXt5HQDp\nSYJCQG58EGdsO/OrG5w8edJqaBzHsW2jaS8MRLhUKuE4jk3pNrgAww8xvhhzf9TrdS5cuEC327X3\n/ou9rtnM4ZZbbuGOO+5g79697NmzR9+QfloLoeKY3soS4eVzxLGGuxptuELorUYSlosQ0OsigjRx\np0XY7prVNnGnTTPUlKaSq8v/p59+2n4tw04sFovs27ePTCbD448/bonLrVbL9mvZbBbXdS3RyWDr\njClsz549NsD2+PHjXLp0iRtvvJGNjQ2CIKBcLvP444/z2c9+lkuXLhFLl3J3lflaly0jGhiTz+e5\n4YYb7GzDJGWZKbUxShm9vRlGmTdHNpu1EJd0Ok1fX5+tJAwExHVdDh8+zEMPPUQ+n+e2225jbGyM\n4eFhXVEllZlQajMkV7r6Ly+wLYJOpVZ6xqCSSX0Uba40k0tJVx8CieaBKNQxegnNCyfJv/AzegMQ\nx3bLIfwAkFqlKITeTnm+/npK4fguTjpAKfCyOnBXGtVjrKsG6UoNH47iJAhH6wqkK1g8fJEdO3bY\ng+HKB+xKSrmhZ01MTDA1NWWzNlOpFCsrK1y8eJFTp05x+PBhbZD6wUOsHTtHY2ENYoXMFYjrFeoL\nFcKOXqtmBtPkp0aJRnbx3HPP8cILL3D58mWCIOC6666zL6eFhQXa7bZ1/Bqpe6PRsLoFM78z0FnA\nOjE3NjbsvO5/GIbkoUOH2LVrF/v372ffvn1aT14a0ZqFMKKz0dASagmTk5NXIblJPPdxt4UQUg+9\nwh7C1/9uHKONPMUB2u2OXs2lsrYUNNWCCZ296667tNchERMZ12ahUKCvr49ms8ng4CATExPMz8/b\nAed1111nA2ReeOEFq90YHR3l4sWLnD17lpGREe666y6GhobI5XIcOXKED3/4w5yaW6PZt4XxQoDw\nAnbt2sXk5CRf+cpX2LVrFy972ctsVWUAMkbHYHI3jEPPzD727NljRV0DAwN2Z28s2VEUMTMzw/33\n308YhuzYsYNbb72VkZGRq1K6lZAoT4fY0Gnot323rdsHpRLClotNfjJDRyOlNjkVKk72/1IfNNIB\nFSWKy2TbkdCqhRcAGkirPRuaDCY8DxmkQEjiBPwi833IdA7pODi+ZjaoWOnQXcchyKdwAqnPol6E\nQtlcC+lov4VS0Nnocv1Izs6UTN6HWQGbudjg4KC9VwxZvFQqWZFcuVy2w8Th4WEqP3iWxlKN1mqL\n7MQwIluieuTHdKvakxGUAkrbhij+1Fv4+hPPcOTIES5evEgQBAwMDFjFq3kpjY6OWh5JEAQ2aqDd\nbtvWwRwMnudZr4+RUU9MTFAqlf7H0TkYnPrIyAh9fX1Jjp9ApLM6ySitoR+qusLAwIAVTLmuq8Uo\nYQ/pp/S/oxI/fhQRh5FuT6QkbtYsjbnS0DkNa2trFm6ybds2CoUC3/ve965CvGezWc6cOWNvmLW1\nNVqtFn19fVy8eNGuLc1BYgwtBhzT19fH2NgYMzMz3HTTTTz++OM2B8LoO770pS9x8eIsLTdL9Pwj\nHLhuN2fOnOH1r389USKDzeVyVCoVC7pxHIdUKoXv+zQaDTuEklJakrYB6Jjhk2E2KKWYmZnh93//\n91leXmbfvn3cfffdbN261QJr9DwmqcaMRNisKb2EitRLQC+OazF8+vckmgYDKhAJldrMF+IEXuD4\n1rcQG3hKMsxUSmwOIb0gOXRARRHCD5BBWq+nc0W9TUnehHG3h5MoJlUcI1yJihRIgZdy8dIublp/\nb27atdyHOIqpPvj3NkHdAH/M1sr8dWWWh3mpTE9Pc91119m2zVQdnU6HzOggqWKaVCmFTGfoXTxO\nd6OGE7hkh7OM3DDJ2FvfwvMrEY8++igXLlyw60nDuVxaWqJSqVx12Jv8VeOpMapYs2EzyVcmhsBY\nA4xQqlgsvqRn9JrNHAxwxZTcmUwGOlVN43EcoEdc20B1GhSLAzr8Jdk0ZJKbV/V6+ibr9RBKg02l\nm8A7oh5IxzojO52OdVGCzjC4/ZSeZQAAHT5JREFUcOGCpgMnD49FsQcB/f39NhTGfFhra2v2h20o\nT8vLy+zZs4djx44B+mFsNBrs3r2bIAh48skn2b59O319fdRqNXbs2GH5lU8++SRf+MIXeN/73odX\n2+Dg9QdwPZ/f/nf/jpmZGZtR0O126e/vZ2VlhWw2S7VavYojEcexJikLwejoqI2+M/g7gB/+8If8\n0R/9EQsLC+zevZu77rqLvXv3ksvl7M9WKYWTWI+Rji7fpbdZEZiDwFQPRsMQ9iBpAYiSuYLj6YMk\nWVECKOkhVMdqI6RxQXopLUU2n1sc69mGdBKDU2iHlU7/iI5ORCGkJO71SPXlCdtd4jDCy6ToVOq4\naY841MlYwhFEbb3CVKEiKPh0Gz26tS6VH52kf/8dNjrQCIdM/KIxnxl6uBDCDqENos2wI8vlMo1G\ng9T26/B+cJxes83S9w7jF7KEzTaFyQH8vgLle+7lhBzii/d/wZb8qVTKBuOura3hOA7Dw8MMDg5a\nILCR2Zt72sybzPdkKsher2fJT/l8nqWlJUtUfynXNUXTF4tF28/lcjn95m+3tBffTzT3vbZFipuV\nHdLRq8xUWg/FEypy3NYPgvQ9REIRPnnyJP39/VZXcOnSJbvTNnFwqVSKKIp0hoQQ9oM3KK5SqWQJ\nSoVCgYWFBdbX1zl9+jS5XI4bbrjBxuVlMhnL6vvFX/xFWq0Wc3Nz3HzzzdTrdc6dO8f09DSlUokz\nZ87wute9jiAI+NsHvkK3F9LfuITjOFaXYTYmZsNi1rEms8K0PMPDw7iuawNWr8TrPfbYY/ze7/0e\nrVaLV73qVbzxjW9kenqavr5NLT+QRNzprYLG9QEkVYBpMxT6wZea9EyvrR/oKLqCGalQDT18o1PX\nhCWldM6FIUchbPyc/tC0alW4PmRLiZdDJAlZvm5N/GT24OuVN1ISDJXxi1nNnfRcnLSPk/JxPEdT\nojyHOFTaoCUESkAcxqgwRrqS2vll9o2W7MNUqVRsmW4GvCYoxvM8+vr6MLTxkZERdu7cyb59+/iJ\nn/gJrr/+eprNpjYAKkWn1mXt1DzNxTWK06OMvuF1jL7rVzkTTPDsc4dZWlqyK+axsTG7OjVirPHx\ncavzMX4aA7A1aEMpJcPDwxSLRVKpFOvr69TrdTuDmpubs5st82J8sdc1qxyMPdqE1YRhiBNkNMo8\nSOOls1bHAFhcuu/7UAfhBUSLsxr1BeDoN550NUjDvAkNSFUIYYGdtVrNSogBWwkMDw9b44phOJh0\nJCmlnQXMzs7a/s20GDt37uRrX/sa4+PjSCnZsWMHAK95zWs4deoUDz/8MNPT0+RyOb75zW9y4403\nMjc3p4Gv7SXq9Tof+9jHyOfz3HPPPfzJn/wJvV7PMh0MCcj4O6SU1qq7Y8cOPM+zwi1jEjt16hSf\n/vSnrWrzzjvv5NZbb7WzFKPpMFsQ13VRwtE8BqOCDDuQKmxuIrzUFRsFPTcQxnHZbepKQ8XarCQl\n4G9uMzp1jWDrNJLKQLeF+pDwEKkk56LX2vzvdBqa+9BMDhjH1YlmKJy+IaKNVeJWAzcd6BeKUoS+\nfvO7UUTY6VjykhACmSRhCUcgIq2WTM9eoNns2nvFVFvmQMhms9ZwZ9SHhglqVLfmxTU9PQ0LP6Tb\n7NGYbyA9ycDeLNlDtxPtu5NvP/U058+f5+TJk4DW2pTLZbZt28b8/DypVIpyuczw8LC9t0zS+fz8\nvA1ONgNmw3Ew8nlTAUspWVtbw8TgmWT3l3Jds8rBCDSMdXh5eRkVZHGK/chUgp9PSlXDkDReABwv\ngchmwPD/ej2thDN27rAHCQlpaWnJAlRXV1epVCrWhGScijbFG6yX/sCBA/i+T7PZxPd9ZmZmrInJ\n0JQMfWfnzp1s2bLFmqyeeeYZer0eTz/9tM3o+JVf+RXOnTtHuVzmiSeeoFgs8t3vfheRKXLvvfdy\n3XXXcfHiRS5duoTrumxsbFhruwG3GDFOEATUajW2bdvGyMgIuVwOKSXPP/88jz/+OL/+67/OX/7l\nXzI0NMTdd9/Ne9/7Xl71qlcxMDDAwMDAVSQu05/KJFMiNrdFkEmUjEqX90LqA8BQmEEfCmFHVxC9\nrm4lQt06qKaWE6tmRaPiTKvhapoXYc9mTmqIay9ZS2vwLCZmLg61+jARRKk4IVm3mxDHOKUBhBQE\nRZ0iLV0Hx9WVh5f2cNOeRdSTbC6kI3ES7kPnx8/al4epEsw8x6gOrwwwNveN7/tWmm6Ym1LqaD/H\n0yKnwX0jDN/1SpaG9vOV//Qgzz//PKdOnbJr7enpaUZHR221OjIywo4dO5ienqZQKNiwGqOXqVar\nthIwBjmz2boSCmz8GRcuXKC/v9++8F7K9aIqByHEeaAKREBPKfVyIUQ/8EVgCjgPvFUpVUl+/28B\n70p+/68qpb7+X35NkxhVqVSsoajcX8LL9aHmLxC3NJ2Jdo18/7RVKsZxnMSeJ+EpoNFyPZ1jASQp\nWFlQsd0wBEHA6dOnKRQKVKtVxsbG7IDv3Llz9vQ1YIxLly5xww03WHejmeYbWaoZRJk+MYoi3vzm\nN/OJT3wCIQTnzp1jaGiI/v5+Tpw4wU033cSZYz/mFXfcznplc8h58OBBFluKXW6VhSTP4stf/jL7\n9+9nYWHB3iC1Ws26PrPZLI7jWMT+2toaGxsbzM3NWafl0NAQr3jFK9i+fTvZbJaBgQE7sDIiGoMf\nM1e3F+J7Ho4UCSsxSsp79JtcgHIzCGNsMwNJU0kIiQrbCKnVkcI82H5GDxfb9U2Aaxzpg8JJyM6J\nGYsgi7DJ3Mq2NCJZkWplrI/q1bH4+zjGzaSIuj2E5+Kk/CTKXhIa41NCh9IHg0Ov2dMp1imfpadf\nYOutr2N5o0Gz2bT9vJEhGz6kiQTsdPQGzMyECoWCvY/r9TrOxG7GXnED3fUNstftp7L7Tr7/7CaT\n1LTIxWLRMhharRYDAwNs3bqVUqlkGaRra2vWMOX7Pq1Wy4KK+vr6yGQy1qlrDgej4DXbl/7+fhYW\nFl7Mo37V9WLbCgW8Sim1dsWv/SbwqFLqI0KIDyb//zeFEHuBtwF7gXHgMSHELqVUfOUXNBJRA02R\nUtKLwXN9rZ/P5LQ1tqe3AaatcF0X0VWaGBVkiOsb+qaMY+LECtxd3yDwfES2wMBUH//4j/9IqVRi\nY2ODgYEBLl26ZN/IYRgyPq7dkMa0YgxSW7dutYAVE993+vRp9u3bx8zMDJ1Ox2Y83HXXXbRaLX7y\nJ3/SVgoPP/wwd955J/l8nhdeeIFarcYf/4c/4L3v/4C9kSYmJuj2QsTgFm4fSfHkkzt55JFHCMPQ\n7q6bzSb9/f1WdGN6zhMnTlx1g+3fv5+hoSF27dqF7/u2ZDXcCfPmMOEnRmJrbiotoEkISsLBlY4e\n/Blyk0xs2Citqw6yyRxCQWtDv/FdP5kjJKRm4aA6dS2ZNnmaxg8jMtr27Xr68PEzSYXiILyU9m84\nrqUuqU5Lzx48DyELRLWKrlZUhIoipKs5D2GzjZv2CTtd3DBChTFu4NJpd5JvSyPaNI1J6x92DA1y\ncWHF/ozM5gGwGpcrq4dS6f9u79xi4zivO/47szu7w13eTPEmihQlXizTMlMStgW4jiA7apy4KGI/\npIARpAgMJC3QAi1QwDGSPBpogr64fSiKArWDIjFip7DrKLEKy4FlNkpdy6oki5ZqWbIpUiTFO0Vy\nucu9zHx9+C5cqSyiwDa1AfYAwg5nl7uHq5nzne+c8///G910ou/7roCdy+XIdd1J+vAfU1vfwsxa\ngVOnTrnZBNsetdu65eVl1tfXHW9IKpUinU47TZJsNus4Im1W093dTX9/P83NzY7v03awbKt7ZmbG\nZROTk5N4nsfi4uJnEhzA0WY4+wpwyBz/C/AWOkA8BvxEKVUErojIZeAA8F/lv2yVmpqamhzzTWtr\nK+l0I15DM2E4o/kGY3E3Z14sFslms9Qk01AsojayehXJreP5cYiUYQUCr7EFSQb4GyvMzMy4CrOl\nbe/u7mZubs6pV/X09Lg0fXp62q2yloV5Y2PDdVXa2tqYnp4mnU5z8uRJ+vr6XMpXX1/PyMgI6XSa\nXbt2cejQIV588UU+/vhj7r33Xv7+H/6R733vezz//PNcvHjRka1cvDhLU1MTTzzxBEtLS1y9epX2\n9na3MlhtjPLVwXZBLHx3586dNDc3k8/n6ejocB0Lu12ybVc7BGZrF+XTk4lEwopLEWLGnhHN6BQz\nHYzihqlBmBfGkygvrjkMwryeYBQ99YqfRDBV8lIRTUapdCAIi5A0zEtRaGoaCQ3sKppZCcyodrzk\nCpIqp0VvvaAGlaojylwnLGhQWGmjQMyPEyqFn9I3ehQp2CiRqPWJwoiooCnjvIRHVIwoZkvUjZ9j\nYWHVMSdZhKv9ru1QkgW3hWFIbW2tq20BrvNzbWaGRCJNbnqRpSW9njY1Nbkg09DQoDVi1abehS0s\nWhm9jz/+mNXVVYeqtOQtQRDcBKvfDGRW+KZcn8KCs4Ig+K3JXm615qDQGcApEfmWOdemlJo1x7NA\nmznuACbLfncSnUHc+IaGlGJ8fJxMJuOYl4j7qFyGcG2FaH2FKLvmimye5xlshdlamCk7pUCFEWG+\nSLhR0DP2G1lEwYYXOAh2d3e3w7dbsJV9tIy+FiMfRRHnz59n//79bnWdmppynQ9bx1haWqKuro5X\nXnmFvXv3Mjw8TBRFjI2NOcWrp5/+Np7n8fbbb9PQ0MDk5CQ7d+5kz549vPHGG4RhyPDwMO+++y5R\nFHHw4EGy2SyZTIaVlRU2NjaYnJx01enOzk7uueceBgcHOXDgAAcOHKCnp4fe3l4H4LJs03Z1A5yu\ngS2wWnVmO35teS6UeW0sKuqszHIuWAKTYl7fsFbbwTA74RsRG883HA1murKkOQ/07ENJE7m6seyk\n3rqI6EzB1jAUhijFs9BNPUnpeZpvsmAYy2vSeHV3kNjRTDwVkKjXIrzxIEksmSDmxwka9DnxPDMd\n6ZlW6Cb+Yubo67S0tDiKNXut2dXagrNsMdCu9DeDmayu6+LiIuvr6649mkqlHBNZTU3NZhHedBGa\nmppccd4KOq+trbmhrFwuRxAEdHV10d7efkOmEUWRQ2fawuXq6irZbNa1MO2Y9W9jtxocHlRKDQOP\nAn8hIgdvutHNcvD/2v95zqpELy4ucunSJYdzoJAnO/YRi+9dYvG9i2ROnUAWx29QE9LjuXo/GmVW\n8OIxHRiKJb3fLBQ19Lujj1d/cZSJiQk8z6O5uZlisUgQBE5mPp1OOyZiSz8fj8fp6uri+PHjPP74\n4262fnJykmw2y+zsrFsRLNTb8zymp6e47777GBgYoKWlhWPHjlEoFOjr6+NrX/sa4+PjjIyMkM/n\n+frXv87IyAijo6OAnrvYt28fR44c4fjx404Dw15EVgW7u7ubUqnkOg525r6np4fm5mY3MGazAbsq\n2aBog4Kt4ZQXYmOxGH5xHRBN9mrmGEphqAOC5VxI1aOStToIWEwLZqS6XH075hsdCHRrVEUarp03\ng1GGKEUZcRzxE6jMkikmm2GrQtYFDzeyrSIkCFDogS0vEaAKecTzSDakCXY06JZmUoste0ZxO5aM\n4dfEwdMw7ngy5qYm164usWvXLtbW1twYvM0ay/Ertj5mswr7vIi468pyboRh6DArO3bs4I477nB6\nplZs2YLlLIZmamqK8+fPOz4Hi6NpaGhgx44dtLa2EgQBvu+7uQWbEa+trbk2eznt4NTUFNls1rGp\n36rdUnBQSl0zj/PAv6G3CbMi0g4gIjuBOfPyKaCr7Nc7zbkb7OTJk7z22mucOHGCixcvOiGW0vxV\nFs5+yPJHc2Qm55k79QG5/3iF+tpaGhsbdUFSRWY1MhdUGBJL+vpiKBQ1kUbLLq4nW9wchcXp22zB\npluxWIzr16+7AGH3j4VCgeXlZa5evUpnZ6eL4l965BF27tyJ53k0NjayY8cO6urqaGho4Kc//VdS\ncXjyySfp7u5mdXWV8fFxx0HY39/PpUuXWF1d5VdvvckzzzzDu+++ywsvvMCJEyf43Oc+5whr7777\nblZWVhwxqA2moIuNAwMD7Nu3j5aWFkcXZlc7C8iyaasd5Ckf7LGFS/voRHMDDQEX3/A/xBL4Mc8o\nVYFlMJKwtNlp8AOjPxG5ToVWicpAIavrAhY05wdahmBjzQQBMyMRllC5NSTVqD9HYmabYfQr/GBz\n6Eop/VlhqN8b9OCc+Z7F0/Rrnh/XiM21HDHffC8G9KTVsyDVkqKwXiSfKfDA793t9vC5XI5iseiU\nrGy6bp+3I+nlADg7zGSZmCyupb6+3im826BhA0hfX5/bTlhmtOXlZXefWEoDEaGtrc3JGVrSWEtC\na8etLceo9XtxcZH33nuPs2fPMjlZntD/ZvuNwUFEUiJSZ47TwCPAKHAE+IZ52TeAV83xEeAJEUmI\nyF6gHzh58/v29/czODjIvn37HP17Op0m+9Elx+UfFrRM+8bsHMHqpOPz1y0undaK0VUEiAcJYkGS\nZGM94coid0SrHD58mMHBQRYXF8lms/T397t6gh0v3b9/PxMTE+5GtM8nEgmOHDnCnj17HDX+nt2d\nXLlyxc0HWLSo3basZLLcc9edXL9+nfn5eX784x8zNjbGwsICDzzwAK2trVy4cIGZeU3ccf/995PL\n5ZiYmGBhYQHP83jmmWdoaWkhkUgwMTHB7Owsq6urhGFIT08PQ0NDjjTWMjzZPamIcPr0accybbcQ\nNvOybTobRGwWISp0sG47QmxXTEeoKhouTT7rphx11mCo2o38nfgB+AkkljA8kQZlKYLK51Bh0TCH\nh7z16//czB6M0K54Mb0AhCU9G2GnLq0PYajbmEo5SQJicbxgU49TRFwAiCX0aLYXF729iJljBfmV\nPIm0T1SMyL76Tw6rYK8DW7Sen5/H933efvvtG4KBXcHt9sKiYy1Vn4UGlNcvbGCwNSzL/m1xP7t3\n73bdKJttdHZ20tnZSWtrq8NQWCGiYrHI6uoq165d49KlS05ceWJigs7OTh566CGGhoZ47LHHPt3g\ngK4l/EpEzgLvAL8wrckfAF8UkQ+BL5ifUUpdAH4KXAD+HfhztYWahr1grQK13Yfl5xZAhGRDQFSK\ntFhqJkcss+wuXOzFFRoNBBG8WEwLrgCl3Abi+5Tq2wnD0LUNE4mEq3FYJidLcLu+vu6o34aHh2lv\nb+f+++8nlUoxMjLC4OCgJlYp6hZgTU0NQRAwMDBAPp/n/PnzdHR08OrPXyMorPDNb37TpfeNjY08\n/fTTjI6OcvjwYcbGxujp6eFnP/sZBw8edF0HyxOQSCT4sz/9lhPMsduC1tZWmpubaW5udr6Ws1TZ\nrODEiRNuS2FVtG1bzmI0bs4yIjxHPFssFvHMCu0KkjFfs3Ahm2PUfrBZNPQ8rRJuMRn5rGbkKm4g\ndS2Gyq+kQVZxw2pdKvDWL38JcVPMLBVMlmU7HWKyCjMPoZShB4xrQFaqDq+xdZOY1tPt7TBf0FsO\ndGCIpwLigW8wO3GtBW7+LA3y9ZCYMHPiHL29vY5WbWxsjEwm4wJlLpfjnXfecROlIoLv+y6I2OKk\nnaS0RLUW9wA4nRZ7S9iCtFLKkR8nEgm6urpcIG9ra6Ojo4OOjg7HKm5pCESEubk5pqenuXbtGjU1\nNUxNTeH7vmuBplIphoeHefjhh285MMAtBAel1JhSasj8u0cp9X1zfkkp9QdKqTuVUo/YGQfz3N8o\npfqUUncppV7f6n0LhYKDnfq+z/z8PNPT03jJBPGEljxL1ieJBwn8miSeilw6hqfRd5IMdCGsVESL\n63qGjwBEPGbmFhgdHWVpaYn29naKxSLj4+NucOn69esMDAwwPT3tRF9qa2tZWFhwEX9paYnZ2Vnu\nvPNODh06RCGEM2fOOHh0JpNxcxCXL18ml8vxxn9/wKOPPspdd911A1oumUzy8ssvEwQBU1NT9PX1\ncfToUYIg4OjRo/zwhz+kt7eX06dPk9vI89xzz9Hd3U13dzf33XcfQ0ND7j2tyncQBC6A2K2BvfGt\neK7tTNhxYDvbYFc5+73aoqTv+0gsRilSehjJ3biimw1BrbsRNQYjb+4yo1ta0oVMLRBjODaU0hlF\nWNB8ChZu73k6w/B0UFBRkRtKWFaE19cDbxLomYkon9Mj1+uroCK8ugbEi+HF4iQbavWkbKFkpPPi\njgUq7mu5ez+lAVixZIwojChtlLj+0TzDw8Mua2hoaHCLiyX5sSv/8vKy434Iw9CxQwVB4BaO1tZW\n7qivcxoggNMGEREWFhaYnp5mcnLSkfbY/8tyZbZdu3bR3NzsriNbmAbcoNPY2BhXr15lZmbGgfts\nZ6qzs5Pe3t7fHci23XsBzM7OOjKWoL0dpSKiolY08vw4XpCgVN/scBAY6nmpqQMvRlQoajnzQlGv\nBrE4UVYrXNuCUUdHh9u72XRtbm6OUqnE+vq628tZ2rfx8XHXGQiCgKGhIb761a8ycuLX5HI59u/f\nz/vvv+/S+bq6Ot58803i8Tjnzp1jcnKSp556ikQiwdraGufOnXMB4eLFi4yMjDA/P8++ffucYM3y\n8jJ79+7lpZde4tixY7z00ks8++yz1NfX09vb6zQy7A1vEZh29t4GhfLU1RbWbGfCzkjYGoQlsXEz\nJOZ8KYJ4PLbZYYgnTTAxNR+v7NIxAZtEShcLEzWoMG+EYvSEpYinW5xxvd/XXQrNSK0KOf2+kYGG\nb2Q0chNcPQKlUIaYllIRL91AlM3obYTtYMU1HseOSifqU0RhZPgeaoinA1OcjGk2prQPSitOJWp1\nNrM7KPHggw863El5IdIWB+fm5hzVf9KPu22F3WLYdmfC063dWMxzpDErKyuunrW0tMT8/Ly7D2xG\naFuiURTR1tZGNpt1gcIGdEveMjs7y+joqBO6mZmZYXV11W0Zd+/e7SDmv63JFhn/Z24isv0fWrWq\nVQ0ApdQt6eLdluBQtapVrfLttqpsV61qVatcqwaHqlWtalvatgcHEfmyiHwgIpcMYOu2mog8LyKz\nIjJadq5JRN4QkQ9F5JiINJY99x3j+wci8sht8LdLRI6LyHkReV9E/rJSfRaRQETeEZGzInJBRL5f\nqb7e5HdMRM6IyM8r3V8RuSIi54y/Jz9Vf21lezv+oSVOLgN7AB84Cwxspw9b+HQQGAZGy879LfBt\nc/w08ANzfLfx2Td/w2XA22Z/24Ehc1wLXAQGKtVnIGUe42jw3ecr1dcyn/8aeAE48jtwPYwBTTed\n+1T83e7M4QBwWSl1RWnU5otoFOdtM6XUr4Dlm05/BY00xTw+bo4d4lQpdQX95R7YDj+tKaVmlFJn\nzXEG+B80sK0ifVZKWcrjBHpxWK5UXwFEpBP4Q+Cf2UQiV6y/xrZCTH9if7c7OOwCrpb9vCViswLs\nEyFOt8tEZA8663mHCvVZRDwzXTsLHFdKna9UX409CzwFlPOPVLK/nzpi2tp2c0j+zvVNlVLqN8xl\n3Ja/SURqgZeBv1JKrYlsLh6V5LPSJD9DItIAvC4iD9/0fMX4KiJ/BMwppc6IyENbOlNB/hp7UCl1\nTURagDdE5IMbnPkE/m535nAzYrOLGyNZpdgnQpx+1iYiPjow/EgpZQFvFe2zUmoFeA24l8r19feB\nr4jIGPAT4Asi8qMK9hf1GSCmrW13cDgF9IvIHhFJoOnkjmyzD7dinwhx+lma6BThOeCCUurvyp6q\nOJ9FpNlWykWkBvgicKYSfQVQSn1XKdWllNoLPAG8qZT6k0r1Vz4jxLSz21AJfhRdYb8MfGe7P38L\nf34CTAMFdD3kSaAJ+CXwIXAMaCx7/XeN7x8AX7oN/n4evR8+i77RzgBfrkSfgUHgtPH1HPCUOV9x\nvm7h+yE2uxUV6S+w13y3Z4H37f30aflbHZ+uWtWqtqVVJySrVrWqbWnV4FC1qlVtS6sGh6pVrWpb\nWjU4VK1qVdvSqsGhalWr2pZWDQ5Vq1rVtrRqcKha1aq2pVWDQ9WqVrUt7X8BjAOEII9HeoAAAAAA\nSUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"imshow(img, cmap=cm.RdGy_r)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 从脚本中运行"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在脚本中使用 `plot` 时,通常图像是不会直接显示的,需要增加 `show()` 选项,只有在遇到 `show()` 命令之后,图像才会显示。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 直方图"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"从高斯分布随机生成1000个点得到的直方图:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(array([ 2., 7., 37., 119., 216., 270., 223., 82., 31., 13.]),\n",
" array([-3.65594649, -2.98847032, -2.32099415, -1.65351798, -0.98604181,\n",
" -0.31856564, 0.34891053, 1.0163867 , 1.68386287, 2.35133904,\n",
" 3.01881521]),\n",
" )"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"hist(randn(1000))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"更多例子请参考下列网站:\n",
"\n",
"http://matplotlib.org/gallery.html"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.03-numpy-arrays.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Numpy 数组及其索引"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"先导入numpy:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from numpy import *"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 产生数组"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"从列表产生数组:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 1, 2, 3])"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lst = [0, 1, 2, 3]\n",
"a = array(lst)\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"或者直接将列表传入:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 2, 3, 4])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array([1, 2, 3, 4])\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 数组属性"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看类型:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"numpy.ndarray"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看数组中的数据类型:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"dtype('int32')"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 32比特的整数\n",
"a.dtype"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看每个元素所占的字节:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.itemsize"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看形状,会返回一个元组,每个元素代表这一维的元素数目:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(4L,)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 1维数组,返回一个元组\n",
"a.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"或者使用:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(4L,)"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"shape(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`shape` 的使用历史要比 `a.shape` 久,而且还可以作用于别的类型:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(4L,)"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lst = [1,2,3,4]\n",
"shape(lst)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看元素数目:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.size"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"size(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看所有元素所占的空间:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"16"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.nbytes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"但事实上,数组所占的存储空间要比这个数字大,因为要用一个header来保存shape,dtype这样的信息。\n",
"\n",
"查看数组维数:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.ndim"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 使用fill方法设定初始值"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以使用 `fill` 方法将数组设为指定值:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([-4, -4, -4, -4])"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.fill(-4.8)\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"但是与列表不同,数组中要求所有元素的 `dtype` 是一样的,如果传入参数的类型与数组类型不一样,需要按照已有的类型进行转换。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 索引与切片"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"和列表相似,数组也支持索引和切片操作。\n",
"\n",
"索引第一个元素:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array([0, 1, 2, 3])\n",
"a[0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"修改第一个元素的值:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([10, 1, 2, 3])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[0] = 10\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"切片,支持负索引:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([12, 13])"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array([11,12,13,14,15])\n",
"a[1:3]"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([12, 13])"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[1:-2]"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([12, 13])"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[-4:3]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"省略参数:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([11, 13, 15])"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[::2]"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([14, 15])"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[-2:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"假设我们记录一辆汽车表盘上每天显示的里程数:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"od = array([21000, 21180, 21240, 22100, 22400])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以这样计算每天的旅程:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([180, 60, 860, 300])"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dist = od[1:] - od[:-1]\n",
"dist"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在本质上,**Python**会将array的各种计算转换为类似这样的**C**代码:\n",
"\n",
"```c\n",
"int compute_sum(int *arr, int N) {\n",
" int sum = 0;\n",
" int i;\n",
" for (i = 0; i < N; i++) {\n",
" sum += arr[i];\n",
" }\n",
" return sum;\n",
"}\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 多维数组及其属性"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`array` 还可以用来生成多维数组:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2, 3],\n",
" [10, 11, 12, 13]])"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array([[ 0, 1, 2, 3],\n",
" [10,11,12,13]])\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"事实上我们传入的是一个以列表为元素的列表,最终得到一个二维数组。\n",
"\n",
"甚至可以扩展到3D或者4D的情景。\n",
"\n",
"查看形状:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(2L, 4L)"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里2代表行数,4代表列数。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看总的元素个数:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"8"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 2 * 4 = 8\n",
"a.size"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看维数:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.ndim"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 多维数组索引"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于二维数组,可以传入两个数字来索引:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"13"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[1, 3]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"其中,1是行索引,3是列索引,中间用逗号隔开,事实上,**Python**会将它们看成一个元组(1,3),然后按照顺序进行对应。\n",
"\n",
"可以利用索引给它赋值:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2, 3],\n",
" [10, 11, 12, -1]])"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[1, 3] = -1\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"事实上,我们还可以使用单个索引来索引一整行内容:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([10, 11, 12, -1])"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 返回第二行元组组成的array\n",
"a[1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Python**会将这单个元组当成对第一维的索引,然后返回对应的内容。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 多维数组切片"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"多维数组,也支持切片操作:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2, 3, 4, 5],\n",
" [10, 11, 12, 13, 14, 15],\n",
" [20, 21, 22, 23, 24, 25],\n",
" [30, 31, 32, 33, 34, 35],\n",
" [40, 41, 42, 43, 44, 45],\n",
" [50, 51, 52, 53, 54, 55]])"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array([[ 0, 1, 2, 3, 4, 5],\n",
" [10,11,12,13,14,15],\n",
" [20,21,22,23,24,25],\n",
" [30,31,32,33,34,35],\n",
" [40,41,42,43,44,45],\n",
" [50,51,52,53,54,55]])\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"想得到第一行的第 4 和第 5 两个元素:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([3, 4])"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[0, 3:5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"得到最后两行的最后两列:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[44, 45],\n",
" [54, 55]])"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[4:, 4:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"得到第三列:"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 2, 12, 22, 32, 42, 52])"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[:, 2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"每一维都支持切片的规则,包括负索引,省略:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" [lower:upper:step]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"例如,取出3,5行的奇数列:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[20, 22, 24],\n",
" [40, 42, 44]])"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[2::2, ::2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 切片是引用"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"切片在内存中使用的是引用机制。"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2 3]\n"
]
}
],
"source": [
"a = array([0,1,2,3,4])\n",
"b = a[2:4]\n",
"print b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"引用机制意味着,**Python**并没有为 `b` 分配新的空间来存储它的值,而是让 `b` 指向了 `a` 所分配的内存空间,因此,改变 `b` 会改变 `a` 的值:"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 1, 10, 3, 4])"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b[0] = 10\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"而这种现象在列表中并不会出现:"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 2, 3, 4, 5]\n"
]
}
],
"source": [
"a = [1,2,3,4,5]\n",
"b = a[2:3]\n",
"b[0] = 13234\n",
"print a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这样做的好处在于,对于很大的数组,不用大量复制多余的值,节约了空间。\n",
"\n",
"缺点在于,可能出现改变一个值改变另一个值的情况。\n",
"\n",
"一个解决方法是使用copy()方法产生一个复制,这个复制会申请新的内存:"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 1, 2, 3, 4])"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array([0,1,2,3,4])\n",
"b = a[2:4].copy()\n",
"b[0] = 10\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 花式索引"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"切片只能支持连续或者等间隔的切片操作,要想实现任意位置的操作,需要使用花式索引 `fancy slicing` 。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 一维花式索引"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"与 range 函数类似,我们可以使用 arange 函数来产生等差数组。"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 10, 20, 30, 40, 50, 60, 70])"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = arange(0, 80, 10)\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"花式索引需要指定索引位置:"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[10 20 50]\n"
]
}
],
"source": [
"indices = [1, 2, -3]\n",
"y = a[indices]\n",
"print y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"还可以使用布尔数组来花式索引:"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"mask = array([0,1,1,0,0,1,0,0],\n",
" dtype=bool)"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([10, 20, 50])"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[mask]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"或者用布尔表达式生成 `mask`,选出了所有大于0.5的值:"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.37214708, 0.48594733, 0.73365131, 0.15769295, 0.30786017,\n",
" 0.62068734, 0.36940654, 0.09424167, 0.53085308, 0.12248951])"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from numpy.random import rand\n",
"a = rand(10)\n",
"a"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.73365131, 0.62068734, 0.53085308])"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mask = a > 0.5\n",
"a[mask]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"mask 必须是布尔数组。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 二维花式索引"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2, 3, 4, 5],\n",
" [10, 11, 12, 13, 14, 15],\n",
" [20, 21, 22, 23, 24, 25],\n",
" [30, 31, 32, 33, 34, 35],\n",
" [40, 41, 42, 43, 44, 45],\n",
" [50, 51, 52, 53, 54, 55]])"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array([[ 0, 1, 2, 3, 4, 5],\n",
" [10,11,12,13,14,15],\n",
" [20,21,22,23,24,25],\n",
" [30,31,32,33,34,35],\n",
" [40,41,42,43,44,45],\n",
" [50,51,52,53,54,55]])\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于二维花式索引,我们需要给定 `row` 和 `col` 的值:"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1, 12, 23, 34, 45])"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[(0,1,2,3,4), (1,2,3,4,5)]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"返回的是一条次对角线上的5个值。"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[30, 32, 35],\n",
" [40, 42, 45],\n",
" [50, 52, 55]])"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[3:, [0,2,5]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"返回的是最后三行的第1,3,5列。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"也可以使用mask进行索引:"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 2, 22, 52])"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mask = array([1,0,1,0,0,1],\n",
" dtype=bool)\n",
"a[mask, 2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"与切片不同,花式索引返回的是原对象的一个复制而不是引用。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### “不完全”索引"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"只给定行索引的时候,返回整行:"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2, 3, 4, 5],\n",
" [10, 11, 12, 13, 14, 15],\n",
" [20, 21, 22, 23, 24, 25]])"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y = a[:3]\n",
"y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这时候也可以使用花式索引取出第2,3,5行:"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[10, 11, 12, 13, 14, 15],\n",
" [20, 21, 22, 23, 24, 25],\n",
" [40, 41, 42, 43, 44, 45]])"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"condition = array([0,1,1,0,1],\n",
" dtype=bool)\n",
"a[condition]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 三维花式索引"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[[ 0, 1, 2, 3],\n",
" [ 4, 5, 6, 7],\n",
" [ 8, 9, 10, 11],\n",
" [12, 13, 14, 15]],\n",
"\n",
" [[16, 17, 18, 19],\n",
" [20, 21, 22, 23],\n",
" [24, 25, 26, 27],\n",
" [28, 29, 30, 31]],\n",
"\n",
" [[32, 33, 34, 35],\n",
" [36, 37, 38, 39],\n",
" [40, 41, 42, 43],\n",
" [44, 45, 46, 47]],\n",
"\n",
" [[48, 49, 50, 51],\n",
" [52, 53, 54, 55],\n",
" [56, 57, 58, 59],\n",
" [60, 61, 62, 63]]])"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = arange(64)\n",
"a.shape = 4,4,4\n",
"a"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[[ 2, 3],\n",
" [ 6, 7],\n",
" [10, 11],\n",
" [14, 15]],\n",
"\n",
" [[18, 19],\n",
" [22, 23],\n",
" [26, 27],\n",
" [30, 31]],\n",
"\n",
" [[34, 35],\n",
" [38, 39],\n",
" [42, 43],\n",
" [46, 47]],\n",
"\n",
" [[50, 51],\n",
" [54, 55],\n",
" [58, 59],\n",
" [62, 63]]])"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y = a[:,:,[2, -1]]\n",
"y"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## where语句"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" where(array)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`where` 函数会返回所有非零元素的索引。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 一维数组"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"先看一维的例子:"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = array([0, 12, 5, 20])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"判断数组中的元素是不是大于10:"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([False, True, False, True], dtype=bool)"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a > 10"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"数组中所有大于10的元素的索引位置:"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(array([1, 3], dtype=int64),)"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"where(a > 10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"注意到 `where` 的返回值是一个元组。\n",
"\n",
"使用元组是由于 where 可以对多维数组使用,此时返回值就是多维的。\n",
"\n",
"在使用的时候,我们可以这样:"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 3], dtype=int64)"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"indices = where(a > 10)\n",
"indices = indices[0]\n",
"indices"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"或者:"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 3], dtype=int64)"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"indices = where(a>10)[0]\n",
"indices"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以直接用 `where` 的返回值进行索引:"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([12, 20])"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"loc = where(a > 10)\n",
"a[loc]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 多维数组"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"考虑二维数组:"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = array([[0, 12, 5, 20],\n",
" [1, 2, 11, 15]])\n",
"loc = where(a > 10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"返回结果是一个二维的元组,每一维代表这一维的索引值:"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"(array([0, 0, 1, 1], dtype=int64), array([1, 3, 2, 3], dtype=int64))"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"loc"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"也可以直接用来索引a:"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([12, 20, 11, 15])"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[loc]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"或者可以这样:"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"rows, cols = where(a>10)"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 0, 1, 1], dtype=int64)"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rows"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 3, 2, 3], dtype=int64)"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cols"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([12, 20, 11, 15])"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[rows, cols]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"再看另一个例子:"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2, 3, 4],\n",
" [ 5, 6, 7, 8, 9],\n",
" [10, 11, 12, 13, 14],\n",
" [15, 16, 17, 18, 19],\n",
" [20, 21, 22, 23, 24]])"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = arange(25)\n",
"a.shape = 5,5\n",
"a"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[False, False, False, False, False],\n",
" [False, False, False, False, False],\n",
" [False, False, False, True, True],\n",
" [ True, True, True, True, True],\n",
" [ True, True, True, True, True]], dtype=bool)"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a > 12"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(array([2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4], dtype=int64),\n",
" array([3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4], dtype=int64))"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"where(a > 12)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.04-array-types.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 数组类型"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from numpy import *"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"之前已经看过整数数组和布尔数组,除此之外还有浮点数数组和复数数组。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 复数数组"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"产生一个复数数组:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"a = array([1 + 1j, 2, 3, 4])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Python**会自动判断数组的类型:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"dtype('complex128')"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.dtype"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于复数我们可以查看它的实部和虚部:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1., 2., 3., 4.])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.real"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1., 0., 0., 0.])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.imag"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"还可以设置它们的值:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a.imag = [1,2,3,4]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看 `a`:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1.+1.j, 2.+2.j, 3.+3.j, 4.+4.j])"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看复共轭:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1.-1.j, 2.-2.j, 3.-3.j, 4.-4.j])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.conj()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"事实上,这些属性方法可以用在浮点数或者整数数组上:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"dtype('float64')"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array([0.,1,2,3])\n",
"a.dtype"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0., 1., 2., 3.])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.real"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0., 0., 0., 0.])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.imag"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0., 1., 2., 3.])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.conj()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"但这里,虚部是只读的,并不能修改它的值:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypeError",
"evalue": "array does not have imaginary part to set",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# 会报错\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0ma\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mimag\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m4\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m: array does not have imaginary part to set"
]
}
],
"source": [
"# 会报错\n",
"a.imag = [1,2,3,4]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 指定数组类型"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"之前已经知道,构建数组的时候,数组会根据传入的内容自动判断类型:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = array([0,1.0,2,3])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于浮点数,默认为双精度:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"dtype('float64')"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.dtype"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看所用字节(`8 bytes * 4`):"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"32"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.nbytes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当然,我们也可以在构建的时候指定类型:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = array([0,1.0,2,3],\n",
" dtype=float32)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"此时类型为单精度浮点数:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"dtype('float32')"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.dtype"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看所用字节(`4 bytes * 4`):"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"16"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.nbytes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"除此之外,还可以指定有无符号,例如无符号整数:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"dtype('uint8')"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array([0,1,2,3],\n",
" dtype=uint8)\n",
"a.dtype"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`uint8` 只使用一个字节,表示 `0` 到 `255` 的整数。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"还可以从二进制数据中读取。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"先写入二进制数据:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = array([102,111,212], \n",
" dtype=uint8)\n",
"a.tofile('foo.dat')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"从数据中读入,要指定类型:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([102, 111, 111], dtype=uint8)"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b = frombuffer('foo', \n",
" dtype=uint8)\n",
"b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"清理数据文件:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os\n",
"os.remove('foo.dat')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`0-255` 的数字可以表示ASCⅡ码,我们可以用 ord 函数来查看字符的ASCⅡ码值:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"102"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ord('f')"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"83"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ord('S')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Numpy 类型"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"具体如下:\n",
"\n",
"|基本类型|可用的**Numpy**类型|备注\n",
"|--|--|--\n",
"|布尔型|`bool`|占1个字节\n",
"|整型|`int8, int16, int32, int64, int128, int`| `int` 跟**C**语言中的 `long` 一样大\n",
"|无符号整型|`uint8, uint16, uint32, uint64, uint128, uint`| `uint` 跟**C**语言中的 `unsigned long` 一样大\n",
"|浮点数| `float16, float32, float64, float, longfloat`|默认为双精度 `float64` ,`longfloat` 精度大小与系统有关\n",
"|复数| `complex64, complex128, complex, longcomplex`| 默认为 `complex128` ,即实部虚部都为双精度\n",
"|字符串| `string, unicode` | 可以使用 `dtype=S4` 表示一个4字节字符串的数组\n",
"|对象| `object` |数组中可以使用任意值|\n",
"|Records| `void` ||\n",
"|时间| `datetime64, timedelta64` ||\n",
"\n",
"任意类型的数组:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = array([1,1.2,'hello', [10,20,30]], \n",
" dtype=object)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"乘法:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([2, 2.4, 'hellohello', [10, 20, 30, 10, 20, 30]], dtype=object)"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a * 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 类型转换"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"转换数组的类型:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1.5, -3. ], dtype=float32)"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array([1.5, -3], \n",
" dtype=float32)\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### asarray 函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `asarray` 函数:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1.5, -3. ])"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"asarray(a, dtype=float64)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1, 253], dtype=uint8)"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"asarray(a, dtype=uint8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`asarray` 不会修改原来数组的值:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1.5, -3. ], dtype=float32)"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"但当类型相同的时候,`asarray` 并不会产生新的对象,而是使用同一个引用:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"b = asarray(a, dtype=float32)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b is a "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这么做的好处在与,`asarray` 不仅可以作用于数组,还可以将其他类型转化为数组。\n",
"\n",
"有些时候为了保证我们的输入值是数组,我们需要将其使用 `asarray` 转化,当它已经是数组的时候,并不会产生新的对象,这样保证了效率。"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 2, 3, 4])"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"asarray([1,2,3,4])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### astype 方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`astype` 方法返回一个新数组:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1.5, -3. ])"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.astype(float64)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1, 253], dtype=uint8)"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.astype(uint8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"astype也不会改变原来数组的值:"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1.5, -3. ], dtype=float32)"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"另外,`astype` 总是返回原来数组的一份复制,即使转换的类型是相同的:"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1.5 -3. ]\n",
"[ 1.5 -3. ]\n"
]
}
],
"source": [
"b = a.astype(float32)\n",
"print a\n",
"print b"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a is b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### view 方法"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 2, 3, 4])"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array((1,2,3,4), dtype=int32)\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`view` 会将 `a` 在内存中的表示看成是 `uint8` 进行解析:"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0], dtype=uint8)"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b = a.view(uint8)\n",
"b"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([1073741824, 2, 3, 4])"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[0] = 2**30\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"修改 `a` 会修改 `b` 的值,因为共用一块内存:"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 0, 0, 64, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0], dtype=uint8)"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.05-array-calculation-method.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 数组方法"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Using matplotlib backend: Qt4Agg\n",
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 求和"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"a = array([[1,2,3], \n",
" [4,5,6]])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"求所有元素的和:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"21"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sum(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"指定求和的维度:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"沿着第一维求和:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([5, 7, 9])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sum(a, axis=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"沿着第二维求和:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 6, 15])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sum(a, axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"沿着最后一维求和:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 6, 15])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sum(a, axis=-1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"或者使用 `sum` 方法:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"21"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.sum()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([5, 7, 9])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.sum(axis=0)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 6, 15])"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.sum(axis=-1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 求积"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"求所有元素的乘积:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"720"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.prod()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"或者使用函数形式:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 4, 10, 18])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"prod(a, axis=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 求最大最小值"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.444, 0.06 , 0.668, 0.02 ],\n",
" [ 0.793, 0.302, 0.81 , 0.381],\n",
" [ 0.296, 0.182, 0.345, 0.686]])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from numpy.random import rand\n",
"a = rand(3, 4)\n",
"%precision 3\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"全局最小:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.020"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.min()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"沿着某个轴的最小:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.296, 0.06 , 0.345, 0.02 ])"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.min(axis=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"全局最大:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.810"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.max()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"沿着某个轴的最大:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.668, 0.81 , 0.686])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.max(axis=-1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 最大最小值的位置"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `argmin, argmax` 方法:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.argmin()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([2, 0, 2, 0], dtype=int64)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.argmin(axis=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 均值"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以使用 `mean` 方法:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = array([[1,2,3],[4,5,6]])"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"3.500"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.mean()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 2., 5.])"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.mean(axis=-1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"也可以使用 `mean` 函数:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"3.500"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mean(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"还可以使用 `average` 函数:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 2.5, 3.5, 4.5])"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"average(a, axis = 0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`average` 函数还支持加权平均:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 3., 4., 5.])"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"average(a, axis = 0, weights=[1,2])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 标准差"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"用 `std` 方法计算标准差:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.816, 0.816])"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.std(axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"用 `var` 方法计算方差:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.667, 0.667])"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.var(axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"或者使用函数:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.667, 0.667])"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"var(a, axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.816, 0.816])"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"std(a, axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## clip 方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"将数值限制在某个范围:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[1, 2, 3],\n",
" [4, 5, 6]])"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[3, 3, 3],\n",
" [4, 5, 5]])"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.clip(3,5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"小于3的变成3,大于5的变成5。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ptp 方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"计算最大值和最小值之差:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([2, 2])"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.ptp(axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"5"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.ptp()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## round 方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"近似,默认到整数:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = array([1.35, 2.5, 1.5])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里,.5的近似规则为近似到偶数值,可以参考:\n",
"\n",
"https://en.wikipedia.org/wiki/Rounding#Round_half_to_odd"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1., 2., 2.])"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.round()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"近似到一位小数:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1.4, 2.5, 1.5])"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.round(decimals=1)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.06-sorting-numpy-arrays.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 数组排序"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Using matplotlib backend: Qt4Agg\n",
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## sort 函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"先看这个例子:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 20.8, 53.4, 61.8, 93.2])"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"names = array(['bob', 'sue', 'jan', 'ad'])\n",
"weights = array([20.8, 93.2, 53.4, 61.8])\n",
"\n",
"sort(weights)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`sort` 返回的结果是从小到大排列的。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## argsort 函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`argsort` 返回从小到大的排列在数组中的索引位置:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 2, 3, 1], dtype=int64)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ordered_indices = argsort(weights)\n",
"ordered_indices"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以用它来进行索引:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 20.8, 53.4, 61.8, 93.2])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"weights[ordered_indices]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array(['bob', 'jan', 'ad', 'sue'], \n",
" dtype='|S3')"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"names[ordered_indices]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用函数并不会改变原来数组的值:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 20.8, 93.2, 53.4, 61.8])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"weights"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## sort 和 argsort 方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"数组也支持方法操作:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 2, 3, 1], dtype=int64)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = array([20.8, 93.2, 53.4, 61.8])\n",
"data.argsort()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`argsort` 方法与 `argsort` 函数的使用没什么区别,也不会改变数组的值。"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 20.8, 93.2, 53.4, 61.8])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"但是 `sort`方法会改变数组的值:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data.sort()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 20.8, 53.4, 61.8, 93.2])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 二维数组排序"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于多维数组,sort方法默认沿着最后一维开始排序:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.2, 0.1, 0.5],\n",
" [ 0.4, 0.8, 0.3],\n",
" [ 0.9, 0.6, 0.7]])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array([\n",
" [.2, .1, .5], \n",
" [.4, .8, .3],\n",
" [.9, .6, .7]\n",
" ])\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于二维数组,默认相当于对每一行进行排序:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.1, 0.2, 0.5],\n",
" [ 0.3, 0.4, 0.8],\n",
" [ 0.6, 0.7, 0.9]])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sort(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"改变轴,对每一列进行排序:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.2, 0.1, 0.3],\n",
" [ 0.4, 0.6, 0.5],\n",
" [ 0.9, 0.8, 0.7]])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sort(a, axis = 0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## searchsorted 函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" searchsorted(sorted_array, values)\n",
"\n",
"`searchsorted` 接受两个参数,其中,第一个必需是已排序的数组。"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"sorted_array = linspace(0,1,5)\n",
"values = array([.1,.8,.3,.12,.5,.25])"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 4, 2, 1, 2, 1], dtype=int64)"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"searchsorted(sorted_array, values)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"排序数组:\n",
"\n",
"|0|1|2|3|4|\n",
"|-|-|-|-|-|\n",
"|0.0|0.25|0.5|0.75|1.0\n",
"\n",
"数值:\n",
"\n",
"|值|0.1|0.8|0.3|0.12|0.5|0.25|\n",
"|-|-|-|-|-|-|-|\n",
"|插入位置|1|4|2|1|2|1|\n",
"\n",
"`searchsorted` 返回的值相当于保持第一个数组的排序性质不变,将第二个数组中的值插入第一个数组中的位置:\n",
"\n",
"例如 `0.1` 在 [0.0, 0.25) 之间,所以插入时应当放在第一个数组的索引 `1` 处,故第一个返回值为 `1`。"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from numpy.random import rand\n",
"data = rand(100)\n",
"data.sort()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不加括号,默认是元组:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(0.4, 0.6)"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bounds = .4, .6\n",
"bounds"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"返回这两个值对应的插入位置:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"low_idx, high_idx = searchsorted(data, bounds)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"利用插入位置,将数组中所有在这两个值之间的值提取出来:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.41122674, 0.4395727 , 0.45609773, 0.45707137, 0.45772076,\n",
" 0.46029997, 0.46757401, 0.47525517, 0.4969198 , 0.53068779,\n",
" 0.55764166, 0.56288568, 0.56506548, 0.57003042, 0.58035233,\n",
" 0.59279233, 0.59548555])"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data[low_idx:high_idx]"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.07-array-shapes.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 数组形状"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Using matplotlib backend: Qt4Agg\n",
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 修改数组的形状"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 1, 2, 3, 4, 5])"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = arange(6)\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"将形状修改为2乘3:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 1, 2],\n",
" [3, 4, 5]])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.shape = 2,3\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"与之对应的方法是 `reshape` ,但它不会修改原来数组的值,而是返回一个新的数组:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 1],\n",
" [2, 3],\n",
" [4, 5]])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.reshape(3,2)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 1, 2],\n",
" [3, 4, 5]])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`shape` 和 `reshape` 方法不能改变数组中元素的总数,否则会报错:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "ValueError",
"evalue": "total size of new array must be unchanged",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ma\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m4\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mValueError\u001b[0m: total size of new array must be unchanged"
]
}
],
"source": [
"a.reshape(4,2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 使用 newaxis 增加数组维数"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(3L,)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = arange(3)\n",
"shape(a)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1L, 3L)"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y = a[newaxis, :]\n",
"shape(y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"根据插入位置的不同,可以返回不同形状的数组:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(3L, 1L)"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y = a[:, newaxis]\n",
"shape(y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"插入多个新维度:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1L, 1L, 3L)"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y = a[newaxis, newaxis, :]\n",
"shape(y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## squeeze 方法去除多余的轴"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = arange(6)\n",
"a.shape = (2,1,3)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(2L, 3L)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b = a.squeeze()\n",
"b.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"squeeze 返回一个将所有长度为1的维度去除的新数组。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 数组转置"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `transpose` 返回数组的转置,本质上是将所有维度反过来:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[[0, 1, 2]],\n",
"\n",
" [[3, 4, 5]]])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于二维数组,这相当于交换行和列:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([[[0, 3]],\n",
"\n",
" [[1, 4]],\n",
"\n",
" [[2, 5]]])"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.transpose()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"或者使用缩写属性:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[[0, 3]],\n",
"\n",
" [[1, 4]],\n",
"\n",
" [[2, 5]]])"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.T"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"注意:\n",
"- 对于复数数组,转置并不返回复共轭,只是单纯的交换轴的位置\n",
"- 转置可以作用于多维数组"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n",
" 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,\n",
" 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,\n",
" 51, 52, 53, 54, 55, 56, 57, 58, 59])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = arange(60)\n",
"a"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[[ 0, 1, 2, 3, 4],\n",
" [ 5, 6, 7, 8, 9],\n",
" [10, 11, 12, 13, 14],\n",
" [15, 16, 17, 18, 19]],\n",
"\n",
" [[20, 21, 22, 23, 24],\n",
" [25, 26, 27, 28, 29],\n",
" [30, 31, 32, 33, 34],\n",
" [35, 36, 37, 38, 39]],\n",
"\n",
" [[40, 41, 42, 43, 44],\n",
" [45, 46, 47, 48, 49],\n",
" [50, 51, 52, 53, 54],\n",
" [55, 56, 57, 58, 59]]])"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.shape = 3,4,5\n",
"a"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(5L, 4L, 3L)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b = a.T\n",
"b.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"转置只是交换了轴的位置。\n",
"\n",
"另一方面,转置返回的是对原数组的另一种view,所以改变转置会改变原来数组的值。"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 1, 2],\n",
" [3, 4, 5]])"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = arange(6)\n",
"a.shape = (2,3)\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"修改转置:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"b = a.T\n",
"b[0,1] = 30"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"原数组的值也改变:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2],\n",
" [30, 4, 5]])"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 数组连接"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"有时我们需要将不同的数组按照一定的顺序连接起来:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" concatenate((a0,a1,...,aN), axis=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"注意,这些数组要用 `()` 包括到一个元组中去。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"除了给定的轴外,这些数组其他轴的长度必须是一样的。"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(2L, 3L)\n",
"(2L, 3L)\n"
]
}
],
"source": [
"x = array([\n",
" [0,1,2],\n",
" [10,11,12]\n",
" ])\n",
"y = array([\n",
" [50,51,52],\n",
" [60,61,62]\n",
" ])\n",
"print x.shape\n",
"print y.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"默认沿着第一维进行连接:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2],\n",
" [10, 11, 12],\n",
" [50, 51, 52],\n",
" [60, 61, 62]])"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z = concatenate((x,y))\n",
"z"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"(4L, 3L)"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"沿着第二维进行连接:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2, 50, 51, 52],\n",
" [10, 11, 12, 60, 61, 62]])"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z = concatenate((x,y), axis=1)\n",
"z"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(2L, 6L)"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"注意到这里 `x` 和 `y` 的形状是一样的,还可以将它们连接成三维的数组,但是 `concatenate` 不能提供这样的功能,不过可以这样:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"z = array((x,y))"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(2L, 2L, 3L)"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"事实上,**Numpy**提供了分别对应这三种情况的函数:\n",
"\n",
"- vstack\n",
"- hstack\n",
"- dstack"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(4L, 3L)"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"vstack((x, y)).shape"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(2L, 6L)"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hstack((x, y)).shape"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(2L, 3L, 2L)"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dstack((x, y)).shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Flatten 数组"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`flatten` 方法的作用是将多维数组转化为1维数组:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 1, 2, 3])"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array([[0,1],\n",
" [2,3]])\n",
"b = a.flatten()\n",
"b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"返回的是数组的复制,因此,改变 `b` 并不会影响 `a` 的值:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[10 1 2 3]\n",
"[[0 1]\n",
" [2 3]]\n"
]
}
],
"source": [
"b[0] = 10\n",
"print b\n",
"print a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## flat 属性"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"还可以使用数组自带的 `flat` 属性:"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.flat"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`a.flat` 相当于返回了所有元组组成的一个迭代器:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"b = a.flat"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b[0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"但此时修改 `b` 的值会影响 `a` :"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[10 1]\n",
" [ 2 3]]\n"
]
}
],
"source": [
"b[0] = 10\n",
"print a"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([10, 1, 2, 3])"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.flat[:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ravel 方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"除此之外,还可以使用 `ravel` 方法,`ravel` 使用高效的表示方式:"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 1, 2, 3])"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array([[0,1],\n",
" [2,3]])\n",
"b = a.ravel()\n",
"b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"修改 `b` 会改变 `a` :"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[10, 1],\n",
" [ 2, 3]])"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b[0] = 10\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"但另一种情况下:"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 2, 1, 3])"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array([[0,1],\n",
" [2,3]])\n",
"aa = a.transpose()\n",
"b = aa.ravel()\n",
"b"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"b[0] = 10"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 2],\n",
" [1, 3]])"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"aa"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 1],\n",
" [2, 3]])"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以看到,在这种情况下,修改 `b` 并不会改变 `aa` 的值,原因是我们用来 `ravel` 的对象 `aa` 本身是 `a` 的一个view。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## atleast_xd 函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"保证数组至少有 `x` 维:"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([1])"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = 1\n",
"atleast_1d(x)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1L, 3L)"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array([1,2,3])\n",
"b = atleast_2d(a)\n",
"b.shape"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[1, 2, 3]])"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"c = atleast_3d(b)"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1L, 3L, 1L)"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`x` 可以取值 1,2,3。\n",
"\n",
"在**Scipy**库中,这些函数被用来保证输入满足一定的条件:“ \n",
"\n",
"|用法|**Scipy**中出现次数|\n",
"|-|-|\n",
"|value.flaten()
value.flat
value.ravel() | ~2000次\n",
"| atleast_1d(value)
atleast_2d(value) |~700次\n",
"| asarray(value) |~4000次"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.08-diagonals.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 对角线"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里,使用与之前不同的导入方法:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用numpy中的函数前,需要加上 `np.`:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[11, 21, 31],\n",
" [12, 22, 32],\n",
" [13, 23, 33]])"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([11,21,31,12,22,32,13,23,33])\n",
"a.shape = 3,3\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看它的对角线元素:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([11, 22, 33])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.diagonal()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以使用偏移来查看它的次对角线,正数表示右移,负数表示左移:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([21, 32])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.diagonal(offset=1)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([12, 23])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.diagonal(offset=-1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以使用花式索引来得到对角线:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([11, 22, 33])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"i = [0,1,2]\n",
"a[i, i]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以更新对角线的值:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 2, 21, 31],\n",
" [12, 2, 32],\n",
" [13, 23, 2]])"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[i, i] = 2\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"修改次对角线的值:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 2, 1, 31],\n",
" [12, 2, 1],\n",
" [13, 23, 2]])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"i = np.array([0,1])\n",
"a[i, i + 1] = 1\n",
"a"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 2, 1, 31],\n",
" [-1, 2, 1],\n",
" [13, -1, 2]])"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[i + 1, i] = -1\n",
"a"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.5"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.09-data-to-&-from-string.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 数组与字符串的转换"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## tostring 方法"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"a = np.array([[1,2],\n",
" [3,4]], \n",
" dtype = np.uint8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"转化为字符串:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"'\\x01\\x02\\x03\\x04'"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.tostring()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我们可以使用不同的顺序来转换字符串:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'\\x01\\x03\\x02\\x04'"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.tostring(order='F')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里使用了**Fortran**的格式,按照列来读数据。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## fromstring 函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以使用 `fromstring` 函数从字符串中读出数据,不过要指定类型:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 2, 3, 4], dtype=uint8)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = a.tostring()\n",
"a = np.fromstring(s, \n",
" dtype=np.uint8)\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"此时,返回的数组是一维的,需要重新设定维度:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[1, 2],\n",
" [3, 4]], dtype=uint8)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.shape = 2,2\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于文本文件,推荐使用\n",
"- `loadtxt`\n",
"- `genfromtxt`\n",
"- `savetxt`\n",
"\n",
"对于二进制文本文件,推荐使用 \n",
"- `save` \n",
"- `load`\n",
"- `savez`"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.10-array-attribute-&-method-overview-.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 数组属性方法总结"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"||作用|\n",
"|-|-|\n",
"|1|**基本属性**\n",
"|`a.dtype`|数组元素类型 `float32,uint8,...`\n",
"|`a.shape`|数组形状 `(m,n,o,...)`\n",
"|`a.size`|数组元素数\n",
"|`a.itemsize`|每个元素占字节数\n",
"|`a.nbytes`|所有元素占的字节\n",
"|`a.ndim`|数组维度\n",
"|2|**形状相关**\n",
"|`a.flat`|所有元素的迭代器\n",
"|`a.flatten()`|返回一个1维数组的复制\n",
"|`a.ravel()`|返回一个1维数组,高效\n",
"|`a.resize(new_size)`|改变形状\n",
"|`a.swapaxes(axis1, axis2)`|交换两个维度的位置\n",
"|`a.transpose(*axex)`|交换所有维度的位置\n",
"|`a.T`|转置,`a.transpose()`\n",
"|`a.squeeze()`| 去除所有长度为1的维度\n",
"|3|**填充复制**\n",
"|`a.copy()`| 返回数组的一个复制\n",
"|`a.fill(value)`| 将数组的元组设置为特定值\n",
"|4|**转化**\n",
"|`a.tolist()`|将数组转化为列表\n",
"|`a.tostring()`|转换为字符串\n",
"|`a.astype(dtype)`|转化为指定类型\n",
"|`a.byteswap(False)`|转换大小字节序\n",
"|`a.view(type_or_dtype)`|生成一个使用相同内存,但使用不同的表示方法的数组\n",
"|5|**复数**\n",
"|`a.imag`|虚部\n",
"|`a.real`|实部\n",
"|`a.conjugate()`|复共轭\n",
"|`a.conj()`|复共轭(缩写)\n",
"|6|**保存**\n",
"|`a.dump(file)`|将二进制数据存在file中\n",
"|`a.dump()`|将二进制数据表示成字符串\n",
"|`a.tofile(fid, sep=\"\",format=\"%s\")`|格式化ASCⅡ码写入文件\n",
"|7|**查找排序**\n",
"|`a.nonzero()`|返回所有非零元素的索引\n",
"|`a.sort(axis=-1)`|沿某个轴排序\n",
"|`a.argsort(axis=-1)`|沿某个轴,返回按排序的索引\n",
"|`a.searchsorted(b)`|返回将b中元素插入a后能保持有序的索引值\n",
"|8|**元素数学操作**\n",
"|`a.clip(low, high)`|将数值限制在一定范围内\n",
"|`a.round(decimals=0)`|近似到指定精度\n",
"|`a.cumsum(axis=None)`|累加和\n",
"|`a.cumprod(axis=None)`|累乘积\n",
"|9|**约简操作**\n",
"|`a.sum(axis=None)`|求和\n",
"|`a.prod(axis=None)`|求积\n",
"|`a.min(axis=None)`|最小值\n",
"|`a.max(axis=None)`|最大值\n",
"|`a.argmin(axis=None)`|最小值索引\n",
"|`a.argmax(axis=None)`|最大值索引\n",
"|`a.ptp(axis=None)`|最大值减最小值\n",
"|`a.mean(axis=None)`|平均值\n",
"|`a.std(axis=None)`|标准差\n",
"|`a.var(axis=None)`|方差\n",
"|`a.any(axis=None)`|只要有一个不为0,返回真,逻辑或\n",
"|`a.all(axis=None)`|所有都不为0,返回真,逻辑与"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from numpy import *"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 基本属性"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 1, 2, 3],\n",
" [4, 5, 6, 7]])"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array([[0, 1, 2, 3], [4, 5, 6, 7]])\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"数组元素属性:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"dtype('int32')"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.dtype"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"形状:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"(2L, 4L)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"元素数目:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"8"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.size"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"元素占字节大小:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.itemsize"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"所有元素所占字节:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"32"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.nbytes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"数据维度:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.ndim"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 形状相关"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0 1 2 3]\n",
"[4 5 6 7]\n"
]
}
],
"source": [
"for row in a:\n",
" print row"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"所有元素的迭代器:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0\n",
"1\n",
"2\n",
"3\n",
"4\n",
"5\n",
"6\n",
"7\n"
]
}
],
"source": [
"for elt in a.flat:\n",
" print elt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"所有元素组成的一维数组,按照行排列:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 1, 2, 3, 4, 5, 6, 7])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.flatten()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 1, 2, 3, 4, 5, 6, 7])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.ravel()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"重新改变形状:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 1],\n",
" [2, 3],\n",
" [4, 5],\n",
" [6, 7]])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.resize((4,2))\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"交换这两个轴的顺序:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 2, 4, 6],\n",
" [1, 3, 5, 7]])"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.swapaxes(0,1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"转置:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 2, 4, 6],\n",
" [1, 3, 5, 7]])"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.transpose()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"转置:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 2, 4, 6],\n",
" [1, 3, 5, 7]])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.T"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(3L,)"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a2 = array([1,2,3])\n",
"a2.shape"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1L, 3L, 1L)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a2.resize((1,3,1))\n",
"a2.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"去除长度为1的维度:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(3L,)"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a2 = a2.squeeze()\n",
"a2.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 填充复制"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"复制:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 1],\n",
" [2, 3],\n",
" [4, 5],\n",
" [6, 7]])"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b = a.copy()\n",
"b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"复制不影响原来的数组:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[-1, 1],\n",
" [ 2, 3],\n",
" [ 4, 5],\n",
" [ 6, 7]])"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b[0][0] = -1\n",
"b # First value changed"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 1],\n",
" [2, 3],\n",
" [4, 5],\n",
" [6, 7]])"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a # original not changed because b is a copy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"填充:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[4, 4],\n",
" [4, 4],\n",
" [4, 4],\n",
" [4, 4]])"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b.fill(4)\n",
"b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 转化"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"转化为列表:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[[0, 1], [2, 3], [4, 5], [6, 7]]"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.tolist()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"转化为字符串:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"'\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x04\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x06\\x00\\x00\\x00\\x07\\x00\\x00\\x00'"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.tostring()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"改变数组元素类型:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0., 1.],\n",
" [ 2., 3.],\n",
" [ 4., 5.],\n",
" [ 6., 7.]])"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.astype(float)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 16777216],\n",
" [ 33554432, 50331648],\n",
" [ 67108864, 83886080],\n",
" [100663296, 117440512]])"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b = a.copy()\n",
"b.byteswap(False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"将它看成16位整数:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 0, 1, 0],\n",
" [2, 0, 3, 0],\n",
" [4, 0, 5, 0],\n",
" [6, 0, 7, 0]], dtype=int16)"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.view(dtype=int16)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 复数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"实部:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1., 3., 5.])"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b = array([1+2j, 3+4j, 5+6j])\n",
"b.real"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"虚部:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 2., 4., 6.])"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b.imag"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"共轭:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1.-2.j, 3.-4.j, 5.-6.j])"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b.conj()"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1.-2.j, 3.-4.j, 5.-6.j])"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b.conjugate()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 保存"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"保存成文本:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a.dump(\"file.txt\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"字符串:"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"'\\x80\\x02cnumpy.core.multiarray\\n_reconstruct\\nq\\x01cnumpy\\nndarray\\nq\\x02K\\x00\\x85U\\x01b\\x87Rq\\x03(K\\x01\\x8a\\x01\\x04\\x8a\\x01\\x02\\x86cnumpy\\ndtype\\nq\\x04U\\x02i4K\\x00K\\x01\\x87Rq\\x05(K\\x03U\\x01"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"from mpl_toolkits.mplot3d import Axes3D\n",
"from matplotlib import cm\n",
"\n",
"def f(x, y):\n",
" # sinc 函数\n",
" r = np.sqrt(x ** 2 + y ** 2)\n",
" result = np.sin(r) / r\n",
" result[r == 0] = 1.0\n",
" return result\n",
"\n",
"x_ticks = np.linspace(-10, 10, 51)\n",
"y_ticks = np.linspace(-10, 10, 51)\n",
"\n",
"x, y = np.meshgrid(x_ticks, y_ticks)\n",
"\n",
"z = f(x, y)\n",
"\n",
"fig = plt.figure()\n",
"ax = fig.add_subplot(111, projection='3d')\n",
"ax.plot_surface(x, y, z,\n",
" rstride=1, cstride=1,\n",
" cmap=cm.YlGnBu_r)\n",
"ax.set_xlabel('x')\n",
"ax.set_ylabel('y')\n",
"ax.set_zlabel('z')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"事实上,`x, y` 中有很多冗余的元素,这里提供了一个 `sparse` 的选项: "
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x_ticks = np.linspace(-1, 1, 5)\n",
"y_ticks = np.linspace(-1, 1, 5)\n",
"\n",
"x, y = np.meshgrid(x_ticks, y_ticks, sparse=True)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[-1. , -0.5, 0. , 0.5, 1. ]])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[-1. ],\n",
" [-0.5],\n",
" [ 0. ],\n",
" [ 0.5],\n",
" [ 1. ]])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在这个选项下,`x, y` 变成了单一的行向量和列向量。\n",
"\n",
"但这并不影响结果:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Miniconda\\lib\\site-packages\\IPython\\kernel\\__main__.py:9: RuntimeWarning: invalid value encountered in divide\n"
]
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x_ticks = np.linspace(-10, 10, 51)\n",
"y_ticks = np.linspace(-10, 10, 51)\n",
"\n",
"x, y = np.meshgrid(x_ticks, y_ticks, sparse=True)\n",
"\n",
"z = f(x, y)\n",
"\n",
"fig = plt.figure()\n",
"ax = fig.add_subplot(111, projection='3d')\n",
"ax.plot_surface(x, y, z,\n",
" rstride=1, cstride=1,\n",
" cmap=cm.YlGnBu_r)\n",
"ax.set_xlabel('x')\n",
"ax.set_ylabel('y')\n",
"ax.set_zlabel('z')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`meshgrid` 可以设置轴排列的先后顺序:\n",
"- 默认为 `indexing='xy'` 即笛卡尔坐标,对于2维数组,返回行向量 `x` 和列向量 `y`\n",
"- 或者使用 `indexing='ij'` 即矩阵坐标,对于2维数组,返回列向量 `x` 和行向量 `y`。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ogrid , mgrid"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Matlab**中有 `meshgrid` 的用法:"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
" meshgrid(-1:.5:1, -1:.5:1)\n",
"\n",
"**Numpy**的 `meshgrid` 并不支持这样的用法,但我们可以使用 `ogrid / mgrid` 来实现类似这样的用法。\n",
"\n",
"`ogrid` 与 `mgrid` 的区别在于:\n",
"- `ogrid` 相当于 `meshgrid(indexing='ij', sparse=True)`\n",
"- `mgrid` 相当于 `meshgrid(indexing='ij', sparse=False)`"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"x, y = np.ogrid[-1:1:.5, -1:1:.5]"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[-1. ],\n",
" [-0.5],\n",
" [ 0. ],\n",
" [ 0.5]])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[-1. , -0.5, 0. , 0.5]])"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"注意:\n",
"- 这里使用的是中括号\n",
"- **Matlab** 使用的是 `start:step:end` 的表示,**Numpy** 使用的是 `start:end:step` 的表示\n",
"- 这里的结果不包括 `end` 的值\n",
"\n",
"为了包含 `end` 的值,我们可以使用这样的技巧:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x, y = np.ogrid[-1:1:5j, -1:1:5j]"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(array([[-1. ],\n",
" [-0.5],\n",
" [ 0. ],\n",
" [ 0.5],\n",
" [ 1. ]]), array([[-1. , -0.5, 0. , 0.5, 1. ]]))"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x, y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我们在 `step` 的位置传入一个复数 `5j` ,表示我们需要一个 `5` 个值的数组,此时返回值就会包含 `end` 的值。\n",
"\n",
"重复之前的画图:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Miniconda\\lib\\site-packages\\IPython\\kernel\\__main__.py:9: RuntimeWarning: invalid value encountered in divide\n"
]
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# exchange here\n",
"y, x = np.ogrid[-10:10:51j, -10:10:51j]\n",
"\n",
"z = f(x, y)\n",
"\n",
"fig = plt.figure()\n",
"ax = fig.add_subplot(111, projection='3d')\n",
"ax.plot_surface(x, y, z,\n",
" rstride=1, cstride=1,\n",
" cmap=cm.YlGnBu_r)\n",
"ax.set_xlabel('x')\n",
"ax.set_ylabel('y')\n",
"ax.set_zlabel('z')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里,我们交换了 `x, y` 输出值的顺序。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## r`_` , c`_`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我们可以使用 `r_ / c_` 来产生行向量或者列向量。\n",
"\n",
"使用切片产生:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.r_[0:1:.1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"复数步长制定数组长度:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0. , 0.25, 0.5 , 0.75, 1. ])"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.r_[0:1:5j]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"连接多个序列,产生数组:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 3., 22., 11., 4., 15., 6.])"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.r_[(3,22,11), 4.0, [15, 6]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"列向量:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1. ],\n",
" [ 1.5],\n",
" [ 2. ],\n",
" [ 2.5],\n",
" [ 3. ]])"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.c_[1:3:5j]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ones , zeros"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```python\n",
"ones(shape, dtype=float64)\n",
"zeros(shape, dtype=float64)\n",
"```\n",
"\n",
"产生一个制定形状的全 `0` 或全 `1` 的数组,还可以制定数组类型:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0., 0., 0.])"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.zeros(3)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1., 1., 1.],\n",
" [ 1., 1., 1.]], dtype=float32)"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.ones([2,3], dtype=np.float32)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"产生一个全是 `5` 的数组:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 5., 5., 5.],\n",
" [ 5., 5., 5.]])"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.ones([2,3]) * 5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## empty"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" empty(shape, dtype=float64, order='C')\n",
"\n",
"也可以使用 `empty` 方法产生一个制定大小的数组(数组所指向的内存未被初始化,所以值随机),再用 `fill` 方法填充:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([-0.03412165, 0.05516321])"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.empty(2)\n",
"a"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 5., 5.])"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.fill(5)\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"另一种替代方法使用索引,不过速度会稍微慢一些:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 5., 5.])"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[:] = 5\n",
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## empty`_`like, ones`_`like, zeros`_`like"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" empty_like(a)\n",
" ones_like(a)\n",
" zeros_like(a)\n",
"\n",
"产生一个跟 `a` 大小一样,类型一样的对应数组。"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0. , 2.5, 5. , 7.5])"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.arange(0, 10, 2.5)\n",
"a"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0., 0., 0., 0.])"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.empty_like(a)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0., 0., 0., 0.])"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.zeros_like(a)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1., 1., 1., 1.])"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.ones_like(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## identity"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" indentity(n, dtype=float64)\n",
"产生一个 `n` 乘 `n` 的单位矩阵:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1., 0., 0.],\n",
" [ 0., 1., 0.],\n",
" [ 0., 0., 1.]])"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.identity(3)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.12-matrix-object.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 矩阵"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `mat` 方法将 `2` 维数组转化为矩阵:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"matrix([[1, 2, 4],\n",
" [2, 5, 3],\n",
" [7, 8, 9]])"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"a = np.array([[1,2,4],\n",
" [2,5,3], \n",
" [7,8,9]])\n",
"A = np.mat(a)\n",
"A"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"也可以使用 **Matlab** 的语法传入一个字符串来生成矩阵:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"matrix([[1, 2, 4],\n",
" [2, 5, 3],\n",
" [7, 8, 9]])"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A = np.mat('1,2,4;2,5,3;7,8,9')\n",
"A"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"利用分块创造新的矩阵:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"matrix([[ 1, 2, 10, 20],\n",
" [ 3, 4, 30, 40],\n",
" [10, 20, 1, 2],\n",
" [30, 40, 3, 4]])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([[ 1, 2],\n",
" [ 3, 4]])\n",
"b = np.array([[10,20], \n",
" [30,40]])\n",
"\n",
"np.bmat('a,b;b,a')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"矩阵与向量的乘法:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[1],\n",
" [2],\n",
" [3]])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = np.array([[1], [2], [3]])\n",
"x"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"matrix([[17],\n",
" [21],\n",
" [50]])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A * x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`A.I` 表示 `A` 矩阵的逆矩阵:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 1.00000000e+00 0.00000000e+00 0.00000000e+00]\n",
" [ 0.00000000e+00 1.00000000e+00 2.08166817e-17]\n",
" [ 2.22044605e-16 -8.32667268e-17 1.00000000e+00]]\n"
]
}
],
"source": [
"print A * A.I"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"矩阵指数表示矩阵连乘:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 6497 9580 9836]\n",
" [ 7138 10561 10818]\n",
" [18434 27220 27945]]\n"
]
}
],
"source": [
"print A ** 4"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.13-general-functions.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 一般函数"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 三角函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" sin(x)\n",
" cos(x)\n",
" tan(x)\n",
" sinh(x)\n",
" conh(x)\n",
" tanh(x)\n",
" arccos(x)\n",
" arctan(x)\n",
" arcsin(x)\n",
" arccosh(x)\n",
" arctanh(x)\n",
" arcsinh(x)\n",
" arctan2(x,y)\n",
"\n",
"`arctan2(x,y)` 返回 `arctan(x/y)` 。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 向量操作"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" dot(x,y)\n",
" inner(x,y)\n",
" cross(x,y)\n",
" vdot(x,y)\n",
" outer(x,y)\n",
" kron(x,y)\n",
" tensordot(x,y[,axis])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 其他操作"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" exp(x)\n",
" log(x)\n",
" log10(x)\n",
" sqrt(x)\n",
" absolute(x)\n",
" conjugate(x)\n",
" negative(x)\n",
" ceil(x)\n",
" floor(x)\n",
" fabs(x)\n",
" hypot(x)\n",
" fmod(x)\n",
" maximum(x,y)\n",
" minimum(x,y)\n",
"\n",
"`hypot` 返回对应点 `(x,y)` 到原点的距离。"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 4.12310563, 5.38516481, 6.70820393])"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = np.array([1,2,3])\n",
"y = np.array([4,5,6])\n",
"np.hypot(x,y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 类型处理"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" iscomplexobj\n",
" iscomplex\n",
" isrealobj\n",
" isreal\n",
" imag\n",
" real\n",
" real_if_close\n",
" isscalar\n",
" isneginf\n",
" isposinf\n",
" isinf\n",
" isfinite\n",
" isnan\n",
" nan_to_num\n",
" common_type\n",
" typename\n",
"\n",
"正无穷:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"inf"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.inf"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"负无穷:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-inf"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"-np.inf"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"非法值(Not a number):"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"nan"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.nan"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"检查是否为无穷:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.isinf(1.0)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.isinf(np.inf)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.isinf(-np.inf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"非法值:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Miniconda\\lib\\site-packages\\IPython\\kernel\\__main__.py:1: RuntimeWarning: invalid value encountered in divide\n",
" if __name__ == '__main__':\n"
]
},
{
"data": {
"text/plain": [
"array([ nan])"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.array([0]) / 0.0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这并不会报错,而是返回一个非法值。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"只有 `0/0` 会得到 `nan`,非0值除以0会得到无穷:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Miniconda\\lib\\site-packages\\IPython\\kernel\\__main__.py:2: RuntimeWarning: divide by zero encountered in divide\n",
" from IPython.kernel.zmq import kernelapp as app\n",
"c:\\Miniconda\\lib\\site-packages\\IPython\\kernel\\__main__.py:2: RuntimeWarning: invalid value encountered in divide\n",
" from IPython.kernel.zmq import kernelapp as app\n"
]
},
{
"data": {
"text/plain": [
"array([ nan, inf, inf, inf, inf])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.arange(5.0)\n",
"b = a / 0.0\n",
"b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`nan` 与任何数进行比较都是 `False`:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([False, False, False, False, False], dtype=bool)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b == np.nan"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"想要找出 `nan` 值需要使用 `isnan`:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ True, False, False, False, False], dtype=bool)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.isnan(b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 修改形状"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" atleast_1d\n",
" atleast_2d\n",
" atleast_3d\n",
" expand_dims\n",
" apply_over_axes\n",
" apply_along_axis\n",
" hstack\n",
" vstack\n",
" dstack\n",
" column_stack\n",
" hsplit\n",
" vsplit\n",
" dsplit\n",
" split\n",
" squeeze"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 其他有用函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" fix\n",
" mod\n",
" amax\n",
" amin\n",
" ptp\n",
" sum\n",
" cumsum\n",
" prod\n",
" cumprod\n",
" diff\n",
" angle\n",
"\n",
" unwrap\n",
" sort_complex\n",
" trim_zeros\n",
" fliplr\n",
" flipud\n",
" rot90\n",
" diag\n",
" eye\n",
" select\n",
" extract\n",
" insert\n",
"\n",
" roots\n",
" poly\n",
" any\n",
" all\n",
" disp\n",
" unique\n",
" nansum\n",
" nanmax\n",
" nanargmax\n",
" nanargmin\n",
" nanmin\n",
"\n",
"`nan` 开头的函数会进行相应的操作,但是忽略 `nan` 值。"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.14-vectorizing-functions.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 向量化函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"自定义的 `sinc` 函数:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import numpy as np\n",
"\n",
"def sinc(x):\n",
" if x == 0.0:\n",
" return 1.0\n",
" else:\n",
" w = np.pi * x\n",
" return np.sin(w) / w"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"作用于单个数值:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1.0"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sinc(0.0)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"3.8981718325193755e-17"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sinc(3.0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"但这个函数不能作用于数组:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "ValueError",
"evalue": "The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0marray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0msinc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m\u001b[0m in \u001b[0;36msinc\u001b[1;34m(x)\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0msinc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[1;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;36m0.0\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 5\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[1;36m1.0\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mValueError\u001b[0m: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()"
]
}
],
"source": [
"x = np.array([1,2,3])\n",
"sinc(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以使用 `numpy` 的 `vectorize` 将函数 `sinc` 向量化,产生一个新的函数:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 3.89817183e-17, -3.89817183e-17, 3.89817183e-17])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"vsinc = np.vectorize(sinc)\n",
"vsinc(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"其作用是为 `x` 中的每一个值调用 `sinc` 函数:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEACAYAAAC9Gb03AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmYVNWZx/HvK4iKG6IRVEBEoQUUFwxxSUy5hnHNTBId\nR4lxmRAUNY4muGS0jUviGowatxFikploXJJRx11pExU3VmVHUEBBkcWIYlj6nT9OtbZt7/fWvbdu\n/T7Pw2NV16lz3rK73jp1tmvujoiI5NcGaQcgIiKlpUQvIpJzSvQiIjmnRC8iknNK9CIiOadELyKS\nc5ETvZmNMbP3zOz1Jh4/0cymmNlUM3vBzAZFbVNERFovjh79WGBoM4/PAw5090HA5cAdMbQpIiKt\nFDnRu/vfgBXNPD7e3T8s3n0Z6BG1TRERab2kx+hPAx5NuE0RkYrWMamGzOwg4FTggKTaFBGRhBJ9\ncQL2TmCouzc6zGNmOnRHRKQd3N2ae7zkQzdm1gt4EDjJ3ec2V9bdc/vv0ksvTT0GvTa9Pr2+/P1r\njcg9ejP7I/BNYBszWwhcCmxYTNy3A5cAWwG3mhnAWncfErVdERFpnciJ3t1PaOHx04HTo7YjIiLt\no52xCSkUCmmHUDJ5fm2g11fu8v76WsNaO8ZTambmWYlFRKRcmBme9mSsiIikS4leRCTnlOhFRHJO\niV5EJOeU6EVEck6JXkQk55ToRURyToleRCTnlOhFRHJOiV5EJOeU6EVEck6JXkQk55ToRURyTole\nRCTnlOhFRHJOiV5EJOeU6EVEci5yojezMWb2npm93kyZX5vZHDObYmZ7RW1TRERaL44e/VhgaFMP\nmtkRwC7u3hf4IXBrDG2KiEgrRU707v43YEUzRY4B7i6WfRnoYmbdorYrIiKtk8QY/Q7Awnr3FwE9\nEmhXRERIbjK24RXKPaF2Rdpt3To47zzo3x+mT087GpH265hAG+8APevd71H82ZdUV1d/drtQKFAo\nFEoZl0iTVqyA448Pt88+GwoFGDMGjjoq1bBEqKmpoaampk3PMffonWsz6w087O67N/LYEcBIdz/C\nzPYFRrv7vo2U8zhiEYnqo49g8OCQ1K+5Bjp2hJdegu98J9w/8cS0IxT5nJnh7g1HTb5YJmpyNbM/\nAt8EtgHeAy4FNgRw99uLZW4mrMz5GDjF3Sc2Uo8SvWTCbbfBE0/An//8xZ8//zyceirMnAkbaAeK\nZEQiiT4uSvSSBe4waBCMHg2HHPLlx/bcE667Dg47LJ34RBpqTaJXv0Sknuefh7Vr4eCDv/yYGZxx\nBvzmN8nHJRKFevQi9ZxwAuy3X5iAbcyqVbDjjjB5MvTs2XgZkSRp6EakDZYsCUsp58+HLl2aLnf2\n2bDllnD55cnFJtIUJXqRNrjiCliwAO64o/lyM2aEoZ2334ZOnZKJTaQpGqMXaSX3sE5++PCWy/bv\nD1VV8OijpY9LJA5K9CKE4ZrVq2HvvVtX/sgj4emnSxuTSFyU6EWAZ54JwzHW7Bfgzx18cHiOSDlQ\nohcBnn32y+vmm7PnnvDee/Duu6WLSSQuSvRS8dxDom9s7XxTOnQI5988+2zJwhKJjRK9VLxp02Cz\nzaB377Y975BDlOilPCjRS8Vra2++Tt04vVYFS9Yp0UvFq5uIbatddw3HJcybF39MInFSopeKtm4d\nPPdc+xK9WXiehm8k65TopaJNnAg9ekC3dl7FWMsspRwo0UtFa+uyyobqJmQ1Ti9ZpkQvFe1vf4MD\nD2z/83fcETp3htmz44tJJG5K9FLRJk6EffaJVsfgwaEekaxSopeKtXhxWDXTq1e0egYPhgkT4olJ\npBSU6KViTZgQDjFr7fk2Tdl7b/XoJdsiJ3ozG2pmM81sjpmNauTxbczscTObbGZvmNkPorYpEoeJ\nE0NvPKq6RK8JWcmqSInezDoANwNDgQHACWbWv0GxkcAkd98TKADXm1nHKO2KxKGuRx/VttvC5ptr\n45RkV9Qe/RBgrru/5e5rgXuAYxuUWQxsUby9BbDM3ddFbFcksokT40n0oAlZybaoiX4HYGG9+4uK\nP6vvTmCgmb0LTAHOidimSGTvvw8ffQR9+sRT3957a0JWsivqEEprRiUvAia7e8HMdgaeMrM93P2j\nhgWrq6s/u10oFCgUChHDE2lcXW8+6kRsncGD4cYb46lLpDk1NTXU1NS06TmRLg5uZvsC1e4+tHj/\nQqDW3a+uV+ZR4Ep3f6F4/xlglLu/1qAuXRxcEnPVVbBiBVx7bTz1LV4Mu+0GH3wQ34eHSGskcXHw\n14C+ZtbbzDoBxwMPNSgzEzi0GFA3oArQtJWkKq6J2DrbbQcbbQQLFsRXp0hcIiX64qTqSOAJYDpw\nr7vPMLPhZja8WOwqYB8zmwI8DfzU3ZdHaVckqjgnYutonF6yKtLQTZw0dCNJWb48XE1q5UrYIMYt\ng5deCuvXwxVXxFenSEuSGLoRKTsTJ4aLe8eZ5EE9eskuJXqpOJMmwV57xV/v3nuHukWyRoleKs60\naWGFTNx69IDVq2HZsvjrFolCiV4qzvTpMHBg/PWawYABoX6RLFGil4pSWwszZoSEXAoDBoRvDCJZ\nokQvFWXhQthiC+jSpTT1DxyoHr1kjxK9VJRp00ozbFNHPXrJIiV6qSjTppVu2AbUo5dsUqKXilKq\nidg6PXrAxx+HTVkiWaFELxWl1EM3WnkjWaRELxXDvbQrbuoMHKhxeskWJXqpGAsWlHbFTR316CVr\nlOilYpR6IraOevSSNUr0UjFKPRFbRz16yRoleqkYpZ6IrdOzJ6xaFa5gJZIFSvRSMaZPT2boxgz6\n99fwjWSHEr1UBPfkEj1o45RkixK9VIQFC2DzzWGrrZJpT0chSJYo0UtFSGL9fH0DBoQ2RbIgcqI3\ns6FmNtPM5pjZqCbKFMxskpm9YWY1UdsUaatZs6CqKrn2qqpCmyJZ0DHKk82sA3AzcCjwDvCqmT3k\n7jPqlekC3AJ8y90Xmdk2UdoUaY/Zs5NN9L17w3vvhStObbJJcu2KNCZqj34IMNfd33L3tcA9wLEN\nyvwb8IC7LwJw9w8itinSZrNmQb9+ybXXoQP06QNz5iTXpkhToib6HYCF9e4vKv6svr5AVzMbZ2av\nmdmwiG2KtFnSQzeg4RvJjkhDN4C3osyGwN7AIUBnYLyZveTuX+rrVFdXf3a7UChQKBQihicSjg3+\n4APo1SvZdpXopRRqamqoqalp03OiJvp3gJ717vck9OrrWwh84O6rgdVm9ldgD6DZRC8SlzlzYJdd\nwnBKkqqq4Nlnk21T8q9hJ/iyyy5r8TlRh25eA/qaWW8z6wQcDzzUoMz/Al83sw5m1hn4GqCtJJKY\npMfn6/TrFyaBRdIWqUfv7uvMbCTwBNABuMvdZ5jZ8OLjt7v7TDN7HJgK1AJ3ursSvSQmjfF5+Hzo\nxj0ciyCSFnNvzTB76ZmZZyUWyZcTT4TDD4eTT06+7a23DkchdOuWfNtSGcwMd2+2K6GdsZJ7Sa+h\nr08TspIFSvSSa+7pjdFDaFeJXtKmRC+5tmQJbLQRdO2aTvtVVZqQlfQp0UuupTlsAxq6kWxQopdc\nS2vFTR0leskCJXrJtbQT/S67wNtvw9q16cUgokQvuZbmRCyE+YHtt4d589KLQUSJXnIt7TF60ISs\npE+JXnJrzZpwCcGdd043Do3TS9qU6CW35s+HHj2gU6d049CZN5I2JXrJrTlzoG/ftKMIMegCJJIm\nJXrJrdmz052IraMevaRNiV5yKys9+p49YfnycAEUkTQo0UtuzZ6djUS/wQZhQnju3LQjkUqlRC+5\nNWdONoZuIHzgaPhG0qJEL7n0ySfw/vvJXye2Kf36aUJW0qNEL7n05pvQp0/y14ltinr0kiYlesml\nrIzP11GPXtKkRC+5lKXxeVCPXtIVOdGb2VAzm2lmc8xsVDPlvmpm68zsX6K2KdKSrPXou3eHTz+F\nFSvSjkQqUaREb2YdgJuBocAA4AQz699EuauBx4FmL2IrEoes9ejNtENW0hO1Rz8EmOvub7n7WuAe\n4NhGyp0F3A8sjdieSKtkrUcPGqeX9ERN9DsAC+vdX1T82WfMbAdC8r+1+COP2KZIsz78EFatCufA\nZ4nG6SUtHSM+vzVJezRwgbu7mRnNDN1UV1d/drtQKFAoFCKGJ5Wo7ugDy9ggYb9+8NhjaUch5a6m\npoaampo2Pcfc29/BNrN9gWp3H1q8fyFQ6+5X1yszj8+T+zbAJ8C/u/tDDeryKLGI1PnjH+HBB+G+\n+9KO5IteegnOOgtefTXtSCRPzAx3b7ZbE7VH/xrQ18x6A+8CxwMn1C/g7n3qBTQWeLhhkheJU1ZO\nrWyo7hRL9+x925B8izRG7+7rgJHAE8B04F53n2Fmw81seBwBirRVVk6tbKhrV+jYEZZqSYIkLGqP\nHnd/DHiswc9ub6LsKVHbE2nJ7NkwYkTaUTSurle/7bZpRyKVRDtjJVfcs3FB8KboIiSSBiV6yZWl\nS8P571tvnXYkjVOilzQo0Uuu1E3EZnWyU4le0qBEL7mS5WEbUKKXdCjRS67MmpXNpZV1+vYNZ+Wv\nX592JFJJlOglV7K6hr5O587wla/AggVpRyKVRIleciXriR40fCPJU6KX3Fi/HubNy+ZmqfqU6CVp\nSvSSGwsWhGGRzp3TjqR5SvSSNCV6yY2sT8TWqaoKsYokRYlecqMcxudBPXpJnhK95EbW19DX2XFH\nWLIEVq9OOxKpFEr0khvl0qPv2BF22imspxdJghK95Ea5JHrQ8I0kS4lecmH16jAcsuOOaUfSOv36\naUJWkqNEL7kwd24YDukY+QoLyaiqUo9ekqNEL7lQLhOxdTR0I0lSopdcKKfxeVCil2Qp0UsulMtm\nqTrdusGaNbBsWdqRSCWInOjNbKiZzTSzOWY2qpHHTzSzKWY21cxeMLNBUdsUaWjGDOjfP+0oWs8M\ndt0VZs5MOxKpBJESvZl1AG4GhgIDgBPMrOHbbR5woLsPAi4H7ojSpkhD7uWX6CHEO3162lFIJYja\nox8CzHX3t9x9LXAPcGz9Au4+3t0/LN59GegRsU2RL3jnHdhkE+jaNe1I2qZ///ABJVJqURP9DsDC\nevcXFX/WlNOARyO2KfIF5dibByV6SU7UVcfe2oJmdhBwKnBAU2Wqq6s/u10oFCgUChFCk0pRrol+\nwAAlemm7mpoaampq2vQcc291rv7yk832BardfWjx/oVArbtf3aDcIOBBYKi7z22iLo8Si1SuESNC\noj/77LQjaZv162HzzWHpUth007SjkXJlZri7NVcm6tDNa0BfM+ttZp2A44GHGgTRi5DkT2oqyYtE\nUa49+g4dYJdddBSClF6kRO/u64CRwBPAdOBed59hZsPNbHix2CXAVsCtZjbJzF6JFLFIA+Wa6EHj\n9JKMSEM3cdLQjbTH8uXQuzd8+GFYm15uqqth3Tq44oq0I5FylcTQjUiq6nrz5ZjkQT16SYYSvZS1\nch62ASV6SYYSvZS16dPLO9H36wfz5sHatWlHInmmRC9lrdx79BtvDD17hvP0RUqlTC7TIKVWWwuv\nvBIu3LHllrDddrDZZmlH1bJyT/Tw+fBN1l+HOyxaBCtWhMnvqirYdtu0o5LWUKIXnnkGRo2CVavC\nxp0PP4S//x1uvhmOOy7t6Jr28cfw3nvhylLlrBzG6d99F37wA5g8OST3LbYI6/9HjoTzzw8bvyS7\nNHRTwT79FL7zHfjhD+GnPw3JZsKEMIzw6KPws5/BySeHpJ9Fs2aFDUflcvnApmQ90f/lL7D33nDA\nASHhv/EGvPhi+FuZNy/MMzz3XNpRSnOU6CvU2rWht96xY0gyxx33xSWK++wDkyaFnx19dFjrnTXl\nMNzRGlk+rviBB+Css+DBB+HSS7/4odq7N/z+9+Hf974HL7+cWpjSAiX6CrR+PQwbFsZc//AH6NSp\n8XKbbgp33RUe//nPk42xNaZOhd13TzuK6AYODBcgydqH6fz54RyhBx+E/fdvutyhh8LYsXDMMeF3\nItmjRF+B/uM/wkFa990HG27YfNkOHUKP7b/+K4zlZ8mUKbDHHmlHEd1mm8EOO2TrGrJr1sC//itc\neCF89astlz/ySLjpJhg6NFwfQLJFib7CPPoo/O//hq/kG2/cuud07x6S/fe/HyY/s2Lq1Hwkegiv\nI0u94YsuCpOuP/5x659z3HHwox/BKaeEVVySHUr0FWTpUjj9dLj7bujSpW3PPeQQOOEEuOSS0sTW\nVkuXwiefQK9eaUcSjz32CN9QsmDaNPjd7+C3v2370RIXXQQffRRWbEl2lPl6heQsXgzjx8NGG4U1\n5r16wTbbpB1V67mH1TUnnQTf/Gb76rjoorB2+ic/Catd0jRlCgwaVL5n3DQ0aBDcfnvaUQSXXBJW\nYW29dduf27Fj+Pa3336hczBwYPzxlcqaNWFeYvHi8M21Tx/Ya6/yX9UFSvTNWrECrrkmDHMsWxb+\neGtrwx/C/Plw0EFw7rnwjW9kP+H84Q9hKdw997S/jq5dw1f5Sy+F//7v+GJrj7yMz9fJSo/+1Vfh\npZfC30t77bILXHVVmPCv24SXZUuXwm23wW9+E+ZLttsuDFvNmgULFoT396hR4b9ly90z8S+Ekg3/\n+If7DTe4f+Ur7v/+7+6TJ7uvX//FMqtWuf/mN+59+7ofeKD7ggXpxNoay5a5d+vm/tpr0ev66KNQ\n15Qp0euKYtgw9zvvTDeGONXWum+5pfvSpenGcfjh7rfeGr2e2lr3gw5yv/HG6HWVSm2t+7XXunfp\n4n7aae5vvPHlMkuXuo8Z477jju7HHus+Y0biYbaomDubz68tFUjqX1YS/YIF7kOGuH/rW43/4hta\nv979l78Mye/JJ0sfX3v86EfuZ5wRX32/+pX7McfEV1977LGH+yuvpBtD3L7xDfdnnkmv/XHj3Pv0\nCR2dOEyf7r7NNu7vvhtPfXFascL9298O7/W33mq5/OrV7tdcE17P2LElD69NlOjbaNw49+7d3a++\nOnzat/W522/vfv31pYis/V55Jbym5cvjq3P1avcePdwnToyvzrb4xz/cN9nE/ZNP0mm/VEaODN8k\n03LQQe533x1vnRdc4P5v/xZvnVG9+ab7LruE/9+fftq2506b5t6vn/uIEfF9IEalRN8GY8dG75Uv\nXOi+887pvlnrW7fOffBg99/9Lv66f/EL91NOib/e1pgyxX3XXdNpu5TuvNP95JPTaXvq1NBRWbMm\n3npXrQrDHs8+G2+97fXWW+69e7vfckv761i5MgzjHHig+4cfxhdbe7Um0Wt5JWGjxyWXQE0NHHZY\n++vp0QOefRZ+/Wu45ZbYwmu3O++Ezp3DSpu4nX46/PnPYSIraXmbiK2T5oTsTTeFNfAtbaBrq003\nhdGj4cwz0z9z/513wkqgc86BM85ofz1bbhl2Cw8YEOpbtiy+GEumpU+Clv4BQ4GZwBxgVBNlfl18\nfAqwVxNlSvy517grrwy98Pnz46tz3jz3Xr3cf//7+Opsqw8+cN922zCRXCqnnOJ+1VWlq78p550X\nfm958/HHYUgq7l51S5YtCxOSS5aUpv7a2jDJm+Y33eXL3auqwnxaXGpr3X/6U/eBA9Odh6DUQzdA\nB2Au0BvYEJgM9G9Q5gjg0eLtrwEvNVFXyf+HNHTZZe79+5fml/TGG2HVzosvxl93a4wY4X7mmaVt\nY+JE95493deuLW07DR12mPsjjyTbZlKqqtxffz3ZNq+9NqxiKqUZM8JEZqk+TJqzZo37oYe6n3NO\n/HXX1rpffnn4vaWV7FuT6KMO3QwB5rr7W+6+FrgHOLZBmWOAu4uZ/GWgi5l1i9huZJdfHtaUjxsX\n1s3GbeDAsLPwO9+Bt9+Ov/7mTJ4c1v6X+iCyvfaCHXcMRyokKa9DN5D88M369WGY8ayzStvOrruG\n8+wvuKC07TTm3HPDWv7rrou/brNwnPewYWFfzeLF8bcRh6iJfgdgYb37i4o/a6lMj4jtRnLFFfA/\n/xPG07uV8CPniCPCRRmOOSZc1CMJtbXhTfvzn4cNTqV21llhTiIpS5aEUx53aPhXlhNJJ/pHHgnv\ngdYcXBbVf/4nPPlk2JCVlFtvDe/ze+4p7catiy8Oc2EHH5zNZB/1pXsryzXcN9ro86qrqz+7XSgU\nKBQK7QqqJdtsE3ry3buXpPovOPdceP11OO208MdW6h20Y8eGC4qcfnpp26nzz/8cJrdmzgy9tlJ7\n9VUYPDj7O5Hba/Bg+OUvk2vvjjuiTUy2xRZbwLXXwvDh8Npr8U/8NvS3v0F1NbzwQphALbWf/Swc\nG1Hqv82amhpqamra9BwLQzztY2b7AtXuPrR4/0Kg1t2vrlfmNqDG3e8p3p8JfNPd32tQl0eJJcs+\n/RS+/vVw7Ov555eunfffh912C72mPfcsXTsNjRoVztK55prSt3XRRSFBXHZZ6dtKw8qV4WLhK1aU\n/uiAd94J5/kvWhRWZyXBPRxlfMgh4TydUnn33fAt5a67Qnt5Zma4e7MfL1GHbl4D+ppZbzPrBBwP\nPNSgzEPA94sB7QusbJjk827jjcNyrOuvL+2Z7ueeGy79l2SSBzj11HDaYRLL5158sfmLYJS7Ll3C\ngXlJHFn829+Go4WTSvIQeru33ho6BfPmlaaNNWvgu98N31TynuRbK1Kid/d1wEjgCWA6cK+7zzCz\n4WY2vFjmUWCemc0FbgcS+qKYLb16hXmBE08szR/4E0+EJFhv9CsxVVXQty/83/+Vtp1168J1Sr/2\ntdK2k7b99w8npZZSbS2MGRM+pJPWp084AXXEiNDDj5N7uGB5t27hoilS1NKynKT+kYEjEJJw003u\nAwbEu6Nu2bKw+/Cxx+Krs63GjnU/+ujStjFhQvh/l3d33eV+4omlbWPcOPfddmv7UR9xWbMmnFd0\nxx3x1jt6tPvuu7v//e/x1ptlaGds9px5Jhx4YLiIx/r10etzD1f0+Zd/Sfdr6ve+B88/X9oVBy++\nGI6Kzrv99guvtZTuuissEEhrUnvDDcPihIsuim+Y6rHHwkT2ww/D5pvHU2deKNEnzCwsR/z003Dt\n1qhfXUePDksOk1yp0ZhNNw3jonffXbo2xo/P9/h8naqqMClbqss2rlwZkmEpjsZoi113hRtuCJ2E\njz6KVtfUqWF+6v77w94O+SIl+hRsuGH4g/zrX0OPpr3J/qWX4Be/CD2jTp3ijbE9TjstjPuWavHU\n+PGV0aPfYIMwD1Gqcfp77glnOmXhCmnDhoUVaT/6Ufv/bqZNg299K1y+8IAD4o0vL5ToU7LVVvDU\nU2EC89JL2/78CRPg2GNDYt1pp/jja48hQ8KH2PPPx1/3kiWhJ1pVFX/dWVTKCdm6YZusuOkmmD07\n7Mdoa7KfOTN8aF13XVhBJI1Tok/RNtvA00+H4wp+/OOwLKw1Xn4Z/umfwjVGjzqqtDG2hVlYxTFm\nTPx1jx8P++4beruVoFTj9FOnhnmUKKe0xq1z59DpeeWVsCSytrZ1z3v+eTj00PCt9sQTSxtjuauQ\nt012bbttGMKZPz/04ubMabqsO9x3Hxx9dNgB++1vJxdna510Uji+OOqYa0OVMmxTZ8gQmDSp9R/+\nrTV2bDhzpkOHeOuNqkuXsNHv9dfDcE5zx1+vWxc2zH33u+FaryefnFyc5UqJPgO23hr+8pewemb/\n/cMk7SuvfP41dv36sJ37gAPCRZcffBCOPDLdmJvSrVs43OlPf4q33kpL9FtsEdabx3nuzZo14aLu\np5wSX51x2mILePzx8H7o3z/8rf/9758//sEH4VvsfvuF98PEidn6RptlSvQZYRaWXr70UlgaNmxY\nuJBJ9+5hZ+2pp4YJqwkTwuRVlp16ahgHjssnn4QTOYcMia/OcnDAAeHbXlweeiicqrrzzvHVGbfN\nNgur0saPD99ounUL74dddglxjxsXDhB78knYfvu0oy0fkc66iVOez7ppD/ewg7ZzZ/jKV0p/7kmc\n1q0L57U8+2zomUX18MPh+Ig2nuNU9h56CH71q5Dc4nDEEWH/xrBh8dSXBPcwDLhkSTixdNNN044o\ne1pz1o0SvZTEqFEh4V9/ffS6fvjDsNrmvPOi11VOPvkkfKN7++2wSiuKBQvCGUhJHmAmyUjiUDOR\nRg0fHjZPffJJtHpqa8OZ6UcfHU9c5aRz57CL+vHHo9d1222hJ68kX5mU6KUk+vQJk2Z//GO0eiZO\nDGO0/frFE1e5OfroMHQVxaefhjmTpM6dl+xRopeSGTky7FaMMiL38MOV2Zuvc9RRoUcf5Qjo++4L\nV66qlM1m8mVK9FIyhx0GH38cbYdnpSf6HXYIO59feKH9ddxyS/jQlcqlRC8ls8EGYcnozTe37/mL\nFoWJyEo/v+SYY9o/fPPqq2HFSlb3XUgylOilpE4+OQw9tOf44kceCUc9lNPS0lKIMk5/yy1hbD5r\nO2ElWUr0UlJduoRzSK69tu3P/fOfK3vYps5ee4XVS9Omte158+aFD4gsHWAm6dA6eim5xYvDRcsn\nTQqXVGyNN94IY/zz5sEmm5Q2vnJw2WVhLXxbdhwPGxZ2lLbndFQpH9owJZlx8cVhrLi1ieqkk2D3\n3cPGK4Hly8N1eSdPDruOWzJ1Khx+eDgkT1dbyreSJ3oz6wrcC+wIvAUc5+4rG5TpCfwO2BZw4A53\n/3UjdSnR59jKlWEt/HPPtXwswrx54VybefPCQVcSnH9+2G08enTLZY8+Gg45JBx/LfmWRKK/BvjA\n3a8xs1HAVu5+QYMy3YHu7j7ZzDYDJgDfdvcZDcop0efctdeGQ9seeKD5ciNGQNeucOWVycRVLt59\nNwyBzZoVzj9qyvPPh3mRWbPCgXiSb0kcgXAMUHeV0LuBL52Q7u5L3H1y8fYqYAagc+cq0MiRYadr\nc7tlFy+Ge+8NVxuSL9p++3B91V9/6fvw51auDGcDXXmlkrx8LmqPfoW7b1W8bcDyuvtNlO8NPAcM\nLCb9+o+pR18Bpk4NVwW6//5wjkt9a9eGnuh228GNN6YTX9a9+WYY1nr66bAap741a2Do0DC3of9/\nlaM1PfrCT96EAAAF3ElEQVQWVyib2VNA90Yeurj+HXd3M2syUxeHbe4HzmmY5OtUV1d/drtQKFAo\nFFoKT8rMoEHh4hff+144a71uW/7HH4drfpqFS8NJ43beGe64I1wM+957w0VeIBwzcfrpsOWWcMMN\n6cYopVVTU0NNG8/sjtqjnwkU3H2JmW0HjHP3XRsptyHwCPCYuzc6laQefWUZMwZ+8pPQq99nn7A5\nqqoK7rwzXGBcmjduHBx/fNh5vHhxmPvYaKPwc51QWVmSmoxd5u5Xm9kFQJdGJmONMH6/zN3PbaYu\nJfoKM39+uGTihAlhcvH880OPXlpn8mS49dZw1ah99oHBg0Oyl8qS1PLKPwG9qLe80sy2B+509yPN\n7OvAX4GphOWVABe6++MN6lKiFxFpI22YEhHJOV1hSkRElOhFRPJOiV5EJOeU6EVEck6JXkQk55To\nRURyToleRCTnlOhFRHJOiV5EJOeU6EVEck6JXkQk55ToRURyToleRCTnlOhFRHJOiV5EJOeU6EVE\nck6JXkQk55ToRURyrt2J3sy6mtlTZjbbzJ40sy7NlO1gZpPM7OH2ticiIu0TpUd/AfCUu/cDnine\nb8o5wHQ+vzh4xampqUk7hJLJ82sDvb5yl/fX1xpREv0xwN3F23cD326skJn1AI4A/gto9gK2eZbn\nP7Y8vzbQ6yt3eX99rREl0Xdz9/eKt98DujVR7lfAT4DaCG2JiEg7dWzuQTN7CujeyEMX17/j7m5m\nXxqWMbOjgPfdfZKZFaIEKiIi7WPu7Rs2N7OZQMHdl5jZdsA4d9+1QZmrgGHAOmBjYAvgAXf/fiP1\nVez4vYhIFO7e7LB4lER/DbDM3a82swuALu7e5ISsmX0TON/dj25XgyIi0i5Rxuh/CRxmZrOBg4v3\nMbPtzez/mniOeu0iIglrd49eRETKQ6Z2xprZWWY2w8zeMLOr046nFMzsPDOrNbOuaccSJzO7tvi7\nm2JmD5rZlmnHFAczG2pmM81sjpmNSjueOJlZTzMbZ2bTiu+5s9OOKW553qxpZl3M7P7i+266me3b\nVNnMJHozO4iwNn+Qu+8GXJdySLEzs57AYcDbacdSAk8CA919D2A2cGHK8URmZh2Am4GhwADgBDPr\nn25UsVoLnOvuA4F9gTNz9vog35s1bwQedff+wCBgRlMFM5PogRHAL9x9LYC7L005nlK4Afhp2kGU\ngrs/5e51eyVeBnqkGU9MhgBz3f2t4t/lPcCxKccUG3df4u6Ti7dXERLF9ulGFZ88b9YsfmP+hruP\nAXD3de7+YVPls5To+wIHmtlLZlZjZvukHVCczOxYYJG7T007lgScCjyadhAx2AFYWO/+ouLPcsfM\negN7ET6k8yLPmzV3Apaa2Vgzm2hmd5pZ56YKN7thKm4tbMDqCGzl7vua2VeBPwF9kowvqhZe34XA\n4fWLJxJUjJp5fRe5+8PFMhcDa9z9fxINrjTy+HX/S8xsM+B+4Jxiz77sVcBmzY7A3sBId3/VzEYT\nzhu7pKnCiXH3w5p6zMxGAA8Wy71anLDc2t2XJRZgRE29PjPbjfAJPMXMIAxrTDCzIe7+foIhRtLc\n7w/AzH5A+Kp8SCIBld47QM9693sSevW5YWYbAg8Af3D3v6QdT4z2B44xsyMobtY0s981tlmzTC0i\njBC8Wrx/P80cLJmloZu/ENbjY2b9gE7llOSb4+5vuHs3d9/J3Xci/JL2Lqck3xIzG0r4mnysu3+a\ndjwxeQ3oa2a9zawTcDzwUMoxxcZCr+MuYLq7j047nji5+0Xu3rP4fvtX4NkcJXncfQmwsJgrAQ4F\npjVVPtEefQvGAGPM7HVgDZCbX0oj8jgkcBPQCXiq+K1lvLufkW5I0bj7OjMbCTwBdADucvcmVzaU\noQOAk4CpZjap+LML3f3xFGMqlTy+584C/rvYCXkTOKWpgtowJSKSc1kauhERkRJQohcRyTklehGR\nnFOiFxHJOSV6EZGcU6IXEck5JXoRkZxTohcRybn/B44x+J9qVCmGAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"x = np.linspace(-5,5,101)\n",
"plt.plot(x, vsinc(x))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"因为这样的用法涉及大量的函数调用,因此,向量化函数的效率并不高。"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.15-binary-operators.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 二元运算"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 四则运算 "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"运算|函数\n",
"--- | --- \n",
"`a + b` | `add(a,b)`\n",
"`a - b` | `subtract(a,b)`\n",
"`a * b` | `multiply(a,b)`\n",
"`a / b` | `divide(a,b)`\n",
"`a ** b` | `power(a,b)`\n",
"`a % b` | `remainder(a,b)`\n",
"\n",
"以乘法为例,数组与标量相乘,相当于数组的每个元素乘以这个标量:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([3, 6])"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([1,2])\n",
"a * 3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"数组逐元素相乘:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([3, 8])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([1,2])\n",
"b = np.array([3,4])\n",
"a * b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用函数:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([3, 8])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.multiply(a, b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"事实上,函数还可以接受第三个参数,表示将结果存入第三个参数中:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([3, 8])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.multiply(a, b, a)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([3, 8])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 比较和逻辑运算"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"运算|函数<\n",
"--- | --- \n",
"`==` | `equal`\n",
"`!=` | `not_equal`\n",
"`>` | `greater`\n",
"`>=` | `greater_equal`\n",
"`<` | `less`\n",
"`<=` | `less_equal`\n",
"| `logical_and`\n",
"| `logical_or`\n",
"| `logical_xor`\n",
"| `logical_not`\n",
"`&` | `bitwise_and`\n",
" | `bitwise_or`\n",
"`^` | `bitwise_xor`\n",
"`~` | `invert`\n",
"`>>` | `right_shift`\n",
"`<<` | `left_shift`\n",
"\n",
"等于操作也是逐元素比较的:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ True, True, False, True],\n",
" [False, True, True, True]], dtype=bool)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([[1,2,3,4],\n",
" [2,3,4,5]])\n",
"b = np.array([[1,2,5,4],\n",
" [1,3,4,5]])\n",
"a == b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这意味着,如果我们在条件中要判断两个数组是否一样时,不能直接使用\n",
"\n",
" if a == b:\n",
"\n",
"而要使用:\n",
"\n",
" if all(a==b):\n",
"\n",
"对于浮点数,由于存在精度问题,使用函数 `allclose` 会更好:\n",
"\n",
" if allclose(a,b):\n",
"\n",
"`logical_and` 也是逐元素的 `and` 操作:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([False, True, False], dtype=bool)"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([0,1,2])\n",
"b = np.array([0,10,0])\n",
"\n",
"np.logical_and(a, b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`0` 被认为是 `False`,非零则是 `True`。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"比特操作:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 17, 34, 68, 136])"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([1,2,4,8])\n",
"b = np.array([16,32,64,128])\n",
"\n",
"a | b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"取反:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([254, 253, 252, 251], dtype=uint8)"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([1,2,3,4], np.uint8)\n",
"~a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"左移:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 8, 16, 24, 32], dtype=uint8)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a << 3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"要注意的是 `&` 的运算优先于比较运算如 `>` 等,所以必要时候需要加上括号:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([False, False, True, False], dtype=bool)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([1,2,4,8])\n",
"b = np.array([16,32,64,128])\n",
"\n",
"(a > 3) & (b < 100)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.16-universal-functions.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# ufunc 对象"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Numpy** 有两种基本对象:`ndarray (N-dimensional array object)` 和 `ufunc (universal function object)`。`ndarray` 是存储单一数据类型的多维数组,而 `ufunc` 则是能够对数组进行处理的函数。\n",
"\n",
"例如,我们之前所接触到的二元操作符对应的 **Numpy** 函数,如 `add`,就是一种 `ufunc` 对象,它可以作用于数组的每个元素。"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([2, 4, 6])"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([0,1,2])\n",
"b = np.array([2,3,4])\n",
"\n",
"np.add(a, b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看支持的方法:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['__call__',\n",
" '__class__',\n",
" '__delattr__',\n",
" '__doc__',\n",
" '__format__',\n",
" '__getattribute__',\n",
" '__hash__',\n",
" '__init__',\n",
" '__name__',\n",
" '__new__',\n",
" '__reduce__',\n",
" '__reduce_ex__',\n",
" '__repr__',\n",
" '__setattr__',\n",
" '__sizeof__',\n",
" '__str__',\n",
" '__subclasshook__',\n",
" 'accumulate',\n",
" 'at',\n",
" 'identity',\n",
" 'nargs',\n",
" 'nin',\n",
" 'nout',\n",
" 'ntypes',\n",
" 'outer',\n",
" 'reduce',\n",
" 'reduceat',\n",
" 'signature',\n",
" 'types']"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dir(np.add)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"除此之外,大部分能够作用于数组的数学函数如三角函数等,都是 `ufunc` 对象。\n",
"\n",
"特别地,对于二元操作符所对应的 `ufunc` 对象,支持以下方法:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## reduce 方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" op.reduce(a)\n",
"\n",
"将`op`沿着某个轴应用,使得数组 `a` 的维数降低一维。\n",
"\n",
"add 作用到一维数组上相当于求和:\n",
"\n",
"$$\n",
"\\begin{align}\n",
"y & = add.recuce(a) \\\\\n",
"& = a[0] + a[1] + ... + a[N-1] \\\\\n",
"& = \\sum_{n=0}^{N-1} a[n]\n",
"\\end{align}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"10"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([1,2,3,4])\n",
"\n",
"np.add.reduce(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"多维数组默认只按照第一维进行运算:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([5, 7, 9])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([[1,2,3],[4,5,6]])\n",
"\n",
"np.add.reduce(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"指定维度:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 6, 15])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.add.reduce(a, 1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"作用于字符串:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'abcdef'"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array(['ab', 'cd', 'ef'], np.object)\n",
"\n",
"np.add.reduce(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"逻辑运算:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([1,1,0,1])\n",
"\n",
"np.logical_and.reduce(a)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.logical_or.reduce(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## accumulate 方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" op.accumulate(a)\n",
"\n",
"`accumulate` 可以看成保存 `reduce` 每一步的结果所形成的数组。\n",
"\n",
"$$\n",
"\\begin{align}\n",
"y & = add.accumulate(a) \\\\\n",
"& = \\left[\\sum_{n=0}^{0} a[n], \\sum_{n=0}^{1} a[n], ..., \\sum_{n=0}^{N-1} a[n]\\right]\n",
"\\end{align}\n",
"$$\n",
"\n",
"与之前类似:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1, 3, 6, 10])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([1,2,3,4])\n",
"\n",
"np.add.accumulate(a)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array(['ab', 'abcd', 'abcdef'], dtype=object)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array(['ab', 'cd', 'ef'], np.object)\n",
"\n",
"np.add.accumulate(a)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ True, True, False, False], dtype=bool)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([1,1,0,1])\n",
"\n",
"np.logical_and.accumulate(a)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ True, True, True, True], dtype=bool)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.logical_or.accumulate(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## reduceat 方法"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
" op.reduceat(a, indices)\n",
"\n",
"`reduceat` 方法将操作符运用到指定的下标上,返回一个与 `indices` 大小相同的数组:\n",
"\n",
"$$\n",
"\\begin{align}\n",
"y & = add.reduceat(a, indices) \\\\\n",
"& = \\left[\\sum_{n=indice[0]}^{indice[1]-1} a[n], \\sum_{n=indice[1]}^{indice[2]-1} a[n], ..., \\sum_{n=indice[-1]}^{N-1} a[n]\\right]\n",
"\\end{align}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([60, 90])"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([0, 10, 20, 30, 40, 50])\n",
"indices = np.array([1,4])\n",
"\n",
"np.add.reduceat(a, indices)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里,`indices` 为 `[1, 4]`,所以 `60` 表示从下标1(包括)加到下标4(不包括)的结果,`90` 表示从下标4(包括)加到结尾的结果。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## outer 方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" op.outer(a, b)\n",
"\n",
"对于 `a` 中每个元素,将 `op` 运用到它和 `b` 的每一个元素上所得到的结果:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[1, 2, 3],\n",
" [2, 3, 4]])"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([0,1])\n",
"b = np.array([1,2,3])\n",
"\n",
"np.add.outer(a, b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"注意有顺序的区别:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[1, 2],\n",
" [2, 3],\n",
" [3, 4]])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.add.outer(b, a)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.17-choose.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# choose 函数实现条件筛选"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于数组,我们有时候需要进行类似 `switch` 和 `case` 进行条件选择,此时使用 choose 函数十分方便:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[11, 10, 11],\n",
" [12, 11, 10],\n",
" [11, 12, 12]])"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"control = np.array([[1,0,1],\n",
" [2,1,0],\n",
" [1,2,2]])\n",
"\n",
"np.choose(control, [10, 11, 12])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在上面的例子中,`choose` 将 `0,1,2` 对应的值映射为了 `10, 11, 12`,这里的 `0,1,2` 表示对应的下标。\n",
"\n",
"事实上, `choose` 不仅仅能接受下标参数,还可以接受下标所在的位置:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[10, 1, 10],\n",
" [23, 10, 5],\n",
" [10, 27, 28]])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"i0 = np.array([[0,1,2],\n",
" [3,4,5],\n",
" [6,7,8]])\n",
"i2 = np.array([[20,21,22],\n",
" [23,24,25],\n",
" [26,27,28]])\n",
"control = np.array([[1,0,1],\n",
" [2,1,0],\n",
" [1,2,2]])\n",
"\n",
"np.choose(control, [i0, 10, i2])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里,`control` 传入第一个 `1` 对应的是 10,传入的第一个 `0` 对应于 `i0` 相应位置的值即 `1`,剩下的以此类推。 \n",
"\n",
"下面的例子将数组中所有小于 `10` 的值变成了 `10`。"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ True, True, True],\n",
" [False, False, False],\n",
" [False, False, False]], dtype=bool)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([[ 0, 1, 2], \n",
" [10,11,12], \n",
" [20,21,22]])\n",
"\n",
"a < 10"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[10, 10, 10],\n",
" [10, 11, 12],\n",
" [20, 21, 22]])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.choose(a < 10, (a, 10))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"下面的例子将数组中所有小于 10 的值变成了 10,大于 15 的值变成了 15。"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[1, 1, 1],\n",
" [0, 0, 0],\n",
" [2, 2, 2]])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([[ 0, 1, 2], \n",
" [10,11,12], \n",
" [20,21,22]])\n",
"\n",
"lt = a < 10\n",
"gt = a > 15\n",
"\n",
"choice = lt + 2 * gt\n",
"choice"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[10, 10, 10],\n",
" [10, 11, 12],\n",
" [15, 15, 15]])"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.choose(choice, (a, 10, 15))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.18-array-broadcasting.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 数组广播机制"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"正常的加法:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2],\n",
" [10, 11, 12],\n",
" [20, 21, 22],\n",
" [30, 31, 32]])"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([[ 0, 0, 0],\n",
" [10,10,10],\n",
" [20,20,20],\n",
" [30,30,30]])\n",
"b = np.array([[ 0, 1, 2],\n",
" [ 0, 1, 2],\n",
" [ 0, 1, 2],\n",
" [ 0, 1, 2]])\n",
"a + b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"将 `b` 的值变成一维的 `[0,1,2]` 之后的加法:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2],\n",
" [10, 11, 12],\n",
" [20, 21, 22],\n",
" [30, 31, 32]])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b = np.array([0,1,2])\n",
"\n",
"a + b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"结果一样,虽然两个数组的维数不一样,但是 **Numpy** 检测到 `b` 的维度与 `a` 的维度匹配,所以将 `b` 扩展为之前的形式,得到相同的形状。\n",
"\n",
"对于更高维度,这样的扩展依然有效。 \n",
"\n",
"如果我们再将 `a` 变成一个列向量呢?"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0],\n",
" [10],\n",
" [20],\n",
" [30]])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([0,10,20,30])\n",
"a.shape = 4,1\n",
"a"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 1, 2])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2],\n",
" [10, 11, 12],\n",
" [20, 21, 22],\n",
" [30, 31, 32]])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a + b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以看到,虽然两者的维度并不相同,但是**Numpy**还是根据两者的维度,自动将它们进行扩展然后进行计算。\n",
"\n",
"对于 **Numpy** 来说,维度匹配当且仅当:\n",
"\n",
"- 维度相同\n",
"- 有一个的维度是1\n",
"\n",
"匹配会从最后一维开始进行,直到某一个的维度全部匹配为止,因此对于以下情况,**Numpy** 都会进行相应的匹配:\n",
"\n",
"A|B|Result\n",
"---|---|---\n",
"3d array: 256 x 256 x 3 | 1d array: 3 | 3d array: 256 x 256 x 3\n",
"4d array: 8 x 1 x 6 x 1 | 3d array: 7 x 1 x 5 | 3d array: 8 x 7 x 6 x 5\n",
"3d array: 5 x 4 x 3 | 1d array: 1 | 3d array: 5 x 4 x 3\n",
"3d array: 15 x 4 x 13 | 1d array: 15 x 1 x 13 | 3d array: 15 x 4 x 13\n",
"2d array: 4 x 1 | 1d array: 3 | 2d array: 4 x 3\n",
"\n",
"匹配成功后,**Numpy** 会进行运算得到相应的结果。\n",
"\n",
"当然,如果相应的维度不匹配,那么**Numpy**会报错:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(4L,)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.array([0,10,20,30])\n",
"a.shape"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(3L,)"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b.shape"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "ValueError",
"evalue": "operands could not be broadcast together with shapes (4,) (3,) ",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ma\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mb\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mValueError\u001b[0m: operands could not be broadcast together with shapes (4,) (3,) "
]
}
],
"source": [
"a + b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"将 `a` 转换为列向量,还是可以计算出结果:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2],\n",
" [10, 11, 12],\n",
" [20, 21, 22],\n",
" [30, 31, 32]])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[:, np.newaxis] + b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 例子"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x = np.linspace(-.5,.5, 21)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"y = x[:, np.newaxis]"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(21L,)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x.shape"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(21L, 1L)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"先形成一个 21 乘 21 的网格,再计算网格到原点的距离:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"radius = np.sqrt(x ** 2 + y ** 2)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"plt.imshow(radius)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.19-reading-and-writing-arrays.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 数组读写"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 从文本中读取数组"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 空格(制表符)分割的文本"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"假设我们有这样的一个空白分割的文件:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Writing myfile.txt\n"
]
}
],
"source": [
"%%writefile myfile.txt\n",
"2.1 2.3 3.2 1.3 3.1\n",
"6.1 3.1 4.2 2.3 1.8"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"为了生成数组,我们首先将数据转化成一个列表组成的列表,再将这个列表转换为数组:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data = []\n",
"\n",
"with open('myfile.txt') as f:\n",
" # 每次读一行\n",
" for line in f:\n",
" fileds = line.split()\n",
" row_data = [float(x) for x in fileds]\n",
" data.append(row_data)\n",
"\n",
"data = np.array(data)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 2.1, 2.3, 3.2, 1.3, 3.1],\n",
" [ 6.1, 3.1, 4.2, 2.3, 1.8]])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不过,更简便的是使用 `loadtxt` 方法:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 2.1, 2.3, 3.2, 1.3, 3.1],\n",
" [ 6.1, 3.1, 4.2, 2.3, 1.8]])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = np.loadtxt('myfile.txt')\n",
"data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 逗号分隔文件"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting myfile.txt\n"
]
}
],
"source": [
"%%writefile myfile.txt\n",
"2.1, 2.3, 3.2, 1.3, 3.1\n",
"6.1, 3.1, 4.2, 2.3, 1.8"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于逗号分隔的文件(通常为`.csv`格式),我们可以稍微修改之前繁琐的过程,将 `split` 的参数变成 `','`即可。\n",
"\n",
"不过,`loadtxt` 函数也可以读这样的文件,只需要制定分割符的参数即可:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 2.1, 2.3, 3.2, 1.3, 3.1],\n",
" [ 6.1, 3.1, 4.2, 2.3, 1.8]])"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = np.loadtxt('myfile.txt', delimiter=',')\n",
"data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### loadtxt 函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" loadtxt(fname, dtype=, \n",
" comments='#', delimiter=None, \n",
" converters=None, skiprows=0, \n",
" usecols=None, unpack=False, ndmin=0)\n",
"\n",
"`loadtxt` 有很多可选参数,其中 `delimiter` 就是刚才用到的分隔符参数。\n",
"\n",
"`skiprows` 参数表示忽略开头的行数,可以用来读写含有标题的文本"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting myfile.txt\n"
]
}
],
"source": [
"%%writefile myfile.txt\n",
"X Y Z MAG ANG\n",
"2.1 2.3 3.2 1.3 3.1\n",
"6.1 3.1 4.2 2.3 1.8"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 2.1, 2.3, 3.2, 1.3, 3.1],\n",
" [ 6.1, 3.1, 4.2, 2.3, 1.8]])"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.loadtxt('myfile.txt', skiprows=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"此外,有一个功能更为全面的 `genfromtxt` 函数,能处理更多的情况,但相应的速度和效率会慢一些。\n",
"\n",
" genfromtxt(fname, dtype=, comments='#', delimiter=None, \n",
" skiprows=0, skip_header=0, skip_footer=0, converters=None, \n",
" missing='', missing_values=None, filling_values=None, usecols=None, \n",
" names=None, excludelist=None, deletechars=None, replace_space='_', \n",
" autostrip=False, case_sensitive=True, defaultfmt='f%i', unpack=None, \n",
" usemask=False, loose=True, invalid_raise=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### loadtxt 的更多特性"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于这样一个文件:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting myfile.txt\n"
]
}
],
"source": [
"%%writefile myfile.txt\n",
" -- BEGINNING OF THE FILE\n",
"% Day, Month, Year, Skip, Power\n",
"01, 01, 2000, x876, 13 % wow!\n",
"% we don't want have Jan 03rd\n",
"04, 01, 2000, xfed, 55"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1, 1, 2000, 13],\n",
" [ 4, 1, 2000, 55]])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = np.loadtxt('myfile.txt', \n",
" skiprows=1, #忽略第一行\n",
" dtype=np.int, #数组类型\n",
" delimiter=',', #逗号分割\n",
" usecols=(0,1,2,4), #指定使用哪几列数据\n",
" comments='%' #百分号为注释符\n",
" )\n",
"data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### loadtxt 自定义转换方法"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting myfile.txt\n"
]
}
],
"source": [
"%%writefile myfile.txt\n",
"2010-01-01 2.3 3.2\n",
"2011-01-01 6.1 3.1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"假设我们的文本包含日期,我们可以使用 `datetime` 在 `loadtxt` 中处理:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[datetime.datetime(2010, 1, 1, 0, 0), 2.3, 3.2],\n",
" [datetime.datetime(2011, 1, 1, 0, 0), 6.1, 3.1]], dtype=object)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import datetime\n",
"\n",
"def date_converter(s):\n",
" return datetime.datetime.strptime(s, \"%Y-%m-%d\")\n",
"\n",
"data = np.loadtxt('myfile.txt',\n",
" dtype=np.object, #数据类型为对象\n",
" converters={0:date_converter, #第一列使用自定义转换方法\n",
" 1:float, #第二第三使用浮点数转换\n",
" 2:float})\n",
"\n",
"data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"移除 `myfile.txt`:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import os\n",
"os.remove('myfile.txt')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 读写各种格式的文件"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如下表所示:\n",
"\n",
"文件格式|使用的包|函数\n",
"----|----|----\n",
"txt | numpy | loadtxt, genfromtxt, fromfile, savetxt, tofile\n",
"csv | csv | reader, writer\n",
"Matlab | scipy.io | loadmat, savemat\n",
"hdf | pytables, h5py| \n",
"NetCDF | netCDF4, scipy.io.netcdf | netCDF4.Dataset, scipy.io.netcdf.netcdf_file\n",
"**文件格式**|**使用的包**|**备注**\n",
"wav | scipy.io.wavfile | 音频文件\n",
"jpeg,png,...| PIL, scipy.misc.pilutil | 图像文件\n",
"fits | pyfits | 天文图像\n",
"\n",
"此外, `pandas` ——一个用来处理时间序列的包中包含处理各种文件的方法,具体可参见它的文档:\n",
"\n",
"http://pandas.pydata.org/pandas-docs/stable/io.html"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 将数组写入文件"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`savetxt` 可以将数组写入文件,默认使用科学计数法的形式保存:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"data = np.array([[1,2], \n",
" [3,4]])\n",
"\n",
"np.savetxt('out.txt', data)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.000000000000000000e+00 2.000000000000000000e+00\n",
"3.000000000000000000e+00 4.000000000000000000e+00\n"
]
}
],
"source": [
"with open('out.txt') as f:\n",
" for line in f:\n",
" print line,"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"也可以使用类似**C**语言中 `printf` 的方式指定输出的格式:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data = np.array([[1,2], \n",
" [3,4]])\n",
"\n",
"np.savetxt('out.txt', data, fmt=\"%d\") #保存为整数"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1 2\n",
"3 4\n"
]
}
],
"source": [
"with open('out.txt') as f:\n",
" for line in f:\n",
" print line,"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"逗号分隔的输出:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data = np.array([[1,2], \n",
" [3,4]])\n",
"\n",
"np.savetxt('out.txt', data, fmt=\"%.2f\", delimiter=',') #保存为2位小数的浮点数,用逗号分隔"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.00,2.00\n",
"3.00,4.00\n"
]
}
],
"source": [
"with open('out.txt') as f:\n",
" for line in f:\n",
" print line,"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"复数值默认会加上括号:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data = np.array([[1+1j,2], \n",
" [3,4]])\n",
"\n",
"np.savetxt('out.txt', data, fmt=\"%.2f\", delimiter=',') #保存为2位小数的浮点数,用逗号分隔"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" (1.00+1.00j), (2.00+0.00j)\n",
" (3.00+0.00j), (4.00+0.00j)\n"
]
}
],
"source": [
"with open('out.txt') as f:\n",
" for line in f:\n",
" print line,"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"更多参数:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" savetxt(fname, \n",
" X, \n",
" fmt='%.18e', \n",
" delimiter=' ', \n",
" newline='\\n', \n",
" header='', \n",
" footer='', \n",
" comments='# ')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"移除 `out.txt`:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os\n",
"os.remove('out.txt')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Numpy 二进制格式"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"数组可以储存成二进制格式,单个的数组保存为 `.npy` 格式,多个数组保存为多个`.npy`文件组成的 `.npz` 格式,每个 `.npy` 文件包含一个数组。\n",
"\n",
"与文本格式不同,二进制格式保存了数组的 `shape, dtype` 信息,以便完全重构出保存的数组。\n",
"\n",
"保存的方法:\n",
"\n",
"- `save(file, arr)` 保存单个数组,`.npy` 格式\n",
"- `savez(file, *args, **kwds)` 保存多个数组,无压缩的 `.npz` 格式\n",
"- `savez_compressed(file, *args, **kwds)` 保存多个数组,有压缩的 `.npz` 格式\n",
"\n",
"读取的方法:\n",
"\n",
"- `load(file, mmap_mode=None)` 对于 `.npy`,返回保存的数组,对于 `.npz`,返回一个名称-数组对组成的字典。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 单个数组的读写"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"a = np.array([[1.0,2.0], [3.0,4.0]])\n",
"\n",
"fname = 'afile.npy'\n",
"np.save(fname, a)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1., 2.],\n",
" [ 3., 4.]])"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"aa = np.load(fname)\n",
"aa"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"删除生成的文件:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os\n",
"os.remove('afile.npy')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 二进制与文本大小比较"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = np.arange(10000.)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"保存为文本:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"np.savetxt('a.txt', a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看大小:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"260000L"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import os\n",
"os.stat('a.txt').st_size"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"保存为二进制:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"np.save('a.npy', a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看大小:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"80080L"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"os.stat('a.npy').st_size"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"删除生成的文件:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"os.remove('a.npy')\n",
"os.remove('a.txt')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以看到,二进制文件大约是文本文件的三分之一。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 保存多个数组"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = np.array([[1.0,2.0], \n",
" [3.0,4.0]])\n",
"b = np.arange(1000)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"保存多个数组:"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"np.savez('data.npz', a=a, b=b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看里面包含的文件:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Archive: data.npz\n",
" Length Date Time Name\n",
"--------- ---------- ----- ----\n",
" 112 2015/08/10 00:46 a.npy\n",
" 4080 2015/08/10 00:46 b.npy\n",
"--------- -------\n",
" 4192 2 files\n"
]
}
],
"source": [
"!unzip -l data.npz"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"载入数据:"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"data = np.load('data.npz')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"载入后可以像字典一样进行操作:"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['a', 'b']"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.keys()"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1., 2.],\n",
" [ 3., 4.]])"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data['a']"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1000L,)"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data['b'].shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"删除文件:"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# 要先删除 data,否则删除时会报错\n",
"del data\n",
"\n",
"os.remove('data.npz')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 压缩文件"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当数据比较整齐时:"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = np.arange(20000.)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"无压缩大小:"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"160188L"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.savez('a.npz', a=a)\n",
"os.stat('a.npz').st_size"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"有压缩大小:"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"26885L"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.savez_compressed('a2.npz', a=a)\n",
"os.stat('a2.npz').st_size"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"大约有 6x 的压缩效果。\n",
"\n",
"当数据比较混乱时:"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = np.random.rand(20000.)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"无压缩大小:"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"160188L"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.savez('a.npz', a=a)\n",
"os.stat('a.npz').st_size"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"有压缩大小:"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"151105L"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.savez_compressed('a2.npz', a=a)\n",
"os.stat('a2.npz').st_size"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"只有大约 1.06x 的压缩效果。"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"os.remove('a.npz')\n",
"os.remove('a2.npz')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 03-numpy/03.20-structured-arrays.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 结构化数组"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"假设我们要保存这样的数据:\n",
"\n",
"|name|age|wgt\n",
"--|--|--|--\n",
"0|dan|1|23.1\n",
"1|ann|0|25.1\n",
"2|sam|2|8.3\n",
"\n",
"希望定义一个一维数组,每个元素有三个属性 `name, age, wgt`,此时我们需要使用结构化数组。"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"定义数组 `a`:\n",
"\n",
"0|1|2|3\n",
"-|-|-|-\n",
"1.0|2.0|3.0|4.0"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = np.array([1.0,2.0,3.0,4.0], np.float32)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `view` 方法,将 `a` 对应的内存按照复数来解释:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1.+2.j, 3.+4.j], dtype=complex64)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a.view(np.complex64)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"0|1|2|3\n",
"-|-|-|-\n",
"1.0|2.0|3.0|4.0\n",
"real|imag|real|imag\n",
"\n",
"事实上,我们可以把复数看成一个结构体,第一部分是实部,第二部分是虚部,这样这个数组便可以看成是一个结构化数组。\n",
"\n",
"换句话说,我们只需要换种方式解释这段内存,便可以得到结构化数组的效果!\n",
"\n",
"0|1|2|3\n",
"-|-|-|-\n",
"1.0|2.0|3.0|4.0\n",
"mass|vol|mass|vol\n",
"\n",
"例如,我们可以将第一个浮点数解释为质量,第二个浮点数解释为速度,则这段内存还可以看成是包含两个域(质量和速度)的结构体。"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"my_dtype = np.dtype([('mass', 'float32'), ('vol', 'float32')])"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([(1.0, 2.0), (3.0, 4.0)], \n",
" dtype=[('mass', ' \n",
" position\n",
" | mass\n",
" | | x | y\n",
"\n",
"\n",
"那么它的类型可以这样嵌套定义:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"particle_dtype = np.dtype([('position', [('x', 'float'), \n",
" ('y', 'float')]),\n",
" ('mass', 'float')\n",
" ])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"假设数据文件如下:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting data.txt\n"
]
}
],
"source": [
"%%writefile data.txt\n",
"2.0 3.0 42.0\n",
"2.1 4.3 32.5\n",
"1.2 4.6 32.3\n",
"4.5 -6.4 23.3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"读取数据:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data = np.loadtxt('data.txt', dtype=particle_dtype)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([((2.0, 3.0), 42.0), ((2.1, 4.3), 32.5), ((1.2, 4.6), 32.3),\n",
" ((4.5, -6.4), 23.3)], \n",
" dtype=[('position', [('x', '切片返回复制 | 采用引用传递的方式进行计算 切片返回引用\n",
"文件名必须和函数名相同 | 函数可以在任何地方任何文件中定义\n",
"收费 | 免费\n",
"2D,3D图像支持 | 依赖第三方库如 `matplotlib` 等\n",
"完全的编译环境 | 依赖于 **Python** 提供的编译环境"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## array 还是 matrix?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`Numpy` 中不仅提供了 `array` 这个基本类型,还提供了支持矩阵操作的类 `matrix`,但是一般推荐使用 `array`:\n",
"\n",
"- 很多 `numpy` 函数返回的是 `array`,不是 `matrix`\n",
"- 在 `array` 中,逐元素操作和矩阵操作有着明显的不同\n",
"- 向量可以不被视为矩阵\n",
"\n",
"具体说来:\n",
"\n",
"- `*, dot(), multiply()`\n",
" - `array`:`*` -逐元素乘法,`dot()` -矩阵乘法\n",
" - `matrix`:`*` -矩阵乘法,`multiply()` -逐元素乘法\n",
"- 处理向量 \n",
" - `array`:形状为 `1xN, Nx1, N` 的向量的意义是不同的,类似于 `A[:,1]` 的操作返回的是一维数组,形状为 `N`,一维数组的转置仍是自己本身\n",
" - `matrix`:形状为 `1xN, Nx1`,`A[:,1]` 返回的是二维 `Nx1` 矩阵\n",
"- 高维数组\n",
" - `array`:支持大于2的维度\n",
" - `matrix`:维度只能为2\n",
"- 属性\n",
" - `array`:`.T` 表示转置\n",
" - `matrix`:`.H` 表示复共轭转置,`.I` 表示逆,`.A` 表示转化为 `array` 类型\n",
"- 构造函数\n",
" - `array`:`array` 函数接受一个(嵌套)序列作为参数——`array([[1,2,3],[4,5,6]])`\n",
" - `matrix`:`matrix` 函数额外支持字符串参数——`matrix(\"[1 2 3; 4 5 6]\")`\n",
"\n",
"其优缺点各自如下:\n",
"\n",
"- **`array`**\n",
" - `[GOOD]` 一维数组既可以看成列向量,也可以看成行向量。`v` 在 `dot(A,v)` 被看成列向量,在 `dot(v,A)` 中被看成行向量,这样省去了转置的麻烦\n",
" - `[BAD!]` 矩阵乘法需要使用 `dot()` 函数,如: `dot(dot(A,B),C)` vs `A*B*C`\n",
" - `[GOOD]` 逐元素乘法很简单: `A*B`\n",
" - `[GOOD]` 作为基本类型,是很多基于 `numpy` 的第三方库函数的返回类型\n",
" - `[GOOD]` 所有的操作 `*,/,+,**,...` 都是逐元素的\n",
" - `[GOOD]` 可以处理任意维度的数据\n",
" - `[GOOD]` 张量运算\n",
"\n",
"- **`matrix`**\n",
" - `[GOOD]` 类似与 **`MATLAB`** 的操作\n",
" - `[BAD!]` 最高维度为2\n",
" - `[BAD!]` 最低维度也为2\n",
" - `[BAD!]` 很多函数返回的是 `array`,即使传入的参数是 `matrix`\n",
" - `[GOOD]` `A*B` 是矩阵乘法\n",
" - `[BAD!]` 逐元素乘法需要调用 `multiply` 函数\n",
" - `[BAD!]` `/` 是逐元素操作\n",
"\n",
"当然在实际使用中,二者的使用取决于具体情况。\n",
"\n",
"二者可以互相转化:\n",
"\n",
"- `asarray` :返回数组\n",
"- `asmatrix`(或者`mat`) :返回矩阵\n",
"- `asanyarray` :返回数组或者数组的子类,注意到矩阵是数组的一个子类,所以输入是矩阵的时候返回的也是矩阵"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 类 Matlab 函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"有很多类似的函数:\n",
"\n",
"- `ones, zeros, empty, eye, rand, repmat`\n",
"\n",
"通常这些函数的返回值是 `array`,不过 `numpy` 提供了一个 `matlib` 的子模块,子模块中的这些函数返回值为 `matrix`:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy\n",
"import numpy.matlib"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(7L,)\n",
"\n"
]
}
],
"source": [
"a = numpy.ones(7)\n",
"\n",
"print a.shape\n",
"print type(a)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1L, 7L)\n",
"\n"
]
}
],
"source": [
"a = numpy.matlib.ones(7)\n",
"\n",
"print a.shape\n",
"print type(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`mat` 函数将一个数组转化为矩阵:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"a = numpy.array([1,2,3])\n",
"\n",
"b = numpy.mat(a)\n",
"\n",
"print type(b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"有些函数被放到子模块中了,例如调用 `rand()` 函数需要使用 `numpy.random.rand()` (或者从 `matlib` 模块中生成矩阵):"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 0.66007267 0.34794294 0.5040946 0.65044648 0.74763248 0.42486999\n",
" 0.90922612 0.69071747 0.33541076 0.08570178]\n"
]
}
],
"source": [
"a = numpy.random.rand(10)\n",
"print a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 等效操作"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"假定我们已经这样导入了 `Numpy`:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from numpy import *\n",
"import scipy.linalg"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"以下 `linalg` 表示的是 `numpy.linalg`,与 `scipy.linalg` 不同。\n",
"\n",
"注意:**`MATLAB`** 与 **`Numpy`** 下标之间有这样几处不同:\n",
"- `1-base` vs `0-base`\n",
"- `()` vs `[]`\n",
"- `MATLAB`:`beg(:step):end`,包含结束值 `end`\n",
"- `Numpy`:`beg:end(:step)`,不包含结束值 `end`\n",
"\n",
"MATLAB|Numpy|注释\n",
"---|---|---\n",
"`help func` | `info(func)`, `help(func)`, `func?`(IPython)| 查看函数帮助\n",
"`which func` | | 查看函数在什么地方定义\n",
"`type func` | `source(func)`, `func??`(IPython)| 查看函数源代码\n",
"`a && b` | `a and b` | 逻辑 `AND`\n",
"`1*i, 1*j, 1i, 1j` | `1j` | 复数\n",
"`eps` | `spacing(1)` | `1` 与最近浮点数的距离\n",
"`ndims(a)` | `ndim(a), a.ndim` | `a` 的维数\n",
"`numel(a)` | `size(a), a.size` | `a` 的元素个数\n",
"`size(a)` | `shape(a), a.shape` | `a` 的形状\n",
"`size(a,n)` | `a.shape[n-1]` | 第 n 维的大小\n",
"`a(2,5)` | `a[1,4]` | 第 2 行第 5 列元素\n",
"`a(2,:)` | `a[1], a[1,:]` | 第 2 行 \n",
"`a(1:5,:)` | `a[0:5]` | 第 1 至 5 行\n",
"`a(end-4:end,:)` | `a[-5:]` | 后 5 行\n",
"`a(1:3,5:9)` | `a[0:3][:,4:9]` | 特定行列(1~3 行,5~9 列)\n",
"`a([2,4,5],[1,3])` | `a[ix_([1,3,4],[0,2])]` | 特定行列(2,4,5 行的 1,3 列)\n",
"`a(3:2:21,:)` | `a[2:21:2,:]` | 特定行列(3,5,...,21 行)\n",
"`a(1:2:end,:)` | `a[ ::2,:]` | 奇数行\n",
"`a([1:end 1],:)` | `a[r_[:len(a),0]]` | 将第一行添加到末尾\n",
"`a.'` | `a.T` | 转置\n",
"`a ./ b` | `a/b` | 逐元素除法\n",
"`(a>0.5)` | `(a>0.5)` | 各个元素是否大于 0.5\n",
"`find(a>0.5)` | `nonzero(a>0.5)` | 大于 0.5 的位置\n",
"`a(a<0.5)=0` | `a[a<0.5]=0` | 小于 0.5 的设为 0\n",
"`a(:) = 3` | `a[:] = 3` | 所有元素设为 3\n",
"`y=x` | `y=x.copy()` | 将 y 设为 x\n",
"`y=x(2,:)` | `y=x[1,:].copy()` | 注意值传递和引用传递的区别\n",
"`y=x(:)` | `y=x.flatten(1)` | 将矩阵变为一个向量,这里 `1` 表示沿着列进行转化\n",
"`max(max(a))` | `a.max()` | 最大值\n",
"`max(a)` | `a.max(0)` | 每一列的最大值\n",
"`max(a,[],2)` | `a.max(1)` | 每一行的最大值\n",
"`max(a,b)` | `maximum(a,b)` | 逐元素比较,取较大的值\n",
"`a & b` | `logical_and(a, b)` | 逻辑 AND\n",
"`bitand(a, b)` | `a & b` | 逐比特 AND\n",
"`inv(a)` | `linalg.inv(a)` | a 的逆\n",
"`pinv(a)` | `linalg.inv(a)` | 伪逆\n",
"`rank(a)` | `linalg.matrix_rank(a)` | 秩\n",
"`a\\b` | `linalg.solve(a,b)(如果a是方阵),linalg.lstsq(a,b)` | 解 `a x = b`\n",
"`b/a` | 求解 `a.T x.T = b.T` | 解 `x a = b`\n",
"`[U,S,V]=svd(a)` | `U, S, Vh = linalg.svd(a), V = Vh.T` | 奇异值分解\n",
"`chol(a)` | `linalg.cholesky(a).T` | Cholesky 分解\n",
"`[V,D]=eig(a)` | `D,V = linalg.eig(a)` | 特征值分解\n",
"`[V,D]=eig(a,b)` | `V,D = scipy.linalg.eig(a,b)` | \n",
"`[V,D]=eigs(a,k)` | | 前 k 大特征值对应的特征向量\n",
"`` | `` |\n",
"`` | `` |\n",
"`` | `` |\n",
"`` | `` |\n",
"\n",
"MATLAB|numpy.array|numpy.matrix|注释\n",
"---|---|---|---\n",
"`[1,2,3;4,5,6]` | `array([[1.,2.,3.],[4.,5.,6.]])` | `mat([[1.,2.,3.],[4.,5.,6.]]), mat('1,2,3;4,5,6')` | `2x3` 矩阵\n",
"`[a b;c d]` | `vstack([hstack([a,b]), hsatck([c,d])]])` | `bmat('a b;c d')` | 分块矩阵构造\n",
"`a(end)` | `a[-1]` | `a[:,-1][0,0]` | 最后一个元素\n",
"`a'` | `a.conj().T` | `a.H` | 复共轭转置\n",
"`a * b` | `dot(a,b)` | `a * b` | 矩阵乘法\n",
"`a .* b` | `a * b` | `multiply(a,b)` | 逐元素乘法\n",
"`a.^3` | `a**3` | `power(a,3)` | 逐元素立方\n",
"`a(:,find(v>0.5))` | `a[:,nonzero(v>0.5)[0]]` | `a[:,nonzero(v.A>0.5)[0]]` | 找出行向量 `v>0.5` 对应的 `a` 中的列\n",
"`a(:,find(v>0.5))` | `a[:,v.T>0.5]` | `a[:,v.T>0.5)]` | 找出列向量 `v>0.5` 对应的 `a` 中的列\n",
"`a .* (a>0.5)` | `a * (a>0.5)` | `mat(a.A * (a>0.5).A)` | 将所有小于 0.5 的元素设为 0\n",
"`1:10` | `arange(1.,11.), r_[1.:11.], r_[1:10:10j]` | `mat(arange(1.,11.)), r_[1.:11., 'r']` | 这里 `1.` 是为了将其转化为浮点数组\n",
"`0:9` | `arange(10.), r_[:10.], r_[:9:10j]` | `mat(arange(10.)), r_[:10., 'r']` | \n",
"`[1:10]'` | `arange(1.,11.)[:,newaxis]` | `r_[1.:11.,'c']` | 列向量\n",
"`zeros, ones, eye, diag, linspace` | `zeros, ones, eye, diag, linspace` | `mat(...)` |\n",
"`rand(3,4)` | `random.rand(3,4)` | `mat(...)` | 0~1 随机数\n",
"`[x,y]=meshgrid(0:8,0:5)` | `mgrid[0:9., 0:6.], meshgrid(r_[0:9.],r_[0:6.])` | `mat(...)` | 网格\n",
"| `ogrid[0:9.,0:6.], ix_(r_[0:9.],r_[0:6.])` | `mat()` | 建议在 `Numpy` 中使用\n",
"`[x,y]=meshgrid([1,2,4],[2,4,5])`|`meshgrid([1,2,4],[2,4,5])`|`mat(...)`|\n",
"|`ix_([1,2,4],[2,4,5])`|`mat(...)`|\n",
"`repmat(a, m, n)`|`tile(a, (m,n))`|`mat(...)`| 产生 `m x n` 个 `a`\n",
"`[a b]` | `c_[a,b]`|`concatenate((a,b),1)`| 列对齐连接\n",
"`[a; b]` | `r_[a,b]`|`concatenate((a,b))`| 行对齐连接\n",
"`norm(v)` | `sqrt(dot(v,v)), linalg.norm(v)` | `sqrt(dot(v.A,v.A)), linalg.norm(v)` | 模\n",
"`[Q,R,P]=qr(a,0)` | `Q,R = scipy.linalg.qr(a)` | `mat(...)` | QR 分解\n",
"`[L,U,P]=lu(a)` | `L,U = Sci.linalg.lu(a)` | `mat(...)` | LU 分解\n",
"`fft(a)` | `fft(a)` | `mat(...)` | FFT\n",
"`ifft(a)` | `ifft(a)` | `mat(...)` | IFFT\n",
"`sort(a)` | `sort(a),a.sort` | `mat(...)` | 排序\n",
"\n",
"参考:http://wiki.scipy.org/NumPy_for_Matlab_Users#whichNotes"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 04-scipy/04.01-scienticfic-python-overview.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# SCIentific PYthon 简介"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**`Ipython`** 提供了一个很好的解释器界面。\n",
"\n",
"**`Matplotlib`** 提供了一个类似 **`Matlab`** 的画图工具。\n",
"\n",
"**`Numpy`** 提供了 `ndarray` 对象,可以进行快速的向量化计算。\n",
"\n",
"**`Scipy`** 是 **`Python`** 中进行科学计算的一个第三方库,以 **`Numpy`** 为基础。\n",
"\n",
"**`Pandas`** 是处理时间序列数据的第三方库,提供一个类似 **`R`** 语言的环境。\n",
"\n",
"**`StatsModels`** 是一个统计库,着重于统计模型。\n",
"\n",
"**`Scikits`** 以 **`Scipy`** 为基础,提供如 **`scikits-learn` 机器学习**和**`scikits-image` 图像处理**等高级用法。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Scipy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**`Scipy`** 由不同科学计算领域的子模块组成:\n",
"\n",
"子模块|描述\n",
"----|----\n",
"`cluster`| 聚类算法\n",
"`constants`| 物理数学常数\n",
"`fftpack`| 快速傅里叶变换\n",
"`integrate`| 积分和常微分方程求解\n",
"`interpolate`| 插值\n",
"`io`| 输入输出\n",
"`linalg`| 线性代数\n",
"`odr`| 正交距离回归\n",
"`optimize`| 优化和求根\n",
"`signal`| 信号处理\n",
"`sparse`| 稀疏矩阵\n",
"`spatial`| 空间数据结构和算法\n",
"`special`| 特殊方程\n",
"`stats`| 统计分布和函数\n",
"`weave`| C/C++ 积分\n",
"\n",
"在使用 **`Scipy`** 之前,为了方便,假定这些基础的模块已经被导入:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import scipy as sp\n",
"import matplotlib as mpl\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 **Scipy** 中的子模块时,需要分别导入:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy import linalg, optimize"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于一些常用的函数,这些在子模块中的函数可以在 `scipy` 命名空间中调用。另一方面,由于 **`Scipy`** 以 **`Numpy`** 为基础,因此很多基础的 **`Numpy`** 函数可以在`scipy` 命名空间中直接调用。\n",
"\n",
"我们可以使用 `numpy` 中的 `info` 函数来查看函数的文档:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" fmin(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None,\n",
" full_output=0, disp=1, retall=0, callback=None)\n",
"\n",
"Minimize a function using the downhill simplex algorithm.\n",
"\n",
"This algorithm only uses function values, not derivatives or second\n",
"derivatives.\n",
"\n",
"Parameters\n",
"----------\n",
"func : callable func(x,*args)\n",
" The objective function to be minimized.\n",
"x0 : ndarray\n",
" Initial guess.\n",
"args : tuple, optional\n",
" Extra arguments passed to func, i.e. ``f(x,*args)``.\n",
"callback : callable, optional\n",
" Called after each iteration, as callback(xk), where xk is the\n",
" current parameter vector.\n",
"xtol : float, optional\n",
" Relative error in xopt acceptable for convergence.\n",
"ftol : number, optional\n",
" Relative error in func(xopt) acceptable for convergence.\n",
"maxiter : int, optional\n",
" Maximum number of iterations to perform.\n",
"maxfun : number, optional\n",
" Maximum number of function evaluations to make.\n",
"full_output : bool, optional\n",
" Set to True if fopt and warnflag outputs are desired.\n",
"disp : bool, optional\n",
" Set to True to print convergence messages.\n",
"retall : bool, optional\n",
" Set to True to return list of solutions at each iteration.\n",
"\n",
"Returns\n",
"-------\n",
"xopt : ndarray\n",
" Parameter that minimizes function.\n",
"fopt : float\n",
" Value of function at minimum: ``fopt = func(xopt)``.\n",
"iter : int\n",
" Number of iterations performed.\n",
"funcalls : int\n",
" Number of function calls made.\n",
"warnflag : int\n",
" 1 : Maximum number of function evaluations made.\n",
" 2 : Maximum number of iterations reached.\n",
"allvecs : list\n",
" Solution at each iteration.\n",
"\n",
"See also\n",
"--------\n",
"minimize: Interface to minimization algorithms for multivariate\n",
" functions. See the 'Nelder-Mead' `method` in particular.\n",
"\n",
"Notes\n",
"-----\n",
"Uses a Nelder-Mead simplex algorithm to find the minimum of function of\n",
"one or more variables.\n",
"\n",
"This algorithm has a long history of successful use in applications.\n",
"But it will usually be slower than an algorithm that uses first or\n",
"second derivative information. In practice it can have poor\n",
"performance in high-dimensional problems and is not robust to\n",
"minimizing complicated functions. Additionally, there currently is no\n",
"complete theory describing when the algorithm will successfully\n",
"converge to the minimum, or how fast it will if it does.\n",
"\n",
"References\n",
"----------\n",
".. [1] Nelder, J.A. and Mead, R. (1965), \"A simplex method for function\n",
" minimization\", The Computer Journal, 7, pp. 308-313\n",
"\n",
".. [2] Wright, M.H. (1996), \"Direct Search Methods: Once Scorned, Now\n",
" Respectable\", in Numerical Analysis 1995, Proceedings of the\n",
" 1995 Dundee Biennial Conference in Numerical Analysis, D.F.\n",
" Griffiths and G.A. Watson (Eds.), Addison Wesley Longman,\n",
" Harlow, UK, pp. 191-208.\n"
]
}
],
"source": [
"np.info(optimize.fmin)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以用 `lookfor` 来查询特定关键词相关的函数:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Search results for 'resize array'\n",
"---------------------------------\n",
"numpy.chararray.resize\n",
" Change shape and size of array in-place.\n",
"numpy.ma.resize\n",
" Return a new masked array with the specified size and shape.\n",
"numpy.oldnumeric.ma.resize\n",
" The original array's total size can be any size.\n",
"numpy.resize\n",
" Return a new array with the specified shape.\n",
"numpy.chararray\n",
" chararray(shape, itemsize=1, unicode=False, buffer=None, offset=0,\n",
"numpy.memmap\n",
" Create a memory-map to an array stored in a *binary* file on disk.\n",
"numpy.ma.mvoid.resize\n",
" .. warning::\n"
]
}
],
"source": [
"np.lookfor(\"resize array\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"还可以指定查找的模块:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Search results for 'remove path'\n",
"--------------------------------\n",
"os.removedirs\n",
" removedirs(path)\n",
"os.walk\n",
" Directory tree generator.\n"
]
}
],
"source": [
"np.lookfor(\"remove path\", module=\"os\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 04-scipy/04.02-interpolation-with-scipy.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 插值"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"设置 **`Numpy`** 浮点数显示格式:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"np.set_printoptions(precision=2, suppress=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"从文本中读入数据,数据来自 http://kinetics.nist.gov/janaf/html/C-067.txt ,保存为结构体数组:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data = np.genfromtxt(\"JANAF_CH4.txt\", \n",
" delimiter=\"\\t\", # TAB 分隔\n",
" skiprows=1, # 忽略首行\n",
" names=True, # 读入属性\n",
" missing_values=\"INFINITE\", # 缺失值\n",
" filling_values=np.inf) # 填充缺失值"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"显示部分数据:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.0\t0.0\n",
"100.0\t33.258\n",
"200.0\t33.473\n",
"250.0\t34.216\n",
"298.15\t35.639\n",
"300.0\t35.708\n",
"350.0\t37.874\n",
"...\t...\n"
]
}
],
"source": [
"for row in data[:7]:\n",
" print \"{}\\t{}\".format(row['TK'], row['Cp'])\n",
"print \"...\\t...\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"绘图:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"p = plt.plot(data['TK'], data['Cp'], 'kx')\n",
"t = plt.title(\"JANAF data for Methane $CH_4$\")\n",
"a = plt.axis([0, 6000, 30, 120])\n",
"x = plt.xlabel(\"Temperature (K)\")\n",
"y = plt.ylabel(r\"$C_p$ ($\\frac{kJ}{kg K}$)\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 插值"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"假设我们要对这组数据进行插值。\n",
"\n",
"先导入一维插值函数 `interp1d`:\n",
"\n",
" interp1d(x, y)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from scipy.interpolate import interp1d"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ch4_cp = interp1d(data['TK'], data['Cp'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`interp1d` 的返回值可以像函数一样接受输入,并返回插值的结果。\n",
"\n",
"单个输入值,注意返回的是数组:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array(39.565144000000004)"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ch4_cp(382.2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"输入数组,返回的是对应的数组:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 10.71, 36.71])"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ch4_cp([32.2,323.2])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"默认情况下,输入值要在插值允许的范围内,否则插值会报错:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "ValueError",
"evalue": "A value in x_new is above the interpolation range.",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mch4_cp\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m8752\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32md:\\Miniconda\\lib\\site-packages\\scipy\\interpolate\\polyint.pyc\u001b[0m in \u001b[0;36m__call__\u001b[1;34m(self, x)\u001b[0m\n\u001b[0;32m 77\u001b[0m \"\"\"\n\u001b[0;32m 78\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx_shape\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_prepare_x\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 79\u001b[1;33m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_evaluate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 80\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_finish_y\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx_shape\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 81\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32md:\\Miniconda\\lib\\site-packages\\scipy\\interpolate\\interpolate.pyc\u001b[0m in \u001b[0;36m_evaluate\u001b[1;34m(self, x_new)\u001b[0m\n\u001b[0;32m 496\u001b[0m \u001b[1;31m# The behavior is set by the bounds_error variable.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 497\u001b[0m \u001b[0mx_new\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0masarray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx_new\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 498\u001b[1;33m \u001b[0mout_of_bounds\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_check_bounds\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx_new\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 499\u001b[0m \u001b[0my_new\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_call\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx_new\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 500\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my_new\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32md:\\Miniconda\\lib\\site-packages\\scipy\\interpolate\\interpolate.pyc\u001b[0m in \u001b[0;36m_check_bounds\u001b[1;34m(self, x_new)\u001b[0m\n\u001b[0;32m 526\u001b[0m \"range.\")\n\u001b[0;32m 527\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbounds_error\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mabove_bounds\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0many\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 528\u001b[1;33m raise ValueError(\"A value in x_new is above the interpolation \"\n\u001b[0m\u001b[0;32m 529\u001b[0m \"range.\")\n\u001b[0;32m 530\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mValueError\u001b[0m: A value in x_new is above the interpolation range."
]
}
],
"source": [
"ch4_cp(8752)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"但我们可以通过参数设置允许超出范围的值存在:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ch4_cp = interp1d(data['TK'], data['Cp'], \n",
" bounds_error=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不过由于超出范围,所以插值的输出是非法值:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array(nan)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ch4_cp(8752)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以使用指定值替代这些非法值:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ch4_cp = interp1d(data['TK'], data['Cp'], \n",
" bounds_error=False, fill_value=-999.25)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array(-999.25)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ch4_cp(8752)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 线性插值"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`interp1d` 默认的插值方法是线性,关于线性插值的定义,请参见:\n",
"\n",
"- 维基百科-线性插值: https://zh.wikipedia.org/wiki/%E7%BA%BF%E6%80%A7%E6%8F%92%E5%80%BC\n",
"- 百度百科-线性插值: http://baike.baidu.com/view/4685624.htm\n",
"\n",
"其基本思想是,已知相邻两点 $x_1,x_2$ 对应的值 $y_1,y_2$ ,那么对于 $(x_1,x_2)$ 之间的某一点 $x$ ,线性插值对应的值 $y$ 满足:点 $(x,y)$ 在 $(x_1,y_1),(x_2,y_2)$ 所形成的线段上。\n",
"\n",
"应用线性插值:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"T = np.arange(100,355,5)\n",
"plt.plot(T, ch4_cp(T), \"+k\")\n",
"p = plt.plot(data['TK'][1:7], data['Cp'][1:7], 'ro', markersize=8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"其中红色的圆点为原来的数据点,黑色的十字点为对应的插值点,可以明显看到,相邻的数据点的插值在一条直线上。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 多项式插值"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我们可以通过 `kind` 参数来调节使用的插值方法,来得到不同的结果:\n",
"\n",
"- `nearest` 最近邻插值\n",
"- `zero` 0阶插值\n",
"- `linear` 线性插值\n",
"- `quadratic` 二次插值\n",
"- `cubic` 三次插值\n",
"- `4,5,6,7` 更高阶插值\n",
"\n",
"最近邻插值:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cp_ch4 = interp1d(data['TK'], data['Cp'], kind=\"nearest\")\n",
"p = plt.plot(T, cp_ch4(T), \"k+\")\n",
"p = plt.plot(data['TK'][1:7], data['Cp'][1:7], 'ro', markersize=8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"0阶插值:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cp_ch4 = interp1d(data['TK'], data['Cp'], kind=\"zero\")\n",
"p = plt.plot(T, cp_ch4(T), \"k+\")\n",
"p = plt.plot(data['TK'][1:7], data['Cp'][1:7], 'ro', markersize=8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"二次插值:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cp_ch4 = interp1d(data['TK'], data['Cp'], kind=\"quadratic\")\n",
"p = plt.plot(T, cp_ch4(T), \"k+\")\n",
"p = plt.plot(data['TK'][1:7], data['Cp'][1:7], 'ro', markersize=8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"三次插值:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cp_ch4 = interp1d(data['TK'], data['Cp'], kind=\"cubic\")\n",
"p = plt.plot(T, cp_ch4(T), \"k+\")\n",
"p = plt.plot(data['TK'][1:7], data['Cp'][1:7], 'ro', markersize=8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"事实上,我们可以使用更高阶的多项式插值,只要将 `kind` 设为对应的数字即可:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"四次多项式插值:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cp_ch4 = interp1d(data['TK'], data['Cp'], kind=4)\n",
"p = plt.plot(T, cp_ch4(T), \"k+\")\n",
"p = plt.plot(data['TK'][1:7], data['Cp'][1:7], 'ro', markersize=8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以参见:\n",
"\n",
"- 维基百科-多项式插值:https://zh.wikipedia.org/wiki/%E5%A4%9A%E9%A1%B9%E5%BC%8F%E6%8F%92%E5%80%BC\n",
"- 百度百科-插值法:http://baike.baidu.com/view/754506.htm\n",
"\n",
"对于二维乃至更高维度的多项式插值:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy.interpolate import interp2d, interpnd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"其使用方法与一维类似。"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"### 径向基函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"关于径向基函数,可以参阅:\n",
"- 维基百科-Radial basis fucntion:https://en.wikipedia.org/wiki/Radial_basis_function\n",
"\n",
"径向基函数,简单来说就是点 $x$ 处的函数值只依赖于 $x$ 与某点 $c$ 的距离:\n",
"\n",
"$$\\Phi(x,c) = \\Phi(\\|x-c\\|)$$"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x = np.linspace(-3,3,100)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"常用的径向基(`RBF`)函数有:\n",
"\n",
"高斯函数:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(x, np.exp(-1 * x **2))\n",
"t = plt.title(\"Gaussian\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`Multiquadric` 函数:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nJJwSuYhIwv0/gG56R7Cwt98AAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(x, np.sqrt(1 + x **2))\n",
"t = plt.title(\"Multiquadric\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`Inverse Multiquadric` 函数:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n9/9saTRo/aYs3AAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(x, 1. / np.sqrt(1 + x **2))\n",
"t = plt.title(\"Inverse Multiquadric\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 径向基函数插值"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于径向基函数,其插值的公式为:\n",
"\n",
"$$\n",
"f(x) = \\sum_j n_j \\Phi(\\|x-x_j\\|)\n",
"$$\n",
"\n",
"我们通过数据点 $x_j$ 来计算出 $n_j$ 的值,来计算 $x$ 处的插值结果。"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy.interpolate.rbf import Rbf"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `multiquadric` 核的:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cp_rbf = Rbf(data['TK'], data['Cp'], function = \"multiquadric\")\n",
"plt.plot(data['TK'], data['Cp'], 'k+')\n",
"p = plt.plot(data['TK'], cp_rbf(data['TK']), 'r-')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `gaussian` 核:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nwgAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cp_rbf = Rbf(data['TK'], data['Cp'], function = \"gaussian\")\n",
"plt.plot(data['TK'], data['Cp'], 'k+')\n",
"p = plt.plot(data['TK'], cp_rbf(data['TK']), 'r-')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `nverse_multiquadric` 核:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cp_rbf = Rbf(data['TK'], data['Cp'], function = \"inverse_multiquadric\")\n",
"plt.plot(data['TK'], data['Cp'], 'k+')\n",
"p = plt.plot(data['TK'], cp_rbf(data['TK']), 'r-')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不同的 `RBF` 核的结果也不同。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 高维 `RBF` 插值"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from mpl_toolkits.mplot3d import Axes3D"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"三维数据点:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"x, y = np.mgrid[-np.pi/2:np.pi/2:5j, -np.pi/2:np.pi/2:5j]\n",
"z = np.cos(np.sqrt(x**2 + y**2))"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(12,6))\n",
"ax = fig.gca(projection=\"3d\")\n",
"ax.scatter(x,y,z)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"3维 `RBF` 插值:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"zz = Rbf(x, y, z)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nBAKBafl/CyJH4aoVOLIAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"xx, yy = np.mgrid[-np.pi/2:np.pi/2:50j, -np.pi/2:np.pi/2:50j]\n",
"fig = plt.figure(figsize=(12,6))\n",
"ax = fig.gca(projection=\"3d\")\n",
"ax.plot_surface(xx,yy,zz(xx,yy),rstride=1, cstride=1, cmap=plt.cm.jet)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 04-scipy/04.03-statistics-with-scipy.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 概率统计方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 简介"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**`Python`** 中常用的统计工具有 **`Numpy, Pandas, PyMC, StatsModels`** 等。\n",
"\n",
"**`Scipy`** 中的子库 `scipy.stats` 中包含很多统计上的方法。\n",
"\n",
"导入 `numpy` 和 `matplotlib`:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"heights = array([1.46, 1.79, 2.01, 1.75, 1.56, 1.69, 1.88, 1.76, 1.88, 1.78])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`Numpy` 自带简单的统计方法:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"mean, 1.756\n",
"min, 1.46\n",
"max, 2.01\n",
"standard deviation, 0.150811140172\n"
]
}
],
"source": [
"print 'mean, ', heights.mean()\n",
"print 'min, ', heights.min()\n",
"print 'max, ', heights.max()\n",
"print 'standard deviation, ', heights.std()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"导入 **`Scipy`** 的统计模块:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import scipy.stats.stats as st"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"其他统计量:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"median, 1.77\n",
"mode, (array([ 1.88]), array([ 2.]))\n",
"skewness, -0.393524456473\n",
"kurtosis, -0.330672097724\n",
"and so many more...\n"
]
}
],
"source": [
"print 'median, ', st.nanmedian(heights) # 忽略nan值之后的中位数\n",
"print 'mode, ', st.mode(heights) # 众数及其出现次数\n",
"print 'skewness, ', st.skew(heights) # 偏度\n",
"print 'kurtosis, ', st.kurtosis(heights) # 峰度\n",
"print 'and so many more...'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 概率分布"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"常见的[连续概率分布](https://zh.wikipedia.org/wiki/Category:%E8%BF%9E%E7%BB%AD%E5%88%86%E5%B8%83)有:\n",
"\n",
"- 均匀分布\n",
"- 正态分布\n",
"- 学生`t`分布\n",
"- `F`分布\n",
"- `Gamma`分布\n",
"- ...\n",
"\n",
"[离散概率分布](https://zh.wikipedia.org/wiki/Category:%E7%A6%BB%E6%95%A3%E5%88%86%E5%B8%83):\n",
"\n",
"- 伯努利分布\n",
"- 几何分布\n",
"- ...\n",
"\n",
"这些都可以在 `scipy.stats` 中找到。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 连续分布"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 正态分布"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"以[正态分布](https://zh.wikipedia.org/wiki/%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83)为例,先导入正态分布:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy.stats import norm"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"它包含四类常用的函数:\n",
"\n",
"- `norm.cdf` 返回对应的[累计分布函数](https://zh.wikipedia.org/wiki/%E7%B4%AF%E7%A7%AF%E5%88%86%E5%B8%83%E5%87%BD%E6%95%B0)值\n",
"- `norm.pdf` 返回对应的[概率密度函数](https://zh.wikipedia.org/wiki/%E6%A9%9F%E7%8E%87%E5%AF%86%E5%BA%A6%E5%87%BD%E6%95%B8)值\n",
"- `norm.rvs` 产生指定参数的随机变量\n",
"- `norm.fit` 返回给定数据下,各参数的[最大似然估计](https://zh.wikipedia.org/wiki/%E6%9C%80%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1)(MLE)值\n",
"\n",
"从正态分布产生500个随机点:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"numpy.ndarray"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x_norm = norm.rvs(size=500)\n",
"type(x_norm)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"直方图:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"counts, [ 7. 21. 42. 97. 120. 91. 64. 38. 17. 3.]\n",
"bin centers [-2.68067801 -2.13266147 -1.58464494 -1.0366284 -0.48861186 0.05940467\n",
" 0.60742121 1.15543774 1.70345428 2.25147082 2.79948735]\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEACAYAAACj0I2EAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAD8dJREFUeJzt3X+MZWV9x/H3x12pWH+slGQXYQ3YQpGGWk1r/cOG6w/M\nalqgfxQ0qVm1NrHEahtr3ZVEJmlqUdNqm8akqUJWG2ioGgKpqUwpN2pi0OqiuMu6aLIRMDvUH2v9\nEQK43/4xBxyns7Mz99eZefb9SiY559zn3Od7Zu79zHOfc+69qSokSZvfk/ouQJI0GQa6JDXCQJek\nRhjoktQIA12SGmGgS1IjVg30JNcnWUhyz5Jt709yb5KvJPlkkmcuuW1vkvuSHEryymkWLkn6eScb\nod8A7Fq27Xbg16rq+cBhYC9AkouAq4CLun0+lMRXAJI0I6sGblV9Fvj+sm3zVXW8W70LOKdbvhy4\nqaoeraojwDeAF022XEnSiYw7gn4j8Klu+dnAA0tuewA4e8z7lySt0ciBnuQa4JGqunGVZn6ugCTN\nyNZRdkryeuDVwMuXbH4Q2Llk/Zxu2/J9DXlJGkFVZbXb1z1CT7ILeAdweVU9vOSmW4HXJDktyXnA\n+cAXTlBUsz/XXntt7zW0dnzdo2ZGP9cuWW7vsdry47PlY6ta2zh41RF6kpuAS4Azk9zfPdr3AqcB\n80kAPl9VV1fVwSQ3AweBx4Cra61VSJLGtmqgV9VrV9h8/Srt3wO8Z9yiJEnr53XiEzYYDPouYapa\nPz4Y9F3AVLX892v52NYqs54VSeJMjNZlcWqvj8dM1jx3KU1bEmrSJ0UlSRuTgS5JjTDQJakRBrok\nNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1Ij\nDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjVg10JNcn2QhyT1L\ntp2RZD7J4SS3J9m25La9Se5LcijJK6dZuCTp551shH4DsGvZtj3AfFVdANzRrZPkIuAq4KJunw8l\n8RWAJM3IqoFbVZ8Fvr9s82XAvm55H3BFt3w5cFNVPVpVR4BvAC+aXKmSpNWMMoLeXlUL3fICsL1b\nfjbwwJJ2DwBnj1GbJGkdxpoSqaoCarUm49y/JGntto6wz0KSHVV1NMlZwEPd9geBnUvandNt+3/m\n5uaeWB4MBgwGgxHKkKR2DYdDhsPhuvbJ4iB7lQbJucBtVXVxt/4+4LtV9d4ke4BtVbWnOyl6I4vz\n5mcD/wn8Si3rIMnyTdKqktDPi73gY1UbRRKqKqu1WXWEnuQm4BLgzCT3A+8GrgNuTvJHwBHgSoCq\nOpjkZuAg8BhwtcktSbNz0hH6xDt0hK51coQurW2E7nXiktSIUU6K6hS0OEqWtJEZ6FqHvqYf/Gci\nrYVTLpLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIa4Vv/pVX0+Rk2\nftKj1stAl1bl59do83DKRZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGg\nS1IjDHRJaoSBLkmNMNAlqREGuiQ1YuRAT7I3yYEk9yS5MckvJDkjyXySw0luT7JtksVKkk5spEBP\nci7wx8ALq+piYAvwGmAPMF9VFwB3dOuSpBkYdYT+v8CjwFOTbAWeCnwbuAzY17XZB1wxdoWSpDUZ\nKdCr6nvA3wLfYjHIj1XVPLC9qha6ZgvA9olUKUk6qZG+gi7JLwN/BpwL/AD4tyR/uLRNVVWSFb+/\na25u7onlwWDAYDAYpQxJatZwOGQ4HK5rn4zyRbRJrgIurao3deuvA14MvAx4aVUdTXIWcGdVXbhs\n3/LLbzefxS9L7vP7Nfvou99j9nmipZJQVat+2eyoc+iHgBcnOT2Lz/RXAAeB24DdXZvdwC0j3r8k\naZ1GGqEDJPlLFkP7OPBl4E3A04GbgecAR4Arq+rYsv0coW9CjtBn37fPEy21lhH6yIE+KgN9czLQ\nZ9+3zxMtNc0pF0nSBmOgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0\nSWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJek\nRhjoktQIA12SGrG17wIkrSxJL/1WVS/9anwGurRh9RGs/fwT0WQ45SJJjRg50JNsS/LxJPcmOZjk\nt5OckWQ+yeEktyfZNsliJUknNs4I/e+BT1XV84BfBw4Be4D5qroAuKNblyTNQEY5AZLkmcD+qnru\nsu2HgEuqaiHJDmBYVRcua1OedNl8Fk/Q9fV366vvU/OYfX5uTEmoqlVPcow6Qj8P+J8kNyT5cpJ/\nTvKLwPaqWujaLADbR7x/SdI6jXqVy1bghcBbquqLST7IsumVqqokK/6rn5ube2J5MBgwGAxGLEOS\n2jQcDhkOh+vaZ9Qplx3A56vqvG79JcBe4LnAS6vqaJKzgDudcmmDUy6nSt9OuWxUU5tyqaqjwP1J\nLug2vQI4ANwG7O627QZuGeX+JUnrN9IIHSDJ84EPA6cB3wTeAGwBbgaeAxwBrqyqY8v2c4S+CTlC\nP1X6doS+Ua1lhD5yoI/KQN+cDPRTpW8DfaOa5lUukqQNxkCXpEYY6JLUCANdkhphoEtSIwx0SWqE\ngS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjo\nktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhoxVqAn2ZJkf5LbuvUz\nkswnOZzk9iTbJlOmJOlkxh2hvw04CFS3vgeYr6oLgDu6dU1Ikt5+JG18Iwd6knOAVwMfBh5/xl8G\n7OuW9wFXjFWdVlA9/Uja6MYZoX8AeAdwfMm27VW10C0vANvHuH9J0jpsHWWnJL8LPFRV+5MMVmpT\nVZVkxaHd3NzcE8uDwYDBYMW7kKRT1nA4ZDgcrmufVK3/5XSS9wCvAx4DngI8A/gk8FvAoKqOJjkL\nuLOqLly2b43Sp+jmsvv63Z2KfZ+ax+zzc2NKQlWtekJrpCmXqnpXVe2sqvOA1wD/VVWvA24FdnfN\ndgO3jHL/kqT1m9R16I//S78OuDTJYeBl3bokaQZGmnIZq0OnXEbmlMup0m+fffd7iarZcGJrmXIZ\n6aSopJb1+U9M4/Ct/5LUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIa\nYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREG\nuiQ1wkCXpEYY6JLUCANdkhphoEtSI0YK9CQ7k9yZ5ECSryV5a7f9jCTzSQ4nuT3JtsmWK0k6kVTV\n+ndKdgA7quruJE8DvgRcAbwB+E5VvS/JO4FnVdWeZfvWKH0KkgB9/e5Oxb495ln3bTacWBKqKqu1\nGWmEXlVHq+rubvlHwL3A2cBlwL6u2T4WQ16SNANbx72DJOcCLwDuArZX1UJ30wKwfdz734gWR8qS\ntLGMFejddMsngLdV1Q+XBl1VVZKGXz/19XJYklY2cqAneTKLYf6xqrql27yQZEdVHU1yFvDQSvvO\nzc09sTwYDBgMBqOWIUlNGg6HDIfDde0z6knRsDhH/t2q+vMl29/XbXtvkj3AthZPivZ3cvJUPEnX\nZ98e86z73uzZME1rOSk6aqC/BPgM8FV+9tffC3wBuBl4DnAEuLKqji3b10Afveee+j1V+/aYZ933\nZs+GaZpaoI/DQB+r5576PVX79phn3fdmz4Zpmtpli5KkjWfsyxYlaVL6uiS4lVcGBrqkDcTLgcfh\nlIskNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGg\nS1IjDHRJaoSBLkmNMNAlqRGb8gsuDhw4wJvf/HYefXT2fW/ZMvs+JWktNmWgHzt2jP37v8WPf/x3\nM+/79NP/ZuZ9StJabMpAB9i69VnArh763TfzPiVpLZxDl6RGGOiS1AgDXZIaYaBLUiMMdElqxKa9\nykWSJiVJb31X1cTua+Ij9CS7khxKcl+Sd076/iVp8qqnn8maaKAn2QL8I4sXiF8EvDbJ8ybZx8Y3\n7LuAKRv2XcCUDfsuYMqGfRcwRcO+C+jdpEfoLwK+UVVHqupR4F+ByyfcxwY37LuAKRv2XcCUDfsu\nYMqGfRcwRcO+C+jdpAP9bOD+JesPdNskSVM26ZOik58UOoGHHz7IM57xe7Pq7gmPPPKlmfcpSWuR\nSZ5hTfJiYK6qdnXre4HjVfXeJW1mFvqS1JKqWvVynEkH+lbg68DLgW8DXwBeW1X3TqwTSdKKJjrl\nUlWPJXkL8GlgC/ARw1ySZmOiI3RJUn96eet/kr9K8pUkdye5I8nOPuqYliTvT3Jvd4yfTPLMvmua\npCR/kORAkp8meWHf9UxCy2+IS3J9koUk9/RdyzQk2Znkzu4x+bUkb+27pklK8pQkd3V5eTDJCb9l\np5cRepKnV9UPu+U/BZ5fVW+aeSFTkuRS4I6qOp7kOoCq2tNzWROT5ELgOPBPwNur6ss9lzSW7g1x\nXwdeATwIfJGGzv0k+R3gR8BHq+rivuuZtCQ7gB1VdXeSpwFfAq5o5e8HkOSpVfWT7jzl54C/qKrP\nLW/Xywj98TDvPA34Th91TEtVzVfV8W71LuCcPuuZtKo6VFWH+65jgpp+Q1xVfRb4ft91TEtVHa2q\nu7vlHwH3As/ut6rJqqqfdIunsXh+8nsrtevt0xaT/HWSbwG7gev6qmMG3gh8qu8itCrfENeIJOcC\nL2BxINWMJE9KcjewANxZVQdXaje1T1tMMg/sWOGmd1XVbVV1DXBNkj3AB4A3TKuWaTjZ8XVtrgEe\nqaobZ1rcBKzl+BrilQEN6KZbPg68rRupN6N7xf8b3fm4TycZVNVwebupBXpVXbrGpjeyCUewJzu+\nJK8HXs3iNfmbzjr+fi14EFh6Yn4ni6N0bRJJngx8AviXqrql73qmpap+kOTfgd9khQ+v6esql/OX\nrF4O7O+jjmlJsgt4B3B5VT3cdz1T1t8HSU/OfwPnJzk3yWnAVcCtPdekNcrih5l/BDhYVR/su55J\nS3Jmkm3d8unApZwgM/u6yuXjwK8CPwW+CfxJVT0080KmJMl9LJ68ePzExeer6uoeS5qoJL8P/ANw\nJvADYH9VvarfqsaT5FXAB/nZG+JOeGnYZpPkJuAS4JeAh4B3V9UN/VY1OUleAnwG+Co/mz7bW1X/\n0V9Vk5PkYmAfiwPwJwEfq6r3r9jWNxZJUhv8TlFJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANd\nkhphoEtSI/4P1qxllG6H6EYAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"h = hist(x_norm)\n",
"print 'counts, ', h[0]\n",
"print 'bin centers', h[1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"归一化直方图(用出现频率代替次数),将划分区间变为 `20`(默认 `10`):"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"h = hist(x_norm, normed=True, bins=20)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在这组数据下,正态分布参数的最大似然估计值为:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"mean, -0.0426135499965\n",
"x_std, 0.950754110144\n"
]
}
],
"source": [
"x_mean, x_std = norm.fit(x_norm)\n",
"\n",
"print 'mean, ', x_mean\n",
"print 'x_std, ', x_std"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"将真实的概率密度函数与直方图进行比较:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAEACAYAAACuzv3DAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmYFNX1//H3cRCU4BqNRsAliivIogJu0CgmIwaB4Eai\nAVFE1EQTYxRFnUT9qj93giAq7lHUIIsoEE3SuERFyOCCIKAhERBFMSgCwsj5/VEDDsNMd09v1dX9\neT1PP0xP16176mHqzJlbt26ZuyMiItG1VdgBiIhIZpTIRUQiTolcRCTilMhFRCJOiVxEJOKUyEVE\nIi5pIjezcjObZ2YLzOzyeraJmVmlmb1rZvGsRykiIvWyRPPIzawMeB/oDiwB3gT6ufvcGtvsCLwK\n/MTdF5vZLu7+WW7DFhGRjZJV5B2Bhe6+yN3XA2OBXrW2+Tkwzt0XAyiJi4jkV7JE3hz4qMb7xdXf\nq6kVsLOZ/cPMZprZWdkMUEREEmuU5PNU7t/fGugAHA80BV4zs9fdfUGmwYmISHLJEvkSoGWN9y0J\nqvKaPgI+c/c1wBozewloC2yWyM1Mi7qIiKTB3S3R58mGVmYCrcxsbzNrDJwOTKq1zUTgGDMrM7Om\nQCfgvXqCKdrXtddeG3oMOj4dm46v+F6pSFiRu3uVmV0ETAPKgDHuPtfMBld/Ptrd55nZVOBtYANw\nn7vXmchFRCT7kg2t4O5TgCm1vje61vtbgVuzG5qIiKRCd3ZmSSwWCzuEnCrm4yvmYwMdXylIeENQ\nVjsy83z1JSJSLMwMz/Bip4iIFDglchGRiFMiFxGJOCVyEZGIUyIXEYk4JXIRkYhTIhcRiTglchGR\niFMiFxGJOCVyEZGIS7polkjUmCW8mzklWk5CokSJXIpUJok4818EIvmkoRURkYhTIhcRiTglchGR\niFMiFxGJOCVyEZGIUyIXEYk4JXIRkYhTIhcRiTglchGRiFMiFxGJOCVyEZGIUyIXEYk4JXIRkYhT\nIhcRibikidzMys1snpktMLPL6/g8ZmYrzayy+jUsN6GKiEhdEq5HbmZlwAigO7AEeNPMJrn73Fqb\nTnf3k3MUo4iIJJCsIu8ILHT3Re6+HhgL9KpjO63ELyISkmSJvDnwUY33i6u/V5MDR5nZW2b2vJkd\nnM0ARUQksWSPekvleVn/Alq6+2ozOxGYAOyfcWQiIpKSZIl8CdCyxvuWBFX5Ju7+VY2vp5jZSDPb\n2d1X1N5ZRUXFpq9jsRixWCyNkEVEilc8HicejzeojSV6WriZNQLeB44HlgIzgH41L3aa2W7Ap+7u\nZtYReMrd965jX64nk0s+mBmZPnxZP6tSKMwMd094HTJhRe7uVWZ2ETANKAPGuPtcMxtc/flo4BRg\niJlVAauBM7ISvYiIpCRhRZ7VjlSRS56oIpdikkpFrjs7RUQiTolcRCTilMhFRCJOiVxEJOKUyEVE\nIk6JXEQk4pTIRUQiTolcRCTilMhFRCJOiVxEJOKUyEVEIk6JXEQk4pTIRUQiTolcRCTilMhFRCJO\niVxEJOKUyEVEIk6JXEQk4pTIRUQiTolcRCTilMhFRCJOiVxEJOKUyEVEIk6JXEQk4pTIRUQiTolc\nRCTilMhFRCJOiVxEJOKUyEVEIi5pIjezcjObZ2YLzOzyBNsdYWZVZvaz7IYoIiKJJEzkZlYGjADK\ngYOBfmZ2UD3b3QxMBSwHcYqISD2SVeQdgYXuvsjd1wNjgV51bPcr4C/A8izHJyIiSSRL5M2Bj2q8\nX1z9vU3MrDlBch9V/S3PWnQiIpJUoySfp5KU7wSucHc3MyPB0EpFRcWmr2OxGLFYLIXdi2THrnxK\nLybSh/HsyX/r3MYxZgJMngzdu8M22+Q1RpF4PE48Hm9QG3OvP1ebWWegwt3Lq98PBTa4+801tvmQ\n75L3LsBqYJC7T6q1L0/Ul0i2BPVE8LPWnMX0YTx9GUc7ZjOVcp7hZ7zHwXW2bUQVXWnPXcceC2+/\nDSeeCD/7WfBvs2Z5PAqRgJnh7gmvPSZL5I2A94HjgaXADKCfu8+tZ/sHgWfd/Zk6PlMiLzFBQk1f\nuj8vZsapPMlvuZ1WLOBZevIMP+Ov/JhvSKXCtqDvTz6BCRPgmWfgtdeCCv2Pf4TWrdOKSyQdqSTy\nhEMr7l5lZhcB04AyYIy7zzWzwdWfj85atFKk0v3lneYvgf/8h8nAnlzH5dzMC5xAFVunt6/ddoPB\ng4PXihXw2GPQrRucdx4MGwbbbpvefkWyLGFFntWOVJGXnJpDHGm0blhFXlUFw4fD//0fV37+Obfy\nDetpnP2+P/4YLr4YKith9Gg47rg0+xBJTcZDK1kORom8xOQtkc+aFVTJO+4I99yD7b9/Bv2m2Pez\nz8JFFwUV+q23wi67ZNCfSP1SSeS6RV+ia80auPRS6NEjqJJffBFatcpP3z17wpw5sNNOwZj544/n\np1+ROqgil5zJaUX+xRdw8snBOPaoUbDrrlnqN4W+a5s5E37xCzjlFLj+esjwIq9ITarIpTgtXQpd\nu8Jhh8FTT22WxENx+OHwyivwwgvBEE9VVbjxSMlRIpdomT8fjj4a+vWDO+6ArQrkR3jXXeHvf4f/\n/AdOPRXWrg07IikhBXIWiKRg1qygEr/qKhg6tPCGMJo1C+4IbdIEysth5cqwI5ISoUQu0fDii8Hd\nlaNGwbnnhh1N/Ro3Di58tmkT/NL5+OOwI5ISoEQuhe+pp+DnP4enn4bevcOOJrmttgrmtJ9yChxz\nDHzwQdgRSZFLtmiWSLgmTIBLLgkuJLZtG3Y0qTML7v78wQ+Cueb//Ce0aBF2VFKklMilcM2YAYMG\nwdSp0UriNZ13Hvzvf3DSSfDyy7D99mFHJEVI88glZzKZz703xr9/+MPgNviePfPWb/Ue0l6wq07u\nMGQILFoU3BG6dZprv0hJ0jxyiaQd+YLnAa68ssFJvCCZwYgRwb8XXhgkdpEsUkUuOZNOZdyYb5hK\nOZXE+W0Gy9gWVEW+0VdfwbHHBnPgL6/3OeYim1FFLhHj3M+5fMFOXBZ2KLmw3Xbw3HNw993w5JNh\nRyNFRBc7pWBUUMH+zKcb/2AD3ws7nNxo3vy7x8g1bx5MTxTJkCpyKQj9eYizeJSTmcQamoYdTm4d\neig8+mgwz3z+/LCjkSKgMXLJmVTHqg9jJs/Tgy68xPscuLF1Ro96K8gx8truvRfuugvefBOaFvkv\nL0mbHiwhoUoloW7PSmZxGEO5kb9was3WxZ/I3aF//+C2/vvvz31/EklK5BKq5AnVGcsZrGBnLmBU\n7dbFn8gBVq0KluO95ppgTXORWjJ++LJILg3iPg5kHp15PexQtmAZrKzYoF8CzZoFM1hOOAGOOAL2\n3z/tfqV0qSKXnElUGbfhbf7G8RzLyzXGxTdrHWpFnreHRm80alQwZv7aa7DNNmn2LcVI88ilIDXl\na57kdH7L7fUk8RJ0/vmw337wu9+FHYlEkCpyyZn6KuMHOBuAgTyYqHVkK/J07QD8b5994JZboG/f\ntPcjxUVj5FJwzuIROvM6hzMz7FByKL1fAiuxYLz8pJOgQwfYZ58sxyXFShW55EztyvgA5vEyx3Ic\nf+dd2iRrnWHvYVbkGY6v33EHjB0bLHvbuHGa+5JioemHEqqaiXxr1vEGnRjFEO7jvFRaE04yDbPv\n6kTuDiefDK1bw403prkvKRZK5BKqmon8Wio4nJn05FlSq7ZLOJEDfPJJ8DCNiROhU6c09yfFQIlc\nMpbJfOqA055/MZVy2jGbj9kj1Z4p6UQOwbNKr70WKis1JbGEZWX6oZmVm9k8M1tgZlssomxmvczs\nLTOrNLNZZnZcJkFLIfI0X8H64g8xgN9yewOSuABw2mnQpk1w16dIAgkrcjMrA94HugNLgDeBfu4+\nt8Y233P3r6u/bgOMd/f96tiXKvIIymwqn3EdV9Gad+nDeBp2AVMVOQDLlwerJY4bB0cdleZ+Jcqy\nUZF3BBa6+yJ3Xw+MBXrV3GBjEq/WDPgsnWCl+BxGcBv++dxD5rNQStSuuwaPiRswAFavDjsaKVDJ\nEnlz4KMa7xdXf28zZtbbzOYCU4BfZy88iarGfMPDwCXcySfsHnY40da3b7Cw1rBhYUciBSrZDUEp\n/Y3o7hOACWZ2LPAocEBd21VUVGz6OhaLEYvFUgpSoqeCCuYBYzkj7FCKw4gRwXh5nz7Bcz+laMXj\nceLxeIPaJBsj7wxUuHt59fuhwAZ3vzlBmw+Aju7+ea3va4w8gtIZI+/IG0ykF4fyCctDGmsumjHy\nmiZODNZimT0bvlekj8KTLWRjjHwm0MrM9jazxsDpwKRanexr1XPUzKwDQO0kLqVjG9bwEAP4FX9i\nedjBFJtevaBzZ7jyyrAjkQKTcGjF3avM7CJgGlAGjHH3uWY2uPrz0UBf4Jdmth5YBfpbupRVUME7\ntKn1tB/JmrvuCmax9O0LXbqEHY0UCN0QJAk1ZGilHZVMpZw2vMNyfkCYQxRFObSy0fjxMHRoMMSi\nG4WKntYjl7wpo4r7GMTl3FydxCVn+vSBgw/WOiyyiSpySSjVivw33M5JPEd3XuS7OeOqyBvaNuVz\nZMkSaNcO4nE45JA0+5Mo0ForkrFUEvleLGImh9OZ1/mAmjf1KpE3tG2DzpFRo+Cxx4LlbrfSH9fF\nSkMrkgfOKIZwG5fWSuKSc4MHB//ee2+4cUjoVJFLQskq8jN4gqHcyGHMooqta7dO2DZJzyG1DbPv\nNB5vN2cOxGLBhc/mW9x0LUVAQyuSsUSJfCdWMIdD6M0EZlDXmtlK5A1tm9Y5cs01QUIfNy7NfqWQ\nKZFLxhIl8jEMZBXNuJjh9bWut20KPYfUNsy+01tYrAnwFnA5MEHnWNHRw5clZ7rxd7rzIocwJ+xQ\nikzDE/E3wHlM5zFi8OWXsP32WY9KCpsudkqDbcMaRjOYC7mbVWwXdjgCvERXpoJu3y9RSuTSYFdx\nA2/Rlsn0DDsUqeH3AM88A6+/HnYokmcaI5eEao+RH8hcXqILbXkrhUe3aYw8f22D9v7443DTTTBz\nJmxdexaRRJHmkUuWOfdwPn/gWj1/s1CdcQbstluwuJaUDFXkklDNinwAD3IBI+nM62ygLJXWRLWy\njWrc7g4LFwbL3c6aBXvtlcH+pBBo+qFkbGMi/z6fMYdDOJEpVNIh1dZENSFGNe5N59j118OMGcHD\nKEzPS40yDa1I1tzCZTzOzxuQxCVUl10GCxbAhAlhRyJ5oIpcEjIzuhDnUc7iEOY0cLphdCvbqMa9\n2Tk2fTqceSa89x5sp2miUaWKXDLWGLiH87mYuzRnPGq6doXu3YNb+KWoqSKXhIaZ0ZGe9GIiDb+F\nPLqVbVTj3uIc++yzYL3yKVOgg4bFokgXOyUzCxfyWatWHMYi/ks6sx+imxCjGned59iDD8LIkcGN\nQmWpzDaSQqKhFUmfO1x4ITdBmklcCsaAAdC0KdxzT9iRSI4okUvdxo6FZcvQbSVFwCxI4hUVsHRp\n2NFIDmhoRbb0xRfBw33Hj8eOPJLoDTNoaKVOV18N8+bB009n0Ifkm8bIJT3nnRes03H33Sk/fLlu\nUWwbZt85TuRr1sChh8Idd8BPf5pBP5JPSuTScK+8EqzXMWcO7LCDEnlk2gbtk55jf/sbDBwY/P82\na5ZBX5IvutgpDbNuXfBA3zvvhB12CDsayYXjjw/ml1dUhB2JZJEqcvnODTcEU9QmTdq0Pocq8qi0\nDdqndI4tXw6tW8PUqdC+fQb9ST5oaEVSV8+KeUrkUWkbtE/5HNPc8sjQ0Iqkxh3OPz94TJiWPS0N\nAwbA974Hd98ddiSSBSklcjMrN7N5ZrbAzC6v4/NfmNlbZva2mb1qZodmP1TJmT//GVasgF//OuxI\nJF/MYPRouO46WLw47GgkQ0mHVsysDHgf6A4sAd4E+rn73BrbHAm85+4rzawcqHD3zrX2o6GVQvT5\n58FaHJMnw+GHb/Gxhlai0jZo3+Bz7A9/gNmzYfz4DPqVXMrW0EpHYKG7L3L39cBYoFfNDdz9NXdf\nWf32DaBFOgFLCH7/ezj99DqTuJSAK66AuXO1bnnENUphm+bARzXeLwY6Jdj+HOD5TIKS7LEET4eJ\nAQ8DhwCrhg/PU0RSUJo0CYZYzjwTunXTtNOISiWRp/y3mpl1AwYCR9f1eUWNuauxWIxYLJbqriUj\nW/4XNuVr7udQhjCcVZyUoK0eE1b0unaFHj2Cv85Gjw47mpIXj8eJx+MNapPKGHlngjHv8ur3Q4EN\n7n5zre0OBZ4Byt19YR370Rh5COob476VS9mNTziLx5Ltoc72KfYewbZh9p2NuNOzPbCyRQt45JGg\nMpeCkcoYeSoV+UyglZntDSwFTgf61epoT4IkfmZdSVwKS0fe4Oc8ThveCTsUybr0fhF8icGoUTBo\nELz9drDsrURG0oud7l4FXARMA94DnnT3uWY22MwGV292DbATMMrMKs1sRs4ilow05hseYCCXcCef\ns0vY4Ugh+elPoVOnYJVEiRTd2Vnkag+tVHAt7ZhNbyaQ2p/iURxmKOWhlUz6hl2AdwimpTWkGtO5\nnTu6s1M204a3uYCRDGEUuogpW3I+w7mEJxjDITRmLcEvhmQvCZsSeYkoo4oxnMNQbuRj9gg7HClg\nT3I6H/IjhnJj2KFIijS0UuQ2Dq38jlsoZyrdeZGGVeNRHGYIe4gi+nHvwRJm047j+Dvv0iZpW53b\nuaPVDwUzoxXv80+OoiMz+Dc/augeiF5SK5yEmL+22e/7XO7jPO7lSF7j24QT3JTIc0lj5IIB9zGI\n6xmWRhKXUnY/5/IV2/Fbbg87FElCFXmRu9SMPhxNV6azgXTWnY5idVpYlW1+2uam7735NzPomGSI\nRRV5LqkiL3XvvssVwC95JM0kLqVuEftwBTfxKGfRmG/CDkfqoURerNatgzPPZChoSEUy8gAD+S97\nUkFF2KFIPZTIi1VFBey5J2PCjkOKgDGI+xjAQxzFq2EHI3XQGHkxevVVOOUUmD0b2313Cm3ctbDb\nhtl3YcfdiwncxqW0Yzar2G6ztjq3c0fTD0vRV19Bu3Zw223Qu3eGT/iBaCa1Ujzm/PQ9hoF8Sxnn\ncd9mbXVu544SeSk67zxYvz54SjqZPqoNopnUSvGY89P3dnzJW7Tl1wxnMj03tdW5nTvZWsZWomLy\nZPjrX4NlSEVy4Cu2pz8PM5YzaEtnPmPXsEMSVJEXj+XLoW1beOKJ4Ikv1VSRR6nv6MT9/7iMffmA\nvowDtlJFnkOaR14q3IMhlV/8YrMkLpIrw7ie/VjI2TwYdiiChlaKw/Dh8NFHMHZs2JFIiVhHE/rx\nBHFiDVq3XHJDFXnUzZgBN9wATz0VPBFdJE/e4xAu4xaeBli1KuxwSpoSeZStWAGnnx48+fxHuntT\n8u9hBvA6wJAhwRCfhEKJPKrc4eyzoVcv6NMn7GikhF0IUFkJDzwQdiglS2PkUXXHHbBsGTz9dNiR\nSIlbA8HPYZcucMQRcOihYYdUclSRR9Hrr8PNN8OTT0LjxmFHIwIHHRQUF6eeGtxdLHmleeRR8/nn\n0KED/OlPcPLJSTfXPPIo9R3duDed24MGwddfw5//DKYHfGeD5pEXmw0boH//oOpJIYmL5N3w4TBn\nDtx7b9iRlBRV5FFy000waRJMnw5bb51SE1XkUeo7unFvdm7Pnw9HHw1Tp8Jhh6W5T9lIFXkxmTgR\nRowI5ounmMRFQrH//kFF3rs3LF0adjQlQbNWomD27GDs8bnnoEWLsKMRSa5PH5g3LxgCfOklaNo0\n7IiKmoZWCt2yZdCpE9xyC5x2WoOba2glSn1HN+46z2334JrOmjXBDKutNACQDg2tRN2aNcENP+ec\nk1YSFwmVGdx3XzC8cu21YUdT1FJK5GZWbmbzzGyBmV1ex+cHmtlrZrbWzC7NfpglyB0GDoR994Wr\nrw47GpH0NGkC48fDY4/B44+HHU3RSjq0YmZlwPtAd2AJ8CbQz93n1thmV2AvoDfwhbvfVsd+Snpo\nxRo4p/ZqoAfQDVgLaa/3rKGVKPUd3biT/ny++y4cd1xw0f7II9PspzRla2ilI7DQ3Re5+3pgLNCr\n5gbuvtzdZwLr0462JHhKr1N5knPYk958zNqMTmyRAtG6NTz0EPTtC//5T9jRFJ1UEnlz4KMa7xdX\nf09yoCNvcDcXcjKT+ITdww5HJHt69IDLLoOePWHlyrCjKSqpJHKVhHlyKG8xiZPpz8O8TdvNPjOz\ntF4iBeWSSyAWg5NOCm7ll6xIZR75EqBljfctCaryBquoqNj0dSwWIxaLpbObonQA85jCiVzECKbQ\no44tMhn7FCkQZnDnnXDuucENQ88+C9tsE3ZUBSUejxOPxxvUJpWLnY0ILnYeDywFZlDrYmeNbSuA\nr3Sxc0uJLjruzb+ZTleu5joeoX9drettm0LPGbQNs28dc3T6TuFiZ23ffhs8Y3b1ahg3TncrJ5DK\nxc6UbggysxOBO4EyYIy732hmgwHcfbSZ7U4wm2V7YAPwFXCwu6+qsQ8l8jpOlD1Ywkt04TYuZRQX\n1Ne6zrYp9pxB2zD71jFHp+80EjnA+vXBxc+mTYPVEsvK0uy/uGUtkWcpGCXyWifKrnzKdLryAAO5\nlcsStd6ibQN6zqBtmH3rmKPTd5qJHGDtWvjpT2HPPeH++3X3Zx10Z2cB24kV/JUf8xSnJUniIoUv\n3Yvxtu22wdzy+fPh4ov13M80qSLPk5oV+XZ8yQucwCscw++4leQXJEuzytMxR6XvLFTzK1cGNwx1\n7x4s16wZV5uoIi9Au7GM6XRlBh1TTOIiJWCHHWDaNHjhBbjwwuBiqKRMFXmemBn7soBp/ISHGMD1\nDCP1JK4qL39tw+y7FOPe/BzYDhgPfAGcCXyTwh6KPa+oIi8gHYCX6MJNXMH1XI0qcZGNvlue4iuc\nHqzlW05jKl3Znv9t9vmWLwEl8vx44QWmABcwkvsZFHY0IgVtHU3oxxO8Qxteogs/RE8ZSkaJPNfG\njoUzz+QUYCK9w45GJBKcrfg1w3mS03mVo2nF/LBDKmhK5Ll0113BIkEvvsjLYcciEjnGjVzJ9Qxj\nOl05ghlhB1Sw9MzOXFi9Gi66CF5/HV55BfbaK+yIRCLrAc7hU37Ac5zEFdzEA5wTdkgFRxV5ti1Y\nECycv3YtzJihJC6SBZPpSRde4lJuYwwD2ZbVYYdUUJTIs2ncODjqKDj//GDtiGbNwo5IpGjM4yA6\nMoMmfMNrHMl+LAg7pIKhoZVsWL8eLr88eDbhlClw+OFhRyRSlL6mGWfyGIMZzT85iiFhB1QgVJFn\navHiYKH8+fNh1iwlcZGcM0ZzPicyhVsAfvMbWLcu7KBCpUSeLnd45BE47LBg9bZJk2DnncOOSqRk\nzOJwDgNYuDC4LlVZGXZIodHQSjo++CAYB//8c3j++SCZi0jefQFBEfXQQ1BeDv37Q0VFsMZ5CVFF\n3hDr18PNN0OnTvCTnwSzUpTERcJlBmefDe+8Ewx1tm4Nf/1r2FHllRbNStWbb8KgQbDbbnDPPbDP\nPg1qnuhRbym0DqltmH3rmKPTd7jHvEVemTIFLrgAjjkGbr8ddt01g/2HT08IyoZPPoHrrmPZ3Xdz\nKfB4RjuL5okSvbhL8ZjD7DvsY95SU+CPBCsoVgBjgPV1bBeFnKTVDzOxYgVccQUcdBCUldEaeDzh\nKmzJXiKSG1ueb6txfodzIrPozY+Zxz78kofYiiqK8ZxUIq/tyy/hj3+E/feHL76At96Cu+7i87Dj\nEpEGq6QD5UxjAA9xDmN4l9acylMYG8IOLas0tLLR6tVw991w663Bhcxrr4V99930cWZj3BDtP12j\nFncpHnOYfUflmJ0TeIHrGUZj1nE1b/Hshg0F/1i5ohsjHzFiJHPmpL+c5Y9/3JU+ffps/s0FC4KL\nlw8/DN26wR/+AAcfvEVbJfJSaRtm36UYdxjH7JzMJP5Ib9oedBAMGQK//GXwuLkCVHSJ/IgjTmDm\nzP2AA9JoHWfIkH0YOfIOqKqC556DkSODmwgGDoTBgxPORFEiL5W2YfZdinGHe8w+fXqQB6ZNg9NO\nC2a7tG2bQTzZl0oij+ANQT8DTkijnbPjqjlwww0wejS0aBH8p02cCNtsk+0gRSQKunQJXsuWwf33\nB3dp77lnUKX37h2Zhe8iWJH/noYk8n34kL6Moy8jaN3kU5r98qzgP6l9+wb1rYq8VNqG2Xcpxh1y\nRV47J1VVweTJcO+98OqrcNxx0Lcv9OwZ2tBLyU4/PIB5XMkNzKJD9XKXC7maE9npm7XYffdhHTpg\nZg16iUgJaNQoqMSffx4WLQq+fuopaNkSTjoJHnggWJqjwERwaGVLe7GIGPFNr0ZUMZ4+/IY7eIVj\n2EAZcEf11plUDiJSMnbaKVi7pX//YFryc88Fzxy45BJo1SpY9bRbNzj22NAvlEZuaKVy5qUcSAsO\nZyZdmU6MONuypkYaj/E+B7Bl4r0D+C1R/RNQceerbZh9l2LcBTa0kop16zi6SRNiQDegE/A+EAde\nBv4FLE5hN6n2nZVZK2ZWDtwJlAH3u/vNdWwzHDgRWA0McPct1pNMK5GvXh0shFNZCZWVzHlsLHuv\n/obF7EUl7ZlOV+LEmMeBJK+Ylcij1beOOTp9R/eY0y0ua14za8w3HMGbxIhzNK/SnkoaUUUl7Te9\nZtOO+exfPTrQsL4znrViZmXACKA7sAR408wmufvcGtv0APZz91Zm1gkYBXROKUIIkvWHHwZrCi9Y\nsPm/y5cHt8i3bw/t23N7y3/x1PvDWEWvlHefP3EgFnIMuRSneI8vTvEeG+j4cmsdTXiVY3iVYzZ9\nb3c+3pTG+zKO67ia5ixhEXuzcOND6kaOhP32C4ZpWrSArbdOO4ZkY+QdgYXuvgjAzMYCvYC5NbY5\nGXgYwN3fMLMdzWw3d/9ki70NGwZLlgSvpUuDf9esCeZvt2oVHFS7dnDKKcH7li2hrGxT87cfnsgq\nCnWd4Tg6WaIqTvEeG+j46periQzL+CFT+CFT6LHpe9uwhh/xIa1YwH5MDpb/GDcuKFyXLYPvfx+a\nN4c99ggZ7HGoAAAD/UlEQVT+3fhKQbJE3hz4qMb7xQRDQsm2aQFsmcgbNw6WlqwZ7M47F/wtsiJS\nrPI3+WEt2/Ieh/AehwBw6+jR331YVRWstFqzyF2yBOLxlPadLJGnepS1j6rudtdck+Lu6lZWBk2b\nXk2jRsMb3Hbdug9Zuzaj7kVEcqNRo/or8EceSdo84cVOM+sMVLh7efX7ocCGmhc8zeweIO7uY6vf\nzwO61h5aMbMCXjFLRKRwZXqL/kyglZntDSwFTgf61dpmEnARMLY68f+vrvHxZIGIiEh6EiZyd68y\ns4uAaQTTD8e4+1wzG1z9+Wh3f97MepjZQuBr4OycRy0iIpvk7YYgERHJjbyutWJm15nZW2Y228z+\nZmYt89l/LpnZLWY2t/r4njGzwlzcOE1mdqqZzTGzb82sQ9jxZIuZlZvZPDNbYGaXhx1PNpnZA2b2\niZm9E3YsuWBmLc3sH9U/l++a2a/DjilbzGwbM3ujOle+Z2Y3Jtw+nxW5mW3n7l9Vf/0roK27n5u3\nAHLIzE4A/ubuG8zsJgB3vyLksLLGzA4ENgCjgUvd/V8hh5Sx6hve3qfGDW9Av5o3vEWZmR0LrAIe\ncfc2YceTbWa2O7C7u882s2bALKB3Ef3/NXX31WbWCHgF+J27v1LXtnmtyDcm8WrNgM/y2X8uufsL\n7r7xQYBvEMylLxruPs/d0388U2HadMObu68HNt7wVhTc/WXgi7DjyBV3X+bus6u/XkVwo+Ie4UaV\nPe6+uvrLxgTXKFfUt23el7E1sxvM7L9Af+CmfPefJwOB58MOQpKq62a21G6lk4JSPbOuPUERVRTM\nbCszm01wc+U/3P29+rbN+jK2ZvYCsHsdH13p7s+6+1XAVWZ2BcFKVpGZ5ZLs2Kq3uQpY5+6P5zW4\nLEjl+IqMrvQXgephlb8AF1dX5kWh+i/8dtXX26aZWczd43Vtm/VE7u6pPr7ncSJWtSY7NjMbAPQA\njs9LQFnWgP+7YrEEqHnBvSWprUAqBcLMtgbGAY+5+4Sw48kFd19pZs8BhxMsLLOFfM9aaVXjbS9g\ni+Vuo6p6ud/LgF7uXuyLARTLzV2bbngzs8YEN7xNCjkmSZEFK16NAd5z9zvDjiebzGwXM9ux+utt\nCZ5vWW++zPeslb8ABwDfAh8AQ9z907wFkENmtoDgosTGCxKvufsFIYaUVWbWBxgO7AKsBCrd/cRw\no8qcmZ3Id+vtj3H3hNO8osTMngC6At8HPgWucfcHw40qe8zsGOAl4G2+GyYb6u5Tw4sqO8ysDcGq\nsltVvx5191vq3V43BImIRFtRPnxZRKSUKJGLiEScErmISMQpkYuIRJwSuYhIxCmRi4hEnBK5iEjE\nKZGLiETc/wfoqVYxTpVDEwAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"h = hist(x_norm, normed=True, bins=20)\n",
"\n",
"x = linspace(-3,3,50)\n",
"p = plot(x, norm.pdf(x), 'r-')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"导入积分函数:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from scipy.integrate import trapz "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"通过积分,计算落在某个区间的概率大小:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"95.45% of the values lie between -2 and 2\n"
]
},
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nTDHVr1+f+fPnU7VqVVq1akVqamrgQRHECnwQFi5cyAUXXECzZs1i5ui7MbGifPnyvPHGGzz44IO0\nbduWDz/80HWkkLECX4js7GyeffZZrrnmGkaNGsXIkSNtvt2YKNW7d29mzpzJ0KFD6du3L3v37nUd\nqdiswB/HvHnzaN68Od9++y3Jyclcd911riMZY0pY8+bN+eGHH/B6vTRp0oQPPvggog/AWoEvYNeu\nXdx555306NGDESNGMH36dOrXr+86ljGmlFSrVo3Ro0czZcoUnn32Wdq3b09aWprrWCfECryfqvLu\nu+9y7rnnUqFCBVatWkX37t3tLBljYlR8fDxLliyhffv2xMfH8+STT0bcqpRW4Mk7iHrFFVfw4osv\n8sUXX/Dyyy9z0kknuY5ljHEsLi6OBx54gB9++IHFixfzl7/8hc8++yxipm1iusDPmzeP9u3b061b\nN2644QaSk5O58MILXccyxoSZs846i08//ZTnn3+e4cOH07x5cz7++GN8Pp/raIWKuQKvqnz99ddc\ndtll3HrrrXTr1o20tDQGDBhgZ8gYYwrVuXNnli5dypNPPslzzz1H06ZNmThxIrm5ua6jHVPMFHif\nz8eMGTO45JJL6NevH3fccQdr167l7rvvply5cq7jGWMihIjQuXNnkpOT+fe//83o0aNp3Lgxb7/9\ndtjdAzbqC/z69esZPnw49evX57HHHmPgwIGkpqZy++23U6ZMGdfxjDERSkRo3749c+fOZcyYMXzw\nwQfUrl2be+65h8WLF4fFPH1UFviMjAzGjx/PpZdeSnx8PPv27ePTTz9l6dKl9OzZE6/X6zqiMSZK\niAiXXXYZM2fOZMmSJZx++unceOONNG3alBdeeIFt27Y5yxY1BX7Pnj1MnjyZ2267jTp16jBlyhSG\nDBnCli1bePHFF2nWLOrvPWKMcaxu3boMHz6ctLQ0Xn31VVauXEmjRo245ppreOONN9i8ueAtrUuW\nuP5nhIjoiWTw+XwsW7aMGTNmMGPGDFJSUmjbti0dO3bkhhtuCI/1YhIT4YknXKcwJja1aQNz5rhO\nQUZGBp9++inTpk1j5syZnHHGGXTq1ImOHTvSunXrE54qFhFUtdALdSKmwB86dIjly5eTnJxMcnIy\ns2fPpmrVqnTs2JGOHTty6aWXUr58+VJIXARW4I1xJ0wKfH65ubksWrSIGTNmMH36dNatW0dCQgLx\n8fG0atWKCy+8kCpVqgT1vUJS4EWkAzAK8AJvqurIY2zzEtARyATuUNWlRRj7hwJ/6NAh0tLSWLZs\n2dGCvnLlSho0aECrVq1o2bIlCQkJnH322YVmd84KvDHuhGGBL2j79u188803R+vc8uXLqVevHq1a\ntaJVq1a0aNGCRo0aUbly5T+MDabAF3rit4h4gVeAdsAWYJGIfKaqqfm26QSco6oNRKQV8BoQH8zY\nI8aNG8fq1auPfm3atIl69erRtGlTWrVqRffu3WnRogWVKlUK9PMKO0lAguMMJSkJ279IlUT07htA\n0t69Yb9/NWrUoEePHvTo0QPIW8F2xYoVJCcn8/333zN69GjWrl3LqaeeSqNGjX73FYxAV/a0BNJU\ndQOAiEwCugL5i3QX4B0AVU0WkWoiUhOoH8RYAObOnUujRo3o06cPjRo14k9/+lPU3OM0iSj/nwjb\nv0iVRPTuG0DSvn0Rt39lypShRYsWtGjRgv79+wN5xxt/+eWXow3wihUrgl6zPlCBrwXkv/X4ZqBV\nENvUAs4MYiwA48ePDyKqMcbEHo/HQ7169ahXrx4dOnQ4+nowCyEGKvDBHoG1JRePRQS8XojAqaWg\nZWVBuB3cDqVo3r9o3recHPBEzVngJyxQgd8C1Mn3vA55nXhh29T2b1MmiLFAcL+JItkT+/e7jlCi\nnjh82HWEEhXN+xfN+8aGDTwR5bUlkEAFfjHQQETqAVuBHkDPAtt8BgwEJolIPLBXVbeJyK4gxgY8\nCmyMMebEFFrgVTVHRAYCX5J3quM4VU0Vkb7+98eo6nQR6SQiacABoFdhY0tyZ4wxxvyP8wudjDHG\nlIywOAohIk+KyHIRWSYis0WkTuBRkUNEnheRVP8+ThGRqLldlIh0F5EfRSRXRFq4zhMqItJBRFaL\nyDoRecR1nlASkbdEZJuIrHCdpSSISB0R+cb/93KliNzrOlMoiUh5EUn218tVIvLMcbcNhw5eRKqo\narr/8SDgL6p6p+NYISMiVwKzVdUnIs8CqOpQx7FCQkQaAT5gDPCAqv7gOFKx+S/SW0O+i/SAntEy\nxSgibYAM4F1Vbeo6T6j5r8OpqarLRKQysAS4Nlr+/ABEpKKqZopIHDAPeFBV5xXcLiw6+CPF3a8y\nsNNVlpKgqrNU9ci9vZLJO9MoKqjqalVd6zpHiB29wE9Vs4EjF+lFBVWdC+xxnaOkqOpvqrrM/ziD\nvIsrz3SbKrRUNdP/sCx5xzh3H2u7sCjwACLytIj8AtwOPOs6TwnqDUx3HcIU6ngX75kI4z+Lrzl5\njVXUEBGPiCwDtgHfqOqqY21XajchFZFZQM1jvPWYqn6uqn8H/i4iQ4H/4D8bJ1IE2j//Nn8HDqvq\nxFINV0zB7FuUcT9vaYrNPz3zMTDY38lHDf+MQDP/8bwvRSRBVZMKbldqBV5Vrwxy04lEYIcbaP9E\n5A6gE3BFqQQKoSL82UWLYC7wM2FMRMoA/we8p6qfuM5TUlR1n4hMAy4kb3mh3wmLKRoRaZDvaVdg\nqassJcG/bPJDQFdVDa+78oZWtFy0dvQCPxEpS95Fep85zmSCJHmXxo8DVqnqKNd5Qk1EThORav7H\nFYArOU7NDJezaD4GGgK5wHqgv6pud5sqdERkHXkHQ44cCPleVQc4jBQyInId8BJwGrAPWKqqHd2m\nKj4R6cj/7mUwTlWPeypapBGRD4BLgVOB7cBwVX3bbarQEZFLgDlACv+bbntUVf/rLlXoiEhT8lbw\n9fi/Jqjq88fcNhwKvDHGmNALiykaY4wxoWcF3hhjopQVeGOMiVJW4I0xJkpZgTfGmChlBd4YY6KU\nFXhjjIlSVuCNMSZK/T8+DStxCxquAQAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x1 = linspace(-2,2,108)\n",
"p = trapz(norm.pdf(x1), x1) \n",
"print '{:.2%} of the values lie between -2 and 2'.format(p)\n",
"\n",
"fill_between(x1, norm.pdf(x1), color = 'red')\n",
"plot(x, norm.pdf(x), 'k-')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"默认情况,正态分布的参数为均值0,标准差1,即标准正态分布。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以通过 `loc` 和 `scale` 来调整这些参数,一种方法是调用相关函数时进行输入:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"p = plot(x, norm.pdf(x, loc=0, scale=1))\n",
"p = plot(x, norm.pdf(x, loc=0.5, scale=2))\n",
"p = plot(x, norm.pdf(x, loc=-0.5, scale=.5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"另一种则是将 `loc, scale` 作为参数直接输给 `norm` 生成相应的分布:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"p = plot(x, norm(loc=0, scale=1).pdf(x))\n",
"p = plot(x, norm(loc=0.5, scale=2).pdf(x))\n",
"p = plot(x, norm(loc=-0.5, scale=.5).pdf(x))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 其他连续分布"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy.stats import lognorm, t, dweibull"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"支持与 `norm` 类似的操作,如概率密度函数等。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不同参数的[对数正态分布](https://zh.wikipedia.org/wiki/%E5%AF%B9%E6%95%B0%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83):"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nDtm/IrKz7fLNPXva6wE5Oe23PUt2ti3p6frDEO4iNrjPn29vwLNmjeYmu2TXLjuPf//+yFmfwUON\nq4ZDNYeoqKmgsqaSytpKDtUc4lDNIQ7XHqby+CFm/r+/s7F/Kk98uw+Haw9zuPYwR+qOUNdQR1ZK\nFpnJmWQlZ5GVkkVWst33LBlJGfYxOYOMpIyWx/SkdDKSMyLqjlsdcblskK+stI/uUlnZvhw+3Pro\n3q6ttT1/d7DPyuq8ZGbakpVlr4u59zMywvQOX1EiIoN7Y6NdRva+++DKK0PSjOgxdapdoOWBB5xu\nSXBVVMA558AvfgE33dTytKvRxZG6IxypPdLyWFVX1VKO1B2huq7a7tdXUV1XTXV9dcvj0fqjLduJ\ncYmkJ6WfUHok9bCPiT1sSepBWmJap9ueJTUhlZSElLD+C8PlsiOI3AH/yJHWcviwfc29X13dul9V\n1bpfVWUXjHMH+pOV9PSOS48e7bfT0vQvCreIDO6vvQa/+529DZyeyC547z246y67OlcsDMreuNHm\n319/HS66KKCHNsZQ21Brg319Ncfqj3HMdYyj9Uc5Wn+0Zb+zx+Ou4xxzHaPGVdPyfE1DTcu+q9FF\nSkKKDfaJqaQmpLbbdj+mJKS07Lu3UxJS7HZi63ZyfHLrdkLrtvs193PJ8ckkxCWE5IfFGJsacgf7\n6ur25ejR9tvu/WPHWvePHm2/X1dnA3yPHicW9/NpaZ1vp6Z6f0xNhbi4oP/z+C3ignttrV0VcO5c\nexNn5aNjx+yqai++aMeOxoqSEvje92DRIvsXS4RobGqktqGW467jHHcdbwn8no+1DbXtnqtrqGvZ\nr2uso7ahtqVOXUMddY11La+567qfr22opa6hjibTRHJCckvQ93xMik86YTspPsnuxyWRFN9a3HXc\nJTEusd1+UnwSifGJJ7zufi4xLvGE7baPnj9CjY32B+PYsdbSdt+93fa5mhq7X1PTft/9XNvtmhob\ngxITWwO9u6SktH/0fM6zJCd3vp+c3HFxv+bLj0vQgruIXErrzbFfMsY82kGdp4HLsDfHvsEY83kH\nddoF9//6L9tjf/vtrjY5xt19t823/+lPTrck9P70J/sXy6xZdgZrJHS7HNTY1NgS7Osb61uCv/ux\n7XPu7frG+pbift79mqvJdcK2u7TddzW62j3v3u9o29XkoqGpgXiJPyHgt31MiEto91xCXMIJ2wlx\n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\n9P8BfIyZcbomsyAAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = linspace(0.01, 3, 100)\n",
"\n",
"plot(x, lognorm.pdf(x, 1), label='s=1')\n",
"plot(x, lognorm.pdf(x, 2), label='s=2')\n",
"plot(x, lognorm.pdf(x, .1), label='s=0.1')\n",
"\n",
"legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不同的[韦氏分布](https://zh.wikipedia.org/wiki/%E9%9F%A6%E4%BC%AF%E5%88%86%E5%B8%83):"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd8FNXawPHfSUggIZWEGgKhV2lSAghEsYAKKIqCoqJY\nsF7s4lWIoteLgtfXKwoXKSooXuWqoBRrFJQqNWCUDiGUQCBASNnsPu8fkyxJ2PS+PN/PZ9iZnbMz\nZ3bDs2fPzJzHiAhKKaXci0dlV0AppVTZ0+CulFJuSIO7Ukq5IQ3uSinlhjS4K6WUG9LgrpRSbqjQ\n4G6MmWOMOWqM2ZbP+lBjzHJjzGZjTKwxZkyZ11IppVSxFKXlPhcYVMD6R4BNItIFiAKmGWNqlEHd\nlFJKlVChwV1EVgInCyhyGAjImg8ATohIZhnUTSmlVAmVRQt7FvCjMSYB8AduKYNtKqWUKoWyOKH6\nPLBZRBoBXYDpxhj/MtiuUkqpEiqLlnsf4FUAEdltjNkLtAE25CxkjNFBbJRSqgRExBT3NWXRco8D\nrgQwxtTHCux7XBUUEbedJk2aVOl10OPTY9Pjc7+ppAptuRtjPgEGAKHGmIPAJMArK1jPBP4BzDXG\nbMH6snhGRJJKXCOllFKlVmhwF5FRhaw/DgwpsxoppZQqNb1DtYxERUVVdhXKlTsfnzsfG+jxXaxM\nafp0irUjY6Si9qWUUu7CGIOU4ISq3kl6kTKm2H8rSqlyVpYNYA3uFzH9JaVU1VHWDS7tc1dKKTek\nwV0ppdyQBnellHJDGtyVugj9+uuvtGrVCn9/fxYvXlxg2ZUrV9K2bVvnckREBD/88EN5V1GVkgZ3\n5ZZiY2O55pprqFu3Lh4eVfvPPDo6mjvuuKPMtjdmzBhefPHFAstMnDiRxx57jDNnzjB06NACy/br\n14+4uDjnsjGmyl5tNW/ePPr161fZ1agSqvZfvVIl5O3tzciRI5k9e3ZlV6VKOnDgAO3bt6/QfWZm\nli7NQ2lff9GpwMFvRF55RVTVYH30Vdc///lPCQsLE39/f2nTpo388MMPJdrOzp07JesGumL58ssv\npXPnzhIQECAtWrSQ5cuXi4jIoUOHZMiQIVKnTh1p2bKlzJo1y/maSZMmyYgRI+TOO+8Uf39/6dCh\ng2zYsKHAY1q2bJl4e3uLl5eX+Pn5SZcuXUREZM6cOdKuXTvx9/eX5s2by8yZM53b+emnnyQsLEym\nTZsm9erVk4YNG8rcuXNFRGTmzJni5eUl3t7e4ufnJ0OHDr3g2Jo3by4eHh7i4+Mj/v7+kp6eXuj+\nGjdu7FyOiIhwfh533XWXvPDCC/mWbdq0qUyZMkUuueQSqVWrltjtdlm9erX07t1bgoKCpHPnzhIT\nE5Pv55D39ZmZmfLaa69JixYtxN/fX9q3by9ffPGFiIjs2LFDatWqJZ6enuLn5yfBwcEiIpKWliZP\nPvmkNGnSROrXry/jxo2T1NTUfPdZWfL7P5n1fPFjbkleVKIdgchDD5XR26BKqyoH97i4OAkPD5fD\nhw+LiMj+/ftl9+7dIiKyYMECCQoKcjkFBwfLwYMHc22rJMF97dq1EhgYKN9//72IWAE9Li5ORET6\n9esnDz/8sKSnp8vmzZulbt268uOPP4qIFdxr1aoly5YtE4fDIRMmTJDIyMhCjyk6OlruuOOOXHX4\n5ptvZM+ePSIi8vPPP4uvr69s3LhRRKwAWqNGDZk0aZJkZmbK0qVLxdfXV06dOiUiImPGjJEXX3yx\nwGPMGaCLsr/8gnvefbkK7l27dpX4+HhJS0uT+Ph4CQkJkWXLlomIyHfffSchISGSmJjosp55Xy8i\n8tlnnznfx08//VRq164tR44cERGRefPmyWWXXZZrG+PHj5dhw4bJyZMn5cyZMzJkyBCZMGFCge9P\nZSjr4F6x3TIZGRW6O1U6xpR+KglPT0/S09PZvn07NpuNJk2a0Lx5cwBuu+02Tp486XJKSkqicePG\npT7u2bNnM3bsWAYOHAhAo0aNaNOmDQcPHuS3335jypQpeHt707lzZ+69914+/PBD52v79evHoEGD\nMMYwevRotmzZUugxyfkGkNO1115Ls2bNAOjfvz9XX301K1eudK738vJi4sSJeHp6MnjwYPz8/Pjz\nzz+d6/NurzCF7a8gBe3LGMNjjz1GWFgYNWvWZP78+Vx77bUMGmSlZb7yyivp3r07S5cuLdLrAW6+\n+WYaNGgAwC233EKrVq1Yu3aty7qICLNmzeLNN98kKCgIPz8/JkyYwMKFC4t0bNWZBneVL+uXXemm\nkmjZsiVvvfUW0dHR1K9fn1GjRnH48OGyPbgCxMfH06JFiwueT0hIoE6dOtSuXdv5XJMmTTh06JBz\nuX79+s55X19f0tLScDgcxT6mZcuWERkZSUhICMHBwSxdupQTJ04414eEhOQ6Uezr68vZs2dLfMyF\n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\nZf78+SIikpKSImvWrBGRC9PkDRgwQFq2bCk7d+6U1NRUiYqKkueee05ERLZv3y5+fn7y66+/SkZG\nhjz11FPi5eWVK61eTtHR0blS++3atUu+//57ycjIkMTEROnfv7+MHz/euT5nir5JkyY50/PlTYfo\nqqyXl5d89dVXIiKSmpoqN9xwg4wbN07OnTsnx44dk549e8rMmTNd1tPV63///XdZu3at2O122bdv\nn7Rr107eeust52uMMblSQm7cuFHq1asn69atE4fDIR988IFEREQ43/+c8vs/SbVIs6ct9+rFmNJP\nJXD27FkCAgJyPefv7+/sAz59+jQjR46kWbNm/Pzzz0yePJn4+HimTJmSa1hfb29vDh8+zL59+/D0\n9KRv377Ode+88w4RERFMmDCBvn37smfPHhYtWsSQIUNc/vQubl+v3W7nf//7Hy+//DI+Pj506NCB\nu+66y/nL4euvv8435Z7D4WDu3Ln83//9Hw0bNsTDw4PIyMhcQ/MWJyVdQanxvL292blzJ8ePH8fX\n15devXq5PB5jDHfffTctW7akVq1a3HLLLc5Ug59//jlDhw6lT58+eHl58fLLLxf4fsn5Bh8ALVq0\nYODAgXh5eREaGsrjjz/uTC9YWn369GHo0KGANSb8smXL+Ne//oWPjw9169Zl/PjxBabSy/n6WrVq\n0a1bN3r27ImHhwdNmzbl/vvvL7Cu//nPf3jggQfo0aOHM+1hzZo1WbNmTZkcX0F0VEiVPyuleemm\nEvDz87tgHO3k5GRnejSbzcb27dsJDQ2lS5cudOjQwWUwefrpp2nZsiVXX301LVq0YMqUKc51+/bt\nIzk5ma5du9KpU6dC++ilmMeSmJhIZmZmrm6DnGOf50y5lz19/PHHHD16lBMnTpCWlkaLFi3y3b6r\nlHTZ28nuQjp06BBgpcZr3749QUFBBAcHk5yc7EyNN3v2bP766y/atWtHz549+eabb/LdZ95Ug2fP\nngUgISGBxo0b51pXnG6so0ePMnLkSBo3bkxgYCB33HFHri6f0shZr/3792Oz2WjYsKHzvRo3bhyJ\nifnfnpPz9WAlkrn++utp2LAhgYGB/P3vfy+wrvv372fatGm5Puf4+HhnmsbypJmYVJXTunVrMjMz\nc6Wv27JlCx07dgQgJCSEbdu2sXDhQuLj4+nWrRsDBw7kgw8+cAYcsL4kpk6dyu7du1m8eDFvvvmm\nsz926tSp7Nq1iw4dOvDoo4/SvHlzJk6cmG/KvOK23OvWrUuNGjVy9X3nnC8o5V5ISAi1atUqVvq+\n/FLSFZYar2XLlnz88cckJiby7LPPcvPNNxf7xHGjRo2Ij493LqemphYY8PK+l88//zyenp7ExsaS\nnJzMRx99lG8/eE61a9fm3LlzzmW73X5BoM65r/DwcGrWrMmJEyec71NycnK+feCuEp88+OCDtG/f\nnl27dpGcnMyrr75aYF2bNGnC3//+91yfzdmzZ4t0CWhpabeMqnJq167N8OHDmThxIufOnWPVqlUs\nWbLkguubu3fvzvTp00lISOCBBx7g008/JSwsjG+//RaAb775hl27diEiBAQE4OnpmavLpW7dujz+\n+ONs2bKFRYsWcerUKXr37s3YsWOdZex2O2lpaWRmZmK320lPT8dutzvXe3h4OK/BzsnT05Phw4cT\nHR1NamoqO3bs4IMPPnAGi+uuuy7flHseHh7cc889PPHEExw+fBi73c7q1audGZvyKiglXWGp8ebP\nn+8MiIGBgRhj8r2KJb9fLzfddBNLlixx1jE6OrrAXzp51509e5batWsTEBDAoUOHeOONN/J9bU6t\nW7cmLS2NpUuXYrPZeOWVV3KlUsyrYcOGXH311TzxxBOcOXMGh8PB7t27XX5+ruqZXVd/f398fX2J\ni4vjvffey7W+fv36uU6c33fffcyYMYN169YhIqSkpPDNN9/kaoSUF225qyrp3XffJTU1lXr16jF6\n9GhmzJiRqz89Jy8vL2655RaWLl3Kn3/+SevWrQHYuXMnV111Ff7+/vTp04eHH36YAQMGuNxGt27d\nePvtt0lISGDcuHHO57Ov2JkyZQrz58/Hx8eHV199FYCDBw/i7+/PJZdc4nKb77zzDmfPnqVBgwbc\nc889ua7C8ff3LzDl3tSpU7nkkkvo0aMHISEhTJgwId/kzgWlpCssNd6KFSvo2LEj/v7+PP744yxc\nuJCaNWu63E/eFHrZyx06dODf//43I0eOpFGjRvj7+1OvXj3ndvLK2yKeNGkSGzduJDAwkCFDhnDT\nTTfl+0sp52sDAwN59913uffee2ncuDF+fn65uqtctbw//PBDMjIynFcWjRgxwmWy7vxeP3XqVD7+\n+GMCAgK4//77GTlyZK4y0dHR3HXXXQQHB/P5559z6aWXMmvWLB555BHq1KlDq1atip3YvKQqdjz3\n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\nAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = linspace(0.01, 3, 100)\n",
"\n",
"plot(x, dweibull.pdf(x, 1), label='s=1, constant failure rate')\n",
"plot(x, dweibull.pdf(x, 2), label='s>1, increasing failure rate')\n",
"plot(x, dweibull.pdf(x, .1), label='0"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = linspace(-3, 3, 100)\n",
"\n",
"plot(x, t.pdf(x, 1), label='df=1')\n",
"plot(x, t.pdf(x, 2), label='df=2')\n",
"plot(x, t.pdf(x, 100), label='df=100')\n",
"plot(x[::5], norm.pdf(x[::5]), 'kx', label='normal')\n",
"\n",
"legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 离散分布"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"导入离散分布:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy.stats import binom, poisson, randint"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"离散分布没有概率密度函数,但是有[概率质量函数](https://zh.wikipedia.org/wiki/%E6%A6%82%E7%8E%87%E8%B4%A8%E9%87%8F%E5%87%BD%E6%95%B0)。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[离散均匀分布](https://zh.wikipedia.org/wiki/%E9%9B%A2%E6%95%A3%E5%9E%8B%E5%9D%87%E5%8B%BB%E5%88%86%E4%BD%88)的概率质量函数(PMF):"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"high = 10\n",
"low = -10\n",
"\n",
"x = arange(low, high+1, 0.5)\n",
"p = stem(x, randint(low, high).pmf(x)) # 杆状图"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[二项分布](https://zh.wikipedia.org/wiki/%E4%BA%8C%E9%A0%85%E5%88%86%E4%BD%88):"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXsAAAEACAYAAABS29YJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt8lNW56PHfk4Qk3MNFoUAwYbgJKlAVARECVhKIVVtr\nEbQW7d7b9kgSbbfHCrKN21L17H1OJZFaW7W2VqD10m7NKASFEG+olIvKxcBwC3cIN0ESErLOHzMT\nJsMkmUxm5p3L8/188jGz5r0870ierDzvetcSYwxKKaViW4LVASillAo9TfZKKRUHNNkrpVQc0GSv\nlFJxQJO9UkrFAU32SikVB1pM9iKSIyJbRGSriDzk4/2hIvKxiFSLyC98vJ8oIutE5K1gBa2UUqp1\nmk32IpIIPAPkAMOAGSJyqddmVUAe8N9NHKYA2ATogH6llLJISz370cA2Y8xOY0wtsAS42XMDY8xh\nY8waoNZ7ZxHpB0wDngckOCErpZRqrZaSfV+g0uP1Hlebv34DPAjUtzIupZRSQdRSsg+49CIiNwKH\njDHr0F69UkpZKqmF9/cC6R6v03H27v0xDrhJRKYBqUAXEfmzMeYuz41ERGv5SikVAGOM3x3plnr2\na4BBIpIhIsnAdODNJrZtdFJjzBxjTLoxJhO4HVjhneg9to3Zr0cffdTyGPT69Pri8fpi+dqMaX0f\nudmevTGmTkRmA8uAROAFY8xmEbnX9f5zItIb+AzoAtSLSAEwzBhzyvtwrY5OKaVUULRUxsEY8w7w\njlfbcx7fH6BxqcfXMVYBqwKMUSmlVBvpE7QhlpWVZXUIIaXXF91i+fpi+doCIYHUfoIagIixOgal\nlIo2IoJpxQ3aFss4SikVLCI6CjsQwegQa7JXSoWV/iXfOsH6Bak1e6WUigOa7JVSKg5osldKqTig\nyV4ppeKAJnullAqC9957j6FDh9KxY0cmT57M7t27m9w2KyuL9u3b07lzZzp37syll3ovExJ8muyV\nUpaz28vJzn6ErKxCsrMfwW4vt+QYgTpy5Ai33nor8+fP59ixY1x11VVMnz69ye1FhIULF/L111/z\n9ddfs3nz5pDHqEMvlVKWstvLKShYhsMxv6HN4ZgLQG7uhLAcIyMjg5/+9Ke8/PLL7N+/n1tuuYVn\nn32WlJQUv87/xhtvcNlll3HrrbcCUFhYSM+ePamoqGDw4ME+9wn3EFTt2SulLFVUVNooSQM4HPMp\nLl4e1mMsWrSI0tJSHA4HFRUV/OpXv6KyspK0tDS6devm82vJkiUAbNy4kREjRjQcq0OHDgwcOJAv\nv/yyyfM9/PDDXHTRRYwfP55Vq0I/dZj27COAfbmdokVF1JgaUiSF/Jn55N6Qa3VYSoVFTY3vNLRs\nWSL+P0/k+xjV1Yl+7S0izJ49m759nQvxzZ07l7y8PB5//HGOHz/e4v6nT5/moosuatTWpUsXTp3y\nnvzX6amnnmL48OEkJyezePFivvvd77J+/XoGDBjgV7yB0J69xezL7RQsLKA0o5RVmasozSilYGEB\n9uV2q0NTKixSUup8tmdnn8MY/PqaMsX3MVJTz/kdR3r6+cl7+/fvz759+/zet1OnTpw8ebJR24kT\nJ+jcubPP7UePHk3Hjh1p164dd911F9deey1vv/223+cLhCZ7ixUtKsIxytGozTHKQfHiYosiUiq8\n8vOnYLPNbdRms80hL++GsB7Dc/TM7t276du3L5WVlXTq1Klh1Iz31+LFiwEYPnw4GzZsaNj/9OnT\nOBwOhg8f7vf5Q03LOBarMTU+26vrq8MciVLWcN9ALS6eR3V1Iqmp58jLy/H75mwwjmGM4be//S03\n3ngj7du3Z/78+UyfPp309PQmSzGevve97/Hggw/yxhtvMG3aNB577DFGjhzp8+bsiRMnWL16NRMn\nTiQpKYm//vWvvP/++xQXh7aDp1Mch5lnfT5ZktmwcwOHsg5dsF32rmyWvrjUggiVCh3XtLxWh3GB\nzMxMfvrTn/LnP/+Zffv2NYzGSU1N9fsY7733HrNnz2bXrl2MGTOGl156if79+wPw61//mg8++IC3\n336bw4cPk5uby5YtW0hMTOTSSy/l8ccf5/rrr/d53KY+s9ZOcazJPozc9XnPsk1ySTLd0rpxcPzB\nhjbbWhsLZi/Qm7Qq5kRysn/hhReYPHmy1aFcIFjJXss4YeSrPn/2xrP0+bQPI3eN5FTdKVZXruY/\nf/GfmuiVUkGlyT6MmqrPd7moS0PJ5vbXbud4r5aHeimlVGvoaJwwShHfT+OlJpyvC955xZ288sUr\n4QpJKQXs2LEjIks4waTJPozyZ+bTa3WvRm22tTbyZuQ1vM62ZVNRVcGOYzvCHZ5SKobpDdowy/11\nLo41Dnp36U1qQip5M/IuqM//L/v/om/nvsydMLeJoygVnSL1Bm0kC9YNWr969iKSIyJbRGSriDzk\n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\naLJXSqk48P8B4O96y1bc/nYAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"num_trials = 60\n",
"x = arange(num_trials)\n",
"\n",
"plot(x, binom(num_trials, 0.5).pmf(x), 'o-', label='p=0.5')\n",
"plot(x, binom(num_trials, 0.2).pmf(x), 'o-', label='p=0.2')\n",
"\n",
"legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[泊松分布](https://zh.wikipedia.org/wiki/%E6%B3%8A%E6%9D%BE%E5%88%86%E4%BD%88):"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = arange(0,21)\n",
"\n",
"plot(x, poisson(1).pmf(x), 'o-', label=r'$\\lambda$=1')\n",
"plot(x, poisson(4).pmf(x), 'o-', label=r'$\\lambda$=4')\n",
"plot(x, poisson(9).pmf(x), 'o-', label=r'$\\lambda$=9')\n",
"\n",
"legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 自定义离散分布"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"导入要用的函数:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy.stats import rv_discrete"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"一个不均匀的骰子对应的离散值及其概率:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"xk = [1, 2, 3, 4, 5, 6]\n",
"pk = [.3, .35, .25, .05, .025, .025]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"定义离散分布:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"loaded = rv_discrete(values=(xk, pk))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"此时, `loaded` 可以当作一个离散分布的模块来使用。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"产生两个服从该分布的随机变量:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([3, 1])"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"loaded.rvs(size=2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"产生100个随机变量,将直方图与概率质量函数进行比较:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"samples = loaded.rvs(size=100)\n",
"bins = linspace(.5,6.5,7)\n",
"\n",
"hist(samples, bins=bins, normed=True)\n",
"stem(xk, loaded.pmf(xk), markerfmt='ro', linefmt='r-')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 假设检验"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"导入相关的函数:\n",
"\n",
"- 正态分布\n",
"- 独立双样本 `t` 检验,配对样本 `t` 检验,单样本 `t` 检验\n",
"- 学生 `t` 分布\n",
"\n",
"`t` 检验的相关内容请参考:\n",
"- 百度百科-`t` 检验:http://baike.baidu.com/view/557340.htm\n",
"- 维基百科-学生 `t` 检验:https://en.wikipedia.org/wiki/Student%27s_t-test"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy.stats import norm\n",
"from scipy.stats import ttest_ind, ttest_rel, ttest_1samp\n",
"from scipy.stats import t"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 独立样本 t 检验"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"两组参数不同的正态分布:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"n1 = norm(loc=0.3, scale=1.0)\n",
"n2 = norm(loc=0, scale=1.0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"从分布中产生两组随机样本:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"n1_samples = n1.rvs(size=100)\n",
"n2_samples = n2.rvs(size=100)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"将两组样本混合在一起:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"samples = hstack((n1_samples, n2_samples)) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最大似然参数估计:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"loc, scale = norm.fit(samples)\n",
"n = norm(loc=loc, scale=scale)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"比较:"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = linspace(-3,3,100)\n",
"\n",
"hist([samples, n1_samples, n2_samples], normed=True)\n",
"plot(x, n.pdf(x), 'b-')\n",
"plot(x, n1.pdf(x), 'g-')\n",
"plot(x, n2.pdf(x), 'r-')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"独立双样本 `t` 检验的目的在于判断两组样本之间是否有显著差异:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"t = 0.868384594123\n",
"p-value = 0.386235148899\n"
]
}
],
"source": [
"t_val, p = ttest_ind(n1_samples, n2_samples)\n",
"\n",
"print 't = {}'.format(t_val)\n",
"print 'p-value = {}'.format(p)"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"`p` 值小,说明这两个样本有显著性差异。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 配对样本 t 检验"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"配对样本指的是两组样本之间的元素一一对应,例如,假设我们有一组病人的数据:"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"pop_size = 35\n",
"\n",
"pre_treat = norm(loc=0, scale=1)\n",
"n0 = pre_treat.rvs(size=pop_size)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"经过某种治疗后,对这组病人得到一组新的数据:"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"effect = norm(loc=0.05, scale=0.2)\n",
"eff = effect.rvs(size=pop_size)\n",
"\n",
"n1 = n0 + eff"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"新数据的最大似然估计:"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"loc, scale = norm.fit(n1)\n",
"post_treat = norm(loc=loc, scale=scale)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"画图:"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = figure(figsize=(10,4))\n",
"\n",
"ax1 = fig.add_subplot(1,2,1)\n",
"h = ax1.hist([n0, n1], normed=True)\n",
"p = ax1.plot(x, pre_treat.pdf(x), 'b-')\n",
"p = ax1.plot(x, post_treat.pdf(x), 'g-')\n",
"\n",
"ax2 = fig.add_subplot(1,2,2)\n",
"h = ax2.hist(eff, normed=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"独立 `t` 检验:"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"t = -0.347904839913\n",
"p-value = 0.728986322039\n"
]
}
],
"source": [
"t_val, p = ttest_ind(n0, n1)\n",
"\n",
"print 't = {}'.format(t_val)\n",
"print 'p-value = {}'.format(p)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"高 `p` 值说明两组样本之间没有显著性差异。\n",
"\n",
"配对 `t` 检验:"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"t = -1.89564459709\n",
"p-value = 0.0665336223673\n"
]
}
],
"source": [
"t_val, p = ttest_rel(n0, n1)\n",
"\n",
"print 't = {}'.format(t_val)\n",
"print 'p-value = {}'.format(p)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"配对 `t` 检验的结果说明,配对样本之间存在显著性差异,说明治疗时有效的,符合我们的预期。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `p` 值计算原理 "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`p` 值对应的部分是下图中的红色区域,边界范围由 `t` 值决定。 "
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAEACAYAAAC57G0KAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xmc1XP7x/HX1SQpRdbcLUpooSiV7CfKPeVOdduyxi13\nIbntuj1+mttti6S7BaG7EJU2N5JEHSXaVNpmEO0lKe2qac71++NzYoxpzpnmnPmc5Xo+HufhLN/v\nnPfRzDWf+WxfUVWMMcaknjK+AxhjjIkPK/DGGJOirMAbY0yKsgJvjDEpygq8McakKCvwxhiToiIW\neBHJFJEcEflWRB4q4rhmIrJPRK4o7rnGGGNir8gCLyIZwEAgE2gAXCsi9Q9wXG/gw+Kea4wxJj4i\nteCbA8tUdYWq5gIjgfaFHHcXMAbYeBDnGmOMiYNIBb4asDrf4zXh534lItVwhfvF8FP7l8ZGPNcY\nY0z8RCrw0exj0A94WN2eBxK+RXuuMcaYOCkb4fW1QI18j2vgWuL5nQWMFBGAY4A2IpIb5bmIiP0i\nMMaYg6CqEumAA95wvwC+A2oB5YAFQP0ijh8K/LU457oIqatXr16+I8RVKn2+LVtU339f9cEHVW++\n2d3OOKOX3nWX6siRquvX+04YW6n0b1eYVP984dpZZA0vsotGVfcB3YFJwFJglKpmi0hXEel6MOcW\n+dvGmFKWlwcjRsDZZ0P16tC3L1SoABde6G4nngg1a8Jbb0GDBlCvnjtm507fyY2JLFIXDao6EZhY\n4LnBBzj2lkjnGpMI9u1zRfuJJ+CYY+DRR6F1ayhX7vfHrVwJ99/vbqEQzJkDzz4LzzwD99wDd94J\nhx/u5zMYE0nEAm9KJhAI+I4QV8n4+VauhOuuAxF48UVo2dLdL0z+z1emjGvpjxkDixfDv/8NjRq5\nXxQtWpRO9lhKxn+74kj1zxcNUc8X/BAR9Z3BpI/Ro12r+8EH4d57XdEuiXfega5d4R//cF8zIyM2\nOY2JREQiDrJagTdpIS8PevSASZNcn3uzZrH72qtXww03uO6dMWPgiCNi97WNOZBoCrxtNmZSXm6u\nK8A5OTBvXmyLO0CNGjBlCpx6KrRqBZs2xfbrG3OwrMCblLZnD1x1FWzbBu+/D5Urx+d9MjJg4EDX\nnx8IwIYN8XkfY4rDCrxJWbt3w+WXQ9myMH48HHZYfN9PBHr3hiuvdFMs162L7/sZE4n1wZuUpOpm\nyuzb5/rcy5byfLHHH4dx42DaNJtGaeLDBllN2urVyw2oTp0a/5Z7YVShSxf46SdX6G12jYk1G2Q1\naWn4cHj9dfjf//wUd/htjv327W76pDE+WIE3KWXGDDe//f334fjj/WYpVw7GjoUJE2BwoWu/jYkv\n66IxKWPTJjjzTHjpJbjsMt9pfrNsGZxzDkye7PIZEwvWRWPShirceitcfXViFXeAk0+Gfv2gUyfb\npMyULmvBm5Twwgvw6qvwxRdw6KG+0xSuc2c45BCX05iSslk0Ji0sWgQXX+z630891XeaA9u+HZo0\ncTtYXn217zQm2VmBNylvzx5o2tQNrN5yS+TjfZs7F9q2dVsmVK/uO41JZtYHb1Le009D7dpw882+\nk0SnaVO44w63o6W1a0y8WQveJK3sbLjgApg/3234lSz27IHGjeGxx9y2BsYcDOuiMSkrFHL7vXTq\nBN27+05TfJ99Btdc4y4cUqWK7zQmGVkXjUlZL7/sivztt/tOcnDOPx/at4eHHvKdxKSyiC14EckE\n+gEZwKuq2rvA6+2Bx4BQ+PaAqk4Jv7YC2AbkAbmq2ryQr28teFMs69bBGWdAMAinneY7zcHbuhVO\nP91trXDRRb7TmGRT4i4aEckAvgZaAWuBOcC1qpqd75iKqrozfL8hMF5VTw4/Xg6cpaqbi3gPK/Cm\nWG680c1Aeeop30lKbswY1xc/b17p73hpklssumiaA8tUdYWq5gIjgfb5D9hf3MMOB34qmCPKvMZE\nNHOmu3rSP//pO0lsXHEFHHWULX4y8RGpwFcDVud7vCb83O+ISAcRyQYmAj3yvaTAxyIyV0RuK2lY\nk95CIXdx6yefhEqVfKeJDRG3jUGvXvDzz77TmFQTqcBH1Xeiqu+oan2gHfBGvpfOU9XGQBvgThG5\n4OBiGgNvveWK/I03+k4SW2ee6QZcH3vMdxKTaiL1+q0F8s8wroFrxRdKVaeLSFkROVpVN6nq+vDz\nG0VkPK7LZ3rB87Kysn69HwgECAQCUX8Akx527oSePeHtt6FMCs79evxxN2DctSvUq+c7jUlEwWCQ\nYDBYrHMiDbKWxQ2yXgKsA2bzx0HWOsD3qqoi0gQYrap1RKQCkKGq20WkIvAR8C9V/ajAe9ggq4mo\nVy+37e6bb/pOEj/PPefGFyZM8J3EJIOYLHQSkTb8Nk1yiKo+JSJdAVR1sIg8CNwE5AI7gHtVdY6I\nnASMC3+ZssCbqvqHeQ9W4E0kGzZAgwZuxWrNmr7TxM/eva71PmyYW8RlTFFsJatJCXfd5aYQPv+8\n7yTx98Yb7oIln33mBmCNORAr8CbpLV/uNujKyYFjj/WdJv7y8twirqeegnbtfKcxicy2KjBJLyvL\nteDTobgDZGS4aaCPPOJmDBlTElbgTcJavBg+/NDt9Z5O2rWDww+HESN8JzHJzrpoTMLq0MENNqZb\ngQe3z86tt7otkcuV853GJCLrojFJa+5cd7vjDt9J/AgE3MW6hw3zncQkM2vBm4R0+eVw6aXJudd7\nrHz+OVx3HXz7rbtYtzH5WQveJKX58+HLL6FLF99J/Dr3XDjlFDd10piDYS14k3A6dnRdFHff7TuJ\nf9Onu+vN5uRYK978nrXgTdL56iu3JfDf/+47SWK44AI48US30ZoxxWUteJNQrrzSdU2k48yZAwkG\n4bbb3IwauyiI2c9a8CapLF7sluh37eo7SWIJBOBPf7J58ab4rAVvEsb110OjRnYh6sJ8/DH06OF+\nCabidsmm+KwFb5LG8uVu1Wq3br6TJKZLLoEKFeC993wnMcnECrxJCM895wZWjzjCd5LEJAIPPwxP\nPw32B6+JlnXRGO9+/NHtg750KVSt6jtN4srLg/r13QW6bb94Y100Jin07w/XXGPFPZKMDHjwQdeK\nNyYa1oI3Xm3bBiedBLNmQZ06vtMkvj173P+vDz5w+8ab9GUteJPwXn4ZWre24h6tQw+Ff/wDevf2\nncQkA2vBG2/27nWt0ffeg8aNfadJHtu2Qe3abrfN2rV9pzG+xKQFLyKZIpIjIt+KyB9mKItIexH5\nSkTmi8iXInJxtOea9DZqlBtcteJePJUru73i+/f3ncQkuiJb8CKSAXwNtALWAnOAa1U1O98xFVV1\nZ/h+Q2C8qp4czbnhc6wFn4ZUXWF/8klo29Z3muSzerXrg//+ezjySN9pjA+xaME3B5ap6gpVzQVG\nAu3zH7C/uIcdDvwU7bkmfU2Z4rpoMjN9J0lONWpAmzbwyiu+k5hEFqnAVwNW53u8Jvzc74hIBxHJ\nBiYCPYpzrklPzz3nNhSzZfcH7777XDdNbq7vJCZRRdqbLqq+E1V9B3hHRC4A3hCResUJkZWV9ev9\nQCBAIBAozukmySxdCvPmwbhxvpMktyZN3GX93n7b7eNjUlswGCQYDBbrnEh98C2ALFXNDD/uCYRU\n9YCTtETkO1z3zCnRnGt98OmnSxeoWRMefdR3kuT3/vvu/+OXX7rtDEz6iEUf/FzgFBGpJSLlgGuA\ndwu8SR0R960lIk0AVHVTNOea9LNhA4wdC7ff7jtJamjbFnbtcnvGG1NQkV00qrpPRLoDk4AMYIiq\nZotI1/Drg4ErgJtEJBfYAXQq6tz4fRSTDF56Ca66Co491neS1FCmDNxzD/TrBy1b+k5jEo0tdDKl\nZs8eqFXL7W1+2mm+06SOXbvcZf1mzrQVwenEtiowCeXtt+H00624x1qFCm7h08CBvpOYRGMteFMq\nVKFpU3jsMbjsMt9pUs/+hU8rVriVrib1WQveJIwZM2D7drc4x8RejRpu07Zhw3wnMYnECrwpFf36\nuWuK2sKm+Ln7brfwKS/PdxKTKOzHzcTdypUwdSp07uw7SWo75xw46ii3V7wxYAXelIKBA11xr1TJ\nd5LUJuJa8f36+U5iEoUNspq42rXLrVqdPdvt/W7ia+9eN2XSpqKmPhtkNd69+abrOrDiXjrKlYOu\nXW3KpHGsBW/iRtVN3evTBy691Hea9LF+PTRoAMuX217xqcxa8MaradPcVratW/tOkl5OOMFNRx06\n1HcS45sVeBM3AwZA9+62y6EPd93lumlsymR6swJv4mLVKnfVpptu8p0kPbVoAVWqwMSJvpMYn6zA\nm7h48UW48UabGumLiGvFDxjgO4nxyQZZTczt3u2mRn72GZx6qu806Wv3bjdlcto0qFvXdxoTazbI\narwYNQrOOsuKu2/ly7urZ73wgu8kxhdrwZuYa9YMevWCv/zFdxKzahWceab77+GH+05jYsla8KbU\nzZ4NmzbZrpGJomZNCARg+HDfSYwPVuBNTA0c6K63mpHhO4nZr3t39+9ifyinHyvwJmY2boT33oO/\n/c13EpNfy5YQCsGnn/pOYkpbxAIvIpkikiMi34rIQ4W8fr2IfCUiC0Vkhog0yvfaivDz80VkdqzD\nm8Ty6qvw17/C0Uf7TmLyE/mtFW/SS5GDrCKSAXwNtALWAnOAa1U1O98x5wBLVXWriGQCWaraIvza\ncuAsVd1cxHvYIGsK2LfPbSj2zjvQpInvNKag7dvdlMmFC6F6dd9pTCzEYpC1ObBMVVeoai4wEmif\n/wBV/UJVt4YfzgIKfvvYQvU08P77UK2aFfdEVakSXH89DB7sO4kpTZEKfDVgdb7Ha8LPHcitQP7r\nySjwsYjMFZHbDi6iSQYDB7puAJO47rgDXnkF9uzxncSUlrIRXo+670REWgJ/A87L9/R5qrpeRI4F\nJotIjqpOL3huVlbWr/cDgQCBQCDatzUJICcHFi+GK6/0ncQUpX59dxGQsWPhuut8pzHFFQwGCQaD\nxTonUh98C1yfemb4cU8gpKq9CxzXCBgHZKrqsgN8rV7ADlV9rsDz1gef5Hr0gMqV4fHHfScxkYwf\n7/bnnzHDdxJTUrHog58LnCIitUSkHHAN8G6BN6mJK+435C/uIlJBRCqF71cELgUWFf9jmES2fbtb\nRNO1q+8kJhrt2sHq1bBgge8kpjQUWeBVdR/QHZgELAVGqWq2iHQVkf0/0o8CVYAXC0yHrApMF5EF\nuMHX91X1o7h8CuPN8OFunnWNGr6TmGiULet+GQ8a5DuJKQ22F405aKrQsCH07w8XX+w7jYnWhg1Q\nrx58/73bM94kJ9uLxsTVtGluhWTLlr6TmOI4/nho29Yu6ZcOrMCbgzZwoJt6Z5fkSz7du7tthEMh\n30lMPFmBNwdl7Vr45BO7JF+yatHCzXz6yEbFUpoVeHNQBg92c6krV/adxBwM258mPdggqym2vXvd\nviaffAINGvhOYw7Wrl1uv/jZs90+Qia52CCriYuxY11ht+Ke3CpUgFtucRdIN6nJWvCm2M47D+6/\nHzp29J3ElNT330Pz5u6SfhUq+E5jisNa8Cbm5s93KyHbtfOdxMTCSSe5AdcRI3wnMfFgBd4Uy6BB\n0K2bWxFpUoNd0i91WReNidrmzVCnDnz9NRx3nO80JlZCIahbF4YNc91vJjlYF42JqSFDXNeMFffU\nUqYM3HmnTZlMRdaCN1HJy4OTT4ZRo9ygnEktW7ZA7dqwZAn86U++05hoWAvexMyECa7lbsU9NR15\nJHTqBC+/7DuJiSVrwZuotG4NnTvDDTf4TmLiZckSaNUKVq6EcuV8pzGRWAvexER2NixaBFdd5TuJ\niafTTnOL18aM8Z3ExIoVeBPRoEFw221w6KG+k5h4694dBgzwncLEinXRmCJt2wa1arkWfLVqvtOY\neNu3z02FHTsWmjb1ncYUxbpoTIm99prrf7finh7KlnV7/FsrPjVYC94cUCjkLu02dKgtgEknmza5\nKbE5Oe7qTyYxxaQFLyKZIpIjIt+KyEOFvH69iHwlIgtFZIaINIr2XJPYJk50+72fe67vJKY0HX20\nG1C3KZPJr8gWvIhkAF8DrYC1wBzgWlXNznfMOcBSVd0qIplAlqq2iObc8PnWgk9Ql17qpkXaVZvS\nz6JF8Oc/w4oVNmUyUcWiBd8cWKaqK1Q1FxgJtM9/gKp+oapbww9nAdWjPdckrqVLYeFCuOYa30mM\nDw0bQv36MHq07ySmJCIV+GrA6nyP14SfO5BbgQ8O8lyTQAYMgK5dbWpkOuvRA/r3953ClESkTV+j\n7jsRkZbA34D9w3FRn5uVlfXr/UAgQCAQiPZUEwc//wwjR7pWvElff/kL3HMPzJzp9ow3fgWDQYLB\nYLHOidQH3wLXp54ZftwTCKlq7wLHNQLGAZmquqyY51offILp0wcWLIDhw30nMb717Qtz5tgFQRJR\nNH3wkQp8WdxA6SXAOmA2fxxkrQlMAW5Q1ZnFOTd8nBX4BLJvn5siN3o0NGvmO43xbf8uk4sWQfXq\nkY83pafEg6yqug/oDkwClgKjVDVbRLqKSNfwYY8CVYAXRWS+iMwu6twSfSITd+PHux9kK+4G3C6T\nN97otqswyccWOpnfOfdcuO8+uOIK30lMovjuO9cHv2IFVKzoO43Zz7YqMMUycyasXw8dOvhOYhJJ\nnTpuJfPrr/tOYorLCrz51fPPu6lxGRm+k5hEc++97vsjFPKdxBSHFXgDwKpVMHky3Hqr7yQmEV1w\nAVSqBB98EPlYkziswBvALWy6+Wa394wxBYn81oo3ycMGWQ07dsCJJ8KXX7q9340pzN69cNJJ7vq8\nZ5zhO42xQVYTlSFDoGVLK+6maOXKuSs+9e3rO4mJlrXg09z+hU2jRsHZZ/tOYxLdzz+7WTULF9rC\nJ9+sBW8iGj0aata04m6iU6UKdO4M//mP7yQmGtaCT2Oq7rqbWVnQrp3vNCZZrFwJTZrA99/DEUf4\nTpO+rAVvijR1KuzaBZdd5juJSSYnnuguBvLKK76TmEisBZ/G2rRxWxJ06eI7iUk28+ZB+/ZuGwO7\n4pMf1oI3B7R4sdsS+IYbfCcxyahJEzj1VDc4bxKXFfg01acP3HUXlC/vO4lJVg88AM8+68ZyTGKy\nAp+GVq2C996D22/3ncQksz//GcqUse0LEpkV+DTUp4/bc6ZKFd9JTDITgYcfhqee8p3EHIgNsqaZ\njRuhbl1YsgROOMF3GpPs9u2DevVg6FC3IZkpPTbIav7gP/+Bq6+24m5io2xZePBBa8UnKmvBp5Ft\n29xmUbNmueXmxsTCnj2/bUJ25pm+06QPa8Gb3xk8GFq3tuJuYuvQQ+Gee6B3b99JTEERW/Aikgn0\nAzKAV1W1d4HX6wFDgcbAI6r6XL7XVgDbgDwgV1WbF/L1rQVfCnbvdq2siRNtq1cTe9u3u++vzz+H\nU07xnSY9lLgFLyIZwEAgE2gAXCsi9Qsctgm4C+hTyJdQIKCqjQsr7qb0vPqq23fGiruJh0qV3FbC\n1hefWMpGeL05sExVVwCIyEigPZC9/wBV3QhsFJED7WhS5G8YE3979rg/n8eN853EpLIePVzrffly\nqF3bdxoDkfvgqwGr8z1eE34uWgp8LCJzReS24oYzsTFsGDRsCM2a+U5iUlmVKtCtGzz9tO8kZr9I\nLfiSdo6fp6rrReRYYLKI5Kjq9IIHZWVl/Xo/EAgQCARK+LZmv7173Z/NI0b4TmLSwT33uD1qHnnE\nXWfAxE4wGCQYDBbrnCIHWUWkBZClqpnhxz2BUMGB1vBrvYAd+QdZo3ndBlnja8gQGDkSJk/2ncSk\ni4cfdoOugwb5TpLaYjFNci5wiojUEpFywDXAuwd6vwJvXkFEKoXvVwQuBRZFldzERG4uPPEEPPqo\n7yQmndx7r/uLce1a30lMNNMk2/DbNMkhqvqUiHQFUNXBIlIVmANUBkLAdtyMm+OA/cN6ZYE3VfUP\nY+zWgo+fYcPcrZh/1RlTYvfd57oHBwzwnSR1RdOCt5WsKWrvXrdHyLBhcOGFvtOYdLNhAzRo4K45\nUKOG7zSpyVayprGhQ92UNSvuxofjj4e//x0ef9x3kvRmLfgUtHu3K+5jx0JzW15mPNm0yc2omT3b\ntseIB2vBp6mXX4bGja24G7+OPtpdNeyxx3wnSV/Wgk8xu3a51tLEibazn/Fv61Y4+WSYPt2NCZnY\nsRZ8Gho0yF14wYq7SQRHHOFm1PTq5TtJerIWfArZssX1eX76KdQvuCWcMZ7s3Ola8RMmQJMmvtOk\nDmvBp5mnn4b27a24m8RSsaJbbPfQQ76TpB9rwaeI1atdt8zChVCtONvBGVMKcnPhtNNcF2Lr1r7T\npAZrwaeRrCzo2tWKu0lMhxwCTz7pWvGhkO806cMKfApYsgTef99d/NiYRHXFFa7QjxzpO0n6sC6a\nFNCuHVx8sduq1ZhE9umncPPNkJPjruVqDp510aSBYBAWL4Y77vCdxJjILrrI9cUPHOg7SXqwFnwS\ny8uDs85yF1e46irfaYyJTk6OW6uxdCkce6zvNMnLWvAp7r//hcqV4corfScxJnr16sH119t1CkqD\nteCT1Nat7gfFFo+YZLR5s1uvMXkyNGrkO01ysv3gU9gDD7gfkiFDfCcx5uAMGgTjxsHHH4MUWaZM\nYazAp6hly6BFCze4WrWq7zTGHJx9+9zivCeecCuwTfFYgU9Bqm5a5Pnnu4sbG5PMPv7YXRhkyRI4\n7DDfaZKLDbKmoHffhe++cxc2NibZtWoFTZu6fZRM7EUs8CKSKSI5IvKtiPxhuyARqSciX4jIbhG5\nrzjnmuLZuRN69HB9l+XK+U5jTGz07eu+p7/91neS1FNkF42IZABfA62AtcAc4FpVzc53zLHAiUAH\n4GdVfS7ac8PHWRdNlHr2hFWr4M03fScxJraeew4++gg+/NAGXKMViy6a5sAyVV2hqrnASOB3wyGq\nulFV5wK5xT3XRG/pUnjlFejTx3cSY2KvRw9Ytw7GjPGdJLVEKvDVgNX5Hq8JPxeNkpxr8lGFO+90\nC0NOOMF3GmNi75BD4IUX3H5K27b5TpM6ykZ4vSR9J1Gfm5WV9ev9QCBAIBAowdumniFDYPt222/G\npLYLLoDMTDc77IUXfKdJPMFgkGAwWKxzIvXBtwCyVDUz/LgnEFLV3oUc2wvYka8PPqpzrQ++aGvX\nurnCn3xiK/5M6tuyxW1GNmIEXHih7zSJLRZ98HOBU0SkloiUA64B3j3Q+5XgXFMIVddqv/12K+4m\nPRx5pJtR06UL/PKL7zTJL+JCJxFpA/QDMoAhqvqUiHQFUNXBIlIVN0OmMhACtgMNVHVHYecW8vWt\nBX8Ab78N//oXzJtne2eb9HLNNVCrFvT+Q1+B2c9Wsiaxn36Chg1h/Hi3LYEx6WTDBvdX64QJbiGU\n+SNbyZqkVKFbN7juOivuJj0dfzw8/zzcdJN11ZSEteAT0Ouvw7PPwpw5UL687zTG+KEKnTq5qcH9\n+vlOk3isiyYJrVgBzZq5TZjOOMN3GmP82rzZ/RwMHer2rTG/sS6aJJOXB507u73erbgbA0cd5a5c\ndsst8PPPvtMkHyvwCaRvX/dn6X33RT7WmHTRujV07OimC9sf+8VjXTQJYuZMuPxymD3bTQ8zxvzm\nl1+geXO4+243R95YH3zS2LzZXVf1P/+xK9sYcyA5OW47A1vV7VgffBJQhZtvhr/+1Yq7MUWpV89N\nnbz6arc3k4nMWvCe9e0Lo0bB9Ol2EQ9jorF/G4Phw9N773jroklw06fDlVfCrFnW725MtHbtcgsA\nu3VL7x1WoynwkbYLNnGyapX7U/ONN6y4G1McFSq4LTzOPdftPHnRRb4TJS7rg/dg1y7o0AHuvx8u\nvdR3GmOST506roumUydYudJ3msRlXTSlTBWuvx4yMtyWBOnch2hMSfXt6/4KnjHDtezTifXBJ6An\n205n3JK6TM85jsMO853GmOSmCp3b/Mgv36xi1DdNKFM2fTolbJpkghne7TNenliDd897xoq7MTEg\nAi9fMYkNy3fxQNOpvuMkHCvwpWRKn3ncN/gUJnAZf6q41XccY1JG+XIh3il/LR8srEb/jlbk87MC\nXwoWjf2GTg/WYBTXcBpLfccxJuUclbGViZpJ73fqMu6BL3zHSRhW4ONs+bTVtL26Iv30bgJ86juO\nMSmrFit5j7/Qtc/JTHluvu84CSFigReRTBHJEZFvReShAxzTP/z6VyLSON/zK0RkoYjMF5HZsQye\nDNbMWc8lF4foqU9yHSN8xzEm5TVhPqO5ik73V+fzwYt8x/GuyAIvIhnAQCATaABcKyL1CxzTFjhZ\nVU8B/g68mO9lBQKq2lhVm8c0eYLbsHgjl5y7iztDA7lDX/Adx5i0EeBTXudGOtxelS+HZ/uO41Wk\nFnxzYJmqrlDVXGAkUHBLrMuB1wBUdRZwpIgcn+/1tJvpvTH7J1o12cz1oTe4T/v4jmNM2slkEi/r\nbVx201EsGvuN7zjeRCrw1YDV+R6vCT8X7TEKfCwic0XktpIETRbr5v3ARY1+pn3eOP4v9C/fcYxJ\nWx34H/31LlpfdQRzX0/PyQ2R9qKJdgXSgVrp56vqOhE5FpgsIjmqOj36eMllxWdraBXI5dbQMHrq\nk77jGJP2rmY05XU3bTsPYdyOhZx/R3ptJB+pwK8FauR7XAPXQi/qmOrh51DVdeH/bhSR8bgunz8U\n+KysrF/vBwIBAoFAVOETyTeTltO6bVnu03700P6+4xhjwi7nPd7iWv565wiGb5nLpf9s6jvSQQkG\ngwSDweKdpKoHvOF+AXwH1ALKAQuA+gWOaQt8EL7fApgZvl8BqBS+XxGYAVxayHtospvx0kI9Xn7Q\nIfxN1a2eLvrWpYvvyMakjmHDVCtWjPhzN53z9Dh+0Ne6TPOdOCbCtbPIGl5kC15V94lId2ASkAEM\nUdVsEekafn2wqn4gIm1FZBmwE7glfHpVYJy43bTKAm+q6kfF+/WT+EbfM4M7+p3K69xEGz70HccY\ncwDnM4OjiBdNAAAJyklEQVSptOSyIR+w4ptP+L+pFyNlUnsOSMT94FV1IjCxwHODCzzuXsh53wNn\nljRgotKQ0ueyKfSfVJfJtOZMvvIdyRgTQQOy+UJb0O6zCXxf51MGf3UOh1Y+1HesuLGVrAdh5487\nueHE6bw16Rg+13OsuBuTRKqygWDoQrat2kqgag5r5673HSlurMAX03dTVnJujVVkrFvNDD2HGn8Y\nczbGJLqK7GJMqCPtdo+mWXOYNiA1G2lW4Ivhfz1ncm6rw7gt9wVeC91ABX7xHckYc5DKoPxTn2Co\n3sxVParSp+0UQvtCvmPFlBX4KOz6aRfd6k7lnt7HM1470F0Hpt/yXGNS1J/5iFmczbhJFcg8Zi7r\n5v3gO1LMWIGPYN6b2TQ5YR07l61nvp7JudhWpMakmlqsZFrofM7bPpEmTYV3Hp7pO1JMWIE/gF82\n/0LP5p+QecPRPLrvUd4IXc8RbPMdyxgTJ2XJo1coi3HakfueOY5rq0/jxyUbfccqESvwhZg24CvO\nOG49y77cykIa2Va/xqSRc/mCRXo61dfPoWFD5fXbpqOh5LxutBX4fNbOXc+NNT/luh7H8EzevYwO\nXUFVNviOZYwpZRX4hWdD9/OBtuH5/1am5RHzWDDqa9+xis0KPK475vGWn9CoWTlqrvmcHOrSgf/5\njmWM8ews5jEndBaddrzKnzsdSddTp7Ax+yffsaKW1gV+7469DL7uU049djPzp29nDs14Qv/J4ez0\nHc0YkyDKkkc3XiKHehz23RLqNRB6nf8JW1dt9R0torQs8Lm7cnmty3TqHbGecW/nMjbUkbF5HTmJ\n5b6jGWMSVBW20C/Ug7k0ZeUX6zj5xFyeaj2FbWsSd/JFWhX4HT/soF/7qdSptIHXhoUYFrqRSXmt\nac4c39GMMUmiNisYFrqJ6ZzPoqkbOalGLj2bf8L6BYk3XpcWBf67KSt5oMkn1D5hN59P2MzYUEem\n5AW48I9b0xtjTFTq8TVv5XViDk3Z8eXXnNb4EG6pHWT20CUJM+smZQv8nm17GP/QTDKrzKTFJRWQ\nrxYwi+a8nXclzZjrO54xJkXUZgUDQnfyDafSYMUHdLq1Ak0rLOGVG6d576dPqQKvIWXmq4u5s/4U\nqh2xg37P7eO6LS+wmho8E7rf+tiNMXFzDJt4gGdZpnV4fM8DfDBiKzVPhE7VpjEhaw65u3JLPVPS\nF/i8vXlMH/gV/2g0hRMPWcstfz+EE76eylzO4tO8C7iJNyjPHt8xjTFpogxKGz5kfN7lfM9JXLRu\nBE/8O0TVitvoXCvIu4/MYveW3aWSJeIFPxLRj0s2MmnA10x8P4+P1p5O9TLCFRrkQ+1OA7J9xzPG\nGACOZjO38xK3h15iDdV4Z2UHnu99NTc8uZcLqsynbau9ZHarxUmBmnG5ulRSFPgfFv7IjDe+Y+qE\nXwh+W401+47n4ozNtM17l2f4kOqhtb4jGmNMkaqzlu4MonveIH7mSCb/3JqJ49rx+Oi6lCuzhpY1\nviPQqiznX1uDOi1jU/ATrsBvWbmVBeOXM2/KFmbPLcPMDbXYFjqcczK2Ecj7mGFM5UwWUDYvz3dU\nY4w5KFXYwtWM5uq80SjwTehUpq5sycRhrfm//9Zit26ixVHfcPaZe2hy4eE06XgiVRsdV+z3iVjg\nRSQT6Ie76Parqtq7kGP6A22AXcDNqjo/2nMB/tliCou/PZTFW6rzY+hozsjYTWPNJjM0i3/xBafy\nDWL13BiTggSoyzfU5Ru65bnLXa+hGjM3t2D21BY8P+0s5mVlUE5+oGGllZxWayenNz4kqq9dZIEX\nkQxgINAKWAvMEZF3VTU73zFtgZNV9RQRORt4EWgRzbn7lZ/1KZ1ZzOks5mSWkZGXOldVCQIBzxni\nKRgMEggEfMeIm1T+fKn82SC5f/aqs5YrGcuVOhb2gQKrtQaLt53O4oWnM21xw6i+TqRZNM2BZaq6\nQlVzgZFA+wLHXA68BqCqs4AjRaRqlOcC8CiPcQXjqMs3ZJA6xR3cN1kqCwaDviPEVSp/vlT+bJBa\nP3sC1GQ1bZnIgzzLa6GbojovUoGvBqzO93hN+LlojvlTFOcaY4yJk0h98NGuty3ZcG/lyiU6PaHt\n3g3ly//2eO9eyMjwl8eYVCMCeXl/rCMFf/ZSyZ497haBqB64hotICyBLVTPDj3sCofyDpSLyEhBU\n1ZHhxznARUDtSOeGn0+MTRuMMSbJqGqRjetILfi5wCkiUgtYB1wDXFvgmHeB7sDI8C+ELaq6QUQ2\nRXFuxIDGGGMOTpEFXlX3iUh3YBJuquMQVc0Wka7h1wer6gci0lZElgE7gVuKOjeeH8YYY8xviuyi\nMcYYk7wSYrMxEfm3iHwlIgtE5BMRqeE7UyyJyLMikh3+jONE5AjfmWJFRK4SkSUikiciTXzniRUR\nyRSRHBH5VkQe8p0nlkTkvyKyQUQW+c4SDyJSQ0Smhr8vF4tID9+ZYklEyovIrHC9XCoiTx3w2ERo\nwYtIJVXdHr5/F3CGqnbxHCtmRKQ18ImqhkTkaQBVfdhzrJgQkXpACBgM3Keq8zxHKrHwIr2vybdI\nD7g2VboYReQCYAfwuqpGt2ImiYTX4VRV1QUicjjwJdAhVf79AESkgqruEpGywGfA/ar6WcHjEqIF\nv7+4hx0OJM9ly6OgqpNVdf8KrllAdZ95YklVc1T1G985YizqRXrJSFWnAz/7zhEvqvqDqi4I398B\nZOPW5aQMVd0VvlsON8a5ubDjEqLAA4jIEyKyCugMPO07Txz9DfjAdwhTpGgW+JkkEJ7F1xjXsEoZ\nIlJGRBYAG4Cpqrq0sONKbTdJEZkMVC3kpX+q6nuq+gjwiIg8DDxPeDZOsoj0+cLHPALsVdW3SjVc\nCUXz2VKM/35LU2Lh7pkxwN3hlnzKCPcInBkez5skIgFVDRY8rtQKvKq2jvLQt0jCFm6kzyciNwNt\ngUtKJVAMFePfLlWsBfIP9NfAteJNkhCRQ4CxwHBVfcd3nnhR1a0iMgFoSiHb7yREF42InJLvYXtg\nvq8s8RDeNvkBoL2qls61uvxIlUVrvy7wE5FyuEV673rOZKIkIgIMAZaqaj/feWJNRI4RkSPD9w8D\nWnOAmpkos2jGAHWBPOA74HZV/dFvqtgRkW9xgyH7B0K+UNU7PEaKGRHpCPQHjgG2AvNVtY3fVCUn\nIm347VoGQ1T1gFPRko2IjMBtJ3I08CPwqKoO9ZsqdkTkfGAasJDfutt6quqH/lLFjog0xO3gWyZ8\ne0NVny302EQo8MYYY2IvIbpojDHGxJ4VeGOMSVFW4I0xJkVZgTfGmBRlBd4YY1KUFXhjjElRVuCN\nMSZFWYE3xpgU9f8B8tTCMYTHdwAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"my_t = t(pop_size) # 传入参数为自由度,这里自由度为50\n",
"\n",
"p = plot(x, my_t.pdf(x), 'b-')\n",
"lower_x = x[x<= -abs(t_val)]\n",
"upper_x = x[x>= abs(t_val)]\n",
"\n",
"p = fill_between(lower_x, my_t.pdf(lower_x), color='red')\n",
"p = fill_between(upper_x, my_t.pdf(upper_x), color='red')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 04-scipy/04.04-curve-fitting.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 曲线拟合"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"导入基础包:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib as mpl\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 多项式拟合"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"导入线多项式拟合工具:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from numpy import polyfit, poly1d"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"产生数据:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"x = np.linspace(-5, 5, 100)\n",
"y = 4 * x + 1.5\n",
"noise_y = y + np.random.randn(y.shape[-1]) * 2.5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"画出数据:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n/wEcY+GYZJlNlgAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"\n",
"p = plt.plot(x, noise_y, 'rx')\n",
"p = plt.plot(x, y, 'b:')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"进行线性拟合,`polyfit` 是多项式拟合函数,线性拟合即一阶多项式:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 3.93921315 1.59379469]\n"
]
}
],
"source": [
"coeff = polyfit(x, noise_y, 1)\n",
"print coeff"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"一阶多项式 $y = a_1 x + a_0$ 拟合,返回两个系数 $[a_1, a_0]$。\n",
"\n",
"画出拟合曲线:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nrkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"p = plt.plot(x, noise_y, 'rx')\n",
"p = plt.plot(x, coeff[0] * x + coeff[1], 'k-')\n",
"p = plt.plot(x, y, 'b--')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"还可以用 `poly1d` 生成一个以传入的 `coeff` 为参数的多项式函数:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"f = poly1d(coeff)\n",
"p = plt.plot(x, noise_y, 'rx')\n",
"p = plt.plot(x, f(x))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"poly1d([ 3.93921315, 1.59379469])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"显示 `f`:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" \n",
"3.939 x + 1.594\n"
]
}
],
"source": [
"print f"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"还可以对它进行数学操作生成新的多项式:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 2\n",
"31.03 x + 29.05 x + 6.674\n"
]
}
],
"source": [
"print f + 2 * f ** 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 多项式拟合正弦函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"正弦函数:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x = np.linspace(-np.pi,np.pi,100)\n",
"y = np.sin(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"用一阶到九阶多项式拟合,类似泰勒展开:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"y1 = poly1d(polyfit(x,y,1))\n",
"y3 = poly1d(polyfit(x,y,3))\n",
"y5 = poly1d(polyfit(x,y,5))\n",
"y7 = poly1d(polyfit(x,y,7))\n",
"y9 = poly1d(polyfit(x,y,9))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n/344fVo+rLR8uVzzXeE2jedjb12ZwXtPC6Z+hdsa94yMDA4dOoTJZBrrrdjMvn37FDPunuy5AzTF\n1qCrd80fkvP55S/lWlYbNtg2vqytjPnFqfT5WZi/XJ3Tlu7M+emQy6fFUx8jceCTI/ILPj5yzvvn\nn8vF713QdNpeWUbJe2+84LbGPTg4mKSkJI4ePTrWW7EJs9lMfn4+S5YsUWQ+VTR3F3ruxtldhDRF\ny8fTXci2bfDpp3JOu63sPL2TtNqLqYubeHo7XCjL+On1lKX0cWBr+VeDUlJkicZF2Jsto+RT83jB\nbY07eFZQ9dixY8TGxhKuUN7vQKvCskx/v9z8ODRUuTlHYOaGScTU+tN5otQl6wF0dMD3vgcvvWTf\n/+bO8p2ENUyhP7FTvc25MUOzZQbpnGam+8jYPTXbky0zMDBAQUHBhG+IfT6acVcIpT0HU4vCskxT\nk1zn1kXV8hZPn0tT5ABZr2a5ZD2An/5UPjVvb/r1zvKdhDdEE7MsRJ2NuTlDi4cNErHYQGRFwJjs\nxzJgwdRqwifaNuN+5MgRkpOTCQmZmL8/a7i1cV+yZInHBFUVN+5KyzIulGQApoZPpTqhgaqDrmmW\nvWmT3Dfij3+077qK9goCG81E1/mx9vur1dmcmxMbFEttV+05hwZXrp9BXLM/3S3dLt/PQMMA3pHe\nSHrbgqOaJDM8bm3c58+fT1FRET09PWO9lVFR8gNmNpoRFoHOX8FfjwuDqQDBvsGcji1GNKpzPH0o\nra1wxx1yyzyDwb5rd5XvYl3VFTTE9BEV6xrJyt0I8gnCS+dFe1/72dcuio/k9GTY//ZBl+/H0UwZ\njXNxa+Pu5+fH3Llz3b55R1dXF6WlpcyfP1+R+QYzZRRN63LRAaahVMwqI6w+Uu5rpyI//jF87Wuw\n2gHHe+fpncRUzaIldmIGUwc5Px3ST6+nNLWfI5+7vvS2FkxVBrc27gDLly9n7969Y72NEcnLyyMt\nLQ0fH2UaKntaez1rhGVIhLR5U/qfbNXW+Ogj2LNHbp3nCDvLdxLUmIiU4hr5yF2JM5ybDglgnA3i\nmOtNRH9NPz7xtt1L7e3tVFRUMG/ePJV35Xm4vXFftmwZe/a4T/nY4VDacxhoHfCoxtjWmBmTSmVy\nF3veUSedtakJ7roLXn0VAgPtv76yvZKOnlYia8OYsWFitNWzxnAZM8mXxpBYGezyAn7GEiP+U/1t\n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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.linspace(-3 * np.pi,3 * np.pi,100)\n",
"\n",
"p = plt.plot(x, np.sin(x), 'k')\n",
"p = plt.plot(x, y1(x))\n",
"p = plt.plot(x, y3(x))\n",
"p = plt.plot(x, y5(x))\n",
"p = plt.plot(x, y7(x))\n",
"p = plt.plot(x, y9(x))\n",
"\n",
"a = plt.axis([-3 * np.pi, 3 * np.pi, -1.25, 1.25])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"黑色为原始的图形,可以看到,随着多项式拟合的阶数的增加,曲线与拟合数据的吻合程度在逐渐增大。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 最小二乘拟合"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"导入相关的模块:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy.linalg import lstsq\n",
"from scipy.stats import linregress"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.linspace(0,5,100)\n",
"y = 0.5 * x + np.random.randn(x.shape[-1]) * 0.35\n",
"\n",
"plt.plot(x,y,'x')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"一般来书,当我们使用一个 N-1 阶的多项式拟合这 M 个点时,有这样的关系存在:\n",
"\n",
"$$XC = Y$$\n",
"\n",
"即\n",
"\n",
"$$\\left[ \\begin{matrix}\n",
"x_0^{N-1} & \\dots & x_0 & 1 \\\\\\\n",
"x_1^{N-1} & \\dots & x_1 & 1 \\\\\\\n",
"\\dots & \\dots & \\dots & \\dots \\\\\\\n",
"x_M^{N-1} & \\dots & x_M & 1\n",
"\\end{matrix}\\right] \n",
"\\left[ \\begin{matrix} C_{N-1} \\\\\\ \\dots \\\\\\ C_1 \\\\\\ C_0 \\end{matrix} \\right] =\n",
"\\left[ \\begin{matrix} y_0 \\\\\\ y_1 \\\\\\ \\dots \\\\\\ y_M \\end{matrix} \\right]$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Scipy.linalg.lstsq 最小二乘解"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"要得到 `C` ,可以使用 `scipy.linalg.lstsq` 求最小二乘解。\n",
"\n",
"这里,我们使用 1 阶多项式即 `N = 2`,先将 `x` 扩展成 `X`:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.05050505, 1. ],\n",
" [ 0.1010101 , 1. ],\n",
" [ 0.15151515, 1. ],\n",
" [ 0.2020202 , 1. ]])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X = np.hstack((x[:,np.newaxis], np.ones((x.shape[-1],1))))\n",
"X[1:5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"求解:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(array([ 0.50432002, 0.0415695 ]),\n",
" 12.182942535066523,\n",
" 2,\n",
" array([ 30.23732043, 4.82146667]))"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"C, resid, rank, s = lstsq(X, y)\n",
"C, resid, rank, s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"画图:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"sum squared residual = 12.183\n",
"rank of the X matrix = 2\n",
"singular values of X = [ 30.23732043 4.82146667]\n"
]
},
{
"data": {
"image/png": "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\nTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"p = plt.plot(x, y, 'rx')\n",
"p = plt.plot(x, C[0] * x + C[1], 'k--')\n",
"print \"sum squared residual = {:.3f}\".format(resid)\n",
"print \"rank of the X matrix = {}\".format(rank)\n",
"print \"singular values of X = {}\".format(s)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Scipy.stats.linregress 线性回归"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于上面的问题,还可以使用线性回归进行求解:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(0.50432001884393252, 0.041569499438028901)"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"slope, intercept, r_value, p_value, stderr = linregress(x, y)\n",
"slope, intercept"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"R-value = 0.903\n",
"p-value (probability there is no correlation) = 8.225e-38\n",
"Root mean squared error of the fit = 0.156\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"p = plt.plot(x, y, 'rx')\n",
"p = plt.plot(x, slope * x + intercept, 'k--')\n",
"print \"R-value = {:.3f}\".format(r_value)\n",
"print \"p-value (probability there is no correlation) = {:.3e}\".format(p_value)\n",
"print \"Root mean squared error of the fit = {:.3f}\".format(np.sqrt(stderr))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以看到,两者求解的结果是一致的,但是出发的角度是不同的。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 更高级的拟合"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy.optimize import leastsq"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"先定义这个非线性函数:$y = a e^{-b sin( f x + \\phi)}$"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def function(x, a , b, f, phi):\n",
" \"\"\"a function of x with four parameters\"\"\"\n",
" result = a * np.exp(-b * np.sin(f * x + phi))\n",
" return result"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"画出原始曲线:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.linspace(0, 2 * np.pi, 50)\n",
"actual_parameters = [3, 2, 1.25, np.pi / 4]\n",
"y = function(x, *actual_parameters)\n",
"p = plt.plot(x,y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"加入噪声:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAEACAYAAACqOy3+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4FGW2BvD3EBgFAgRIlIiQBIngoCyiLIIQEWUJq4CI\nAiIMBEZRwQmKzAhyL8OwKffOFRQGHcZBUVRACBDWyKYgKFuCsiWyxoGQRkjYkj73j+4shCR0J91d\nVZ339zx56K5e6pBUn/7q1LeIqoKIiKynnNEBEBFRyTCBExFZFBM4EZFFMYETEVkUEzgRkUUxgRMR\nWZRLCVxE6ojIJhFJFJEDIvKyc/skETkpIj86fzp7N1wiIsohrvQDF5FaAGqp6h4RCQSwG0AvAE8D\nuKiq73g3TCIiKqi8K09S1VQAqc7bl0TkIIDazofFS7EREVEx3K6Bi0g4gGYAvnNuGi0ie0VkgYgE\neTA2IiIqhlsJ3Fk++QLAK6p6CcBcABEAmgI4A2CWxyMkIqJCuVQDBwARqQBgJYDVqjq7kMfDAaxQ\n1QcKbOdkK0REJaCqxZaoXe2FIgAWAEjKn7xFJDTf03oD2F9EEJb9mThxouExlNX4rRw74zf+x+rx\nu8Kli5gA2gAYCGCfiPzo3PYmgAEi0hSAAkgGEOPi+xERUSm52gtlKwpvra/2bDhEROQqjsS8haio\nKKNDKBUrx2/l2AHGbzSrx+8Kly9ilngHIurtfRAR+RsRgXriIiYREZkPEzgRkUUxgRMRWRQTOBGR\nRTGBExFZFBM4EZFFMYETEVkUEzgRkUUxgRMRWRQTOBGRRTGBExFZFBM4EZFFMYETEVkUEzgRkUUx\ngZO5xcUBNtuN22w2YNKkwrfHxfksNCKjMYGTubVpA0yYgA1ffom2bduiU8uW+PK++/DUihX48r77\n0KllSwwfPhzZaWnAhAmO5xOVEVzQgUzv+L59WN+qFUKmTcNDmzbhlxEjkF2lCgIuXkTYvHkYc/o0\nXrPb8fDatUBQkNHhEnmEKws6MIGTqV27dg3t2rXD0A4dMGLqVCA5GQgPz3tCSgoQEYGHg4Mx7bPP\n0KFDB6NCJfIorshDljd+/HhEVK+O4TabI3nPmJFX+7bZHPeTk/FV69b447PPIjU11diAiXyILXAy\nreXLl+Mvo0dj5xNP4PZZsxzlEZvNUeseNw6YPh2YMiV3+44nnsCUihWxdNMmBAQEGB0+UamwhEKW\nlZKSgpYtW+KbcePQcNiwG2vbNhswezbw6qs3bM9OS8OfH3sMt/fpg4kTJxoQNZHnMIGTJeXUvZ9+\n+mmMHTvWrdeeOXMGzZs3x7///W/Ww8nSmMDJksaOHYsjR45g+fLlECn2+C3U+vXrMXjwYPzwww+o\nVauWFyIk8j4mcLKc1atXY9SoUfjhhx9Qo0aNEr/PxIkTsX37dqxdu7ZEXwJERmMCJ8tp27Ytxo4d\ni6eeeqpU75OdnY3IyEgsXrwYLVq08FB0RL7DboRkKfv370dKSgp69OhR6vcKCAhATEwM5s6d64HI\niMzJpQQuInVEZJOIJIrIARF52bm9hoisE5FDIrJWRDgMjkomLg7/nD0bw4cPR/ny5R3bSjK3Sb65\nU4YOHYply5YhPTmZc6SQX3K1BX4dwBhVbQSgFYAXReQ+AG8AWKeq9wLY4LxP5LaLjRvjvkWLMLxf\nP8eGnP7e7s5t4pw7BTYbQkJC0O+JJ/DLoEGcI4X8kksJXFVTVXWP8/YlAAcB1AbQA8BC59MWAujl\njSDJ/y2Ki8M3TzyBu957zzE8fsKEvEE67ggKcrxuwgQgJQVvZ2Vh2JkzsFet6pW4iYzk9kVMEQkH\n8A2A+wEcV9Xqzu0C4HzO/XzP50VMKpaqokmTJnjnnXfQsX59ICLi5jlP3OWcI0WPHUOTnj0d792x\no6dCJvI6j1/EFJFAAF8CeEVVL+Z/zJmlmanJbdu3b8eVK1fQ4cEHc+c2uWHOE3flmyNFZs7EK88/\nz4uZ5JdcboGLSAUAKwGsVtXZzm0/AYhS1VQRCQWwSVUbFnid5h/WHBUVhaioKA+FT/5g4MCBaH3f\nfXjx9Okb5jYpURml4OtsNlyLjUXk559je1ISateu7b3/CFEpJCQkICEhIff+22+/7Zl+4M7yyEIA\naao6Jt/26c5t00TkDQBBqvpGgdeyhEJFOnv2LCIjI3Hi/fdRpXPnm+c82bYNiI52/Q3j4hwXLAu8\nz3vPPotzLVtyjhSyDI8N5BGRtgA2A9iHvDLJeAA7AXwOoC6AFABPq6qtwGuZwKlI06dPR1JSEv75\nz396dT/79u1D165dkZKSktdNkcjEOBKTTM1utyMyMhKffPIJWrZs6fX9tWnTBn/605/Qu3dvr++L\nqLQ4EpNMbe3atahWrZrPhrqPGjWKFzPJrzCBk2Hmzp2LUaNG+Wyyqb59+2LPnj04fPiwT/ZH5G0s\noZAhjh8/jqZNm+LEiROoXLmyz/Y7btw42O12zJw502f7JCoJllDIfJxzlSxYsADPPfecI3mXZM6T\nEoqJicHChQtx9epVn+yPyJuYwMm3nHOVrPrkEwwePLjkc56U0D333IOGDRtiw4YNPtkfkTcxgZNv\nBQXh58GD8dKZM3goOLjkc56UQu/evbF06VKf7Y/IW5jAyee+3LABx/r0gdSrB8TG+i55O8s3vXv3\nxtdff43s7Gyflm+IPI0JnHxu3ZIlGG6zlX7OE3c5yzcR1asjNDQUO+LjfVq+IfI09kIhnzp54ADi\nH3oIz588ifLBwSWf86SknPubXaECHkpIQNuEBJ+Wb4hcxZGYZDorRo7E6t9+w5xPPsnbWJI5T0rD\nOdVs29q1seXECS56TKbEboRkOu8eOoRO/fvfuDEoyHfJ2znVrB47hpiLF3Fg61bf7JfIC5jAyWfS\n0tKwe/duPPnkk8YEkK9cIxER+HnQIFweO9Z3NXgiD2MCJ59ZsWIFOnbsiIoVKxoTwLZtN9TauwwY\ngDGZmY7tRBbEBE4+s3TpUmNnAoyOvuGCZevWrXE0LQ1HGzYs5kVE5sUETj6RkZGBTZs2IdpXtW4X\nlCtXDj179uSgHrIsJnDyiTVr1qBVq1aoXr36rZ/sQxyVSVbGBE4+YXj5pAgdOnRAUlISUlNTjQ6F\nyG1M4OR1165dw6pVq9CzZ0+jQ7nJ7373O3Tp0gXLly83OhQitzGBk9clJCSgQYMGuOuuu4wOpVAs\no5BVMYGT15m1fJKjS5cu2L59Oy5cuGB0KERuYQInr7Lb7Vi+fLmpE3hgYCDat2+POM5KSBbDBE5e\ntWPHDtSoUQORkZFGh1IsllHIipjAyavMXj7J0b17d6xbtw6XL182OhQilzGBk3c4F0/4+uuv0atX\nL8c2Ey+eEBISgiZNmmDjxo1Gh0LkMiZw8o42bXDhpZeg6elo1qyZz9e+LIno6GisXr3a6DCIXMYE\nTt4RFITFDzyAuTVqoNzx44asfemurl27Ii4uDpy/nqyCCZy8ZllCAq6MHg1ERPh27Ut3Ocs9jRo1\nQnZ2Nn766SdTl3uIcjCBk1dkZmZi/5YtePzHH32/9qW7nGtlyoUL6Nq1KzZ8+aXpyz1EAJdUIy+J\n/+wzXB47Fr0SEx0tb1+vfekuZ3zrmzVDxqRJ6HnggDnjpDLDY2tiisiHAKIB/EdVH3BumwTgDwDO\nOp82XlXXFPJaJvAyaE50NLJatsTLb72Vt9HXa1+6y7lWZqNKlfDtmTOoWrWq0RFRGebJNTE/AtC5\nwDYF8I6qNnP+3JS8qWxSVUxPTMTjffrc+IAv1750l3OtTCQnY2rNmviGk1uRBbiUwFV1C4D0Qh7i\nct50k4MHD0JV8fvf/97oUFyTv7wTHo5To0ah8tSp5q3ZEzmV9iLmaBHZKyILRIQFQwIArFq1Cl27\ndoWIRb7fC6yV2bFvX/zx/HkoV6wnkytfitfOBTDZefu/AMwCMKywJ06aNCn3dlRUFKKiokqxWzK7\nuLg4vPbaa0aH4boCZZ3IyEjYq1bF3rvvRlODQqKyJyEhAQkJCW69xuVeKCISDmBFzkVMNx7jRcwy\n5MKFC7j77ruRmpqKypUrGx1Oib366qu444478OabbxodCpVRnryIWdibh+a72xvA/pK+F/mP9evX\no02bNpZO3kDeqEwiM3OphCIinwJoDyBYRE4AmAggSkSawtEbJRlAjNeiJMvIqX9bXbt27bB//36k\npaWhZs2aRodDVCgO5CGPsdvtqF27NrZs2YL69esbHU6p9ejRAwMGDMCAAQOMDoXKIK+WUIgK2rNn\nD6pWreoXyRtwzE64atUqo8MgKhITOHmMv5RPcnTp0gVr1qxBdna20aEQFYoJnDzG3xJ43bp1UatW\nLXz//fdGh0JUKCZw8ohz584hMTER7dq1MzoUj+ratSvLKGRaTODkEfHx8Xjsscdw2223GR2KR7EO\nTmbGBE4e4W/lEwBAXBxa33cfjh49itTUVMc2LvRAJsIETqWWlZWF+Ph4dOnSxehQPKtNG1SYNAk9\n27d3tMItsK4nlS3sB06ltnXrVrz00kvYs2eP0aF4ns2Gn/r2xezy5fH+PfeYd0EK8juu9AMvzWRW\nRACAlStXolu3bkaH4R1BQQiZNg3vP/QQrv70E25j8iYTYQmFSicuDgnLlqF79+552/ypTmyzoeaH\nH6LPgw/i19hYzhFOpsIETqWSUrs2Rhw/jocjIx0b/KlOnG+hh4f69sV7oaGO+0ziZBKsgVOp/P3v\nf8fBb7/FnOrVgdhYx7Jk/lInjotzfBEFBWH//v3o2bMnju7eDdm+3bxLw5Hf8NiixqUMggncj3Xq\n1AkjRoxAn+bNgYgIIDkZCA83OiyPU1WEh4dj9erV1lkqjiyNk1mRV128eBHbt2/Hky1a5C4IjBkz\n/LLEICLo1q0bVqxYYXQoRLmYwKnE1q1bh44PPYQqf/tb7oLAmDLFb+vE3bt3x8qVK40OgygXSyhU\nYkOHDkWvChXQY9q0G2veNptjoWA/qxNfuXIFd955J44dO8ZFHsjrWAMnr7Hb7QgNDcW3336LevXq\nGR2Oz/Tq1Qt9+/bFwIEDjQ6F/Bxr4OQ1u3btQnBwcJlK3gDQrVs3llHINJjAqUT8evRlMaKjoxEf\nH4/r168bHQoREzi5IC7upouSm5YuxaAyWAcODQ1F/fr1sW3bNqNDIWICJxe0aXNDz5JTiYkYcvgw\nGg4danBgxmB3QjILJnC6taCgvO6BKSmwvfgidvTogfLBwUZHZgjWwcksmMDJNUFBjqHyERF4JyAA\nHZ56yuiIDNOsWTNcvHgRhw4dMjoUKuOYwMk1NhswYwYuJyWh1ZYt6NyqldERGaZcuXKIjo5GnL/M\nuEiWxQROt5ZvVr4NR49ieYsWCPLTIfOu6t69O+vgZDgO5KFbyzcr38iRIxEZGYnXhg3zy9GWrsrI\nyECtWrVw4sQJBPnDzItkOhyJSR6lqqhTpw42bNiABg0aGB2O4bp27Yrnn38e/fv3NzoU8kMciUke\ntXPnTgQGBuLee+81OhRjOfvF9+rVC1999ZVjmz+tQkSW4VICF5EPReRXEdmfb1sNEVknIodEZK2I\n8DzSzy1ZsgRPP/00RIptFPg/Z7/4pzp0wJo1a5B5+rT/rEJEluJSCUVEHgVwCcC/VPUB57bpAM6p\n6nQReR1AdVV9o5DXsoTiB3IWNFi5ciUeeOABo8MxnvPC7nN79uDtKlVQf/Fi/1iFiEzDYyUUVd0C\nIL3A5h4AFjpvLwTQy+0IyTJ27tyJSpUq4f777zc6FHNw9otftH07Zpcvz+RNhihNDfxOVf3VeftX\nAHd6IB4yqSVLlqBfv34sn+Rw9otP27ULTdaudZRRiHysvCfeRFVVRIqsk0yaNCn3dlRUFKKiojyx\nW/IRVcWSJUs4fDxHvn7xNYOCsLJ1azw2dCjLKFQqCQkJSEhIcOs1LncjFJFwACvy1cB/AhClqqki\nEgpgk6o2LOR1rIFb3I4dOzBkyBAkJSWxBQ7c0C8eAObNm4dvV6/GR3/4Q5ntF0+e5+1uhF8DeN55\n+3kAy0rxXmRiLJ8UEB19Q0u7d+/e+GrjRmQ+9piBQVFZ5Go3wk8BbAfQQEROiMgLAP4G4AkROQSg\ng/M++Zmc8km/fv2MDsW0QkJC8PDDD2PVqlVGh0JljEs1cFUdUMRDHT0YC5kQe5+45umnn8aSJUvQ\nt29fo0OhMoQjMalYLJ+4pnfv3o5BPZmZRodCZQgTOOUpsHSaqiL+s88wtFYtA4OyhpCQELRo0YJl\nFPIpJnDKU2DptN0bNmD8pUsIG1BUBY3y69evH5YsWWJ0GFSGcDZCulFOH+fYWGzr1QvfPPkk3pw+\n3eioLOHs2bOoX78+zpw5g0qVKhkdDlkcZyMk9+VbOm3c2bPoMXiw0RFZBsso5GtM4HQj5xDxH7/6\nCi9mZqJR7dpGR2QpLKOQL7GEQnnyDRH/03//N2qUK4c3MzIcK9JziLhLWEYhT2EJhdyzbRswZQq0\nWjUsWbLEUT6ZMsWxnVzCMgr5EhM45XEOEd+6dSsCAwPRqFEjR8ub83u4pX///li0aJHRYVAZwBIK\n3WTQoEF48MEHMWbMGKNDsaSLFy+ibt26SEpKQmhoqNHhkEVxUWNy2/nz51GvXj0cPXoUNWvWNDoc\nyxoxYgTCwsIwYcIEo0Mhi2INnNz28ccfo1u3bkzepRQTE4P58+fDbrcbHQr5MSZwyqWq+OCDDzBi\nxAijQ7GmfFMRNG/eHDVr1sSmpUu5Wj15DRM45dq2bRvsdjseffRRo0OxpgJTEbw0cCCuxcZytXry\nGiZwyjVv3jyMGDGCMw+WVFCQo9vlhAlASgqeS0rCyLQ0nLl82ejIyE/xIiYB4MVLj0pJASIigORk\njPjrXxEeHo4333zT6KjIYngRk1z28ccfIzo6msm7tJxTESA5GZgxA6MGDODFTPIaJnCCquaWT6gU\n8k1FgPBwYMoUNPviC9StWhXr1q0zOjryQ0zghG3btiE7Oxvt2rUzOhRrc05FkDtvjLMm/sajj2Le\nvHnGxkZ+iTVwwuDBg9G0aVOMHTvW6FD80m+//YawsDCOzCS3cCQm3VLOxcsjR44gODjY6HD81ogR\nIxAREYHx48cbHQpZBC9i0i19/PHH6Nq1K5O3l40YMYIXM8njmMDLMF689J3mzZsjKCgI69evNzoU\n8iNM4GXY5s2bkZWVhfbt2xsdit8TEcTExGDOnDlGh0J+hAm8LHLO2TF58mSMGzfOMfLSZuOcHV42\naNAg7Ny5E3v27DE6FPITTOBlUZs2OPXCC0g7ehSDBw/O67/MOTu8qlKlShg3bhzefvtto0MhP8EE\nXhYFBSHm7Fl8es89qHDqVN7gE6576R35ZimMiYnBzp07sfebb3jGQ6XGBF4Gbdq0CT//+isiP/jA\nMWdHbCyTtzflm6WwYsWKeOvll3FyyBCe8VCplTqBi0iKiOwTkR9FZKcngiLvUVVMnDgR//Xaayj/\n7ru5c3bktBDJCwrMUjgsORmxV69i15EjRkdGFlfqgTwikgyguaqeL+JxDuQxkfXr1+ONkSOx84kn\nUG7qVEdyyT+HB1vi3pNvlsI5q1YhLi4OcSyjUBF8OZCHE0hbQE7re0avXnnJG8hrIW7bZmyA/qzA\nLIXD+vTB/v37sWPHDqMjIwvzRAv8GIALALIBfKCq8ws8zha4ScTHx+PVV1/FgQMHEBAQYHQ4ZUfB\nMxzn/Q/vuQefr12LNWvWGB0hmZArLfDyHthPG1U9IyIhANaJyE+quiX/EyZNmpR7OyoqClFRUR7Y\nLbkjp/U9ceJEJm9fK2KWwkEJCZj800/49ttv0bp1a2NjJMMlJCQgISHBrdd4dDIrEZkI4JKqzsq3\njS1wE1i9ejViY2Oxd+9eJnATmT9/PpYsWYK1a9caHQqZjNdr4CJSSUSqOG9XBvAkgP2leU/yPFXF\nW2+9xda3CQ0ZMgRHjhzB1q1bjQ6FLKi0FzHvBLBFRPYA2AFgpaqyKWEyy5cvx9WrV9GnTx+jQ6EC\nKlSogD//+c+YMGECeKZK7uJ84H7OZrPhgQcewMKFC9GhQwejw6FCZGVloVWrVoiJicHw4cONDodM\nggs6EIYOHYrbb7+ds+CZ3IEDB/DYY49h9+7dqFu3rtHhkAlwQYcy7vtJk7B7wwZMnz49byNnHTSl\n+++/H2PGjMEf/vAHllLIZUzgfspms2HI/PmIa9YMgVlZORs566CJjRs3Dunp6Zg/f/6tn0wEllD8\n1gsvvIBKlSrhvZw5OGJjHSMBOVze1BITExEVFYVdu3YhLCzM6HDIQKyBl1FxcXEYPXo09u3bh8DA\nwBvm4EB4uNHh0S1MnToVGzduxNq1ax2LbVCZxBp4GZSeno6YmBgsWLDAkbwLzMHBWQfNLzY2Fjab\nDfPmzTM6FDI5tsD9zJAhQ1C5cmW89957Rc7BwTKK+SUmJqJ9+/bYtWsXwnnWVCaxBV7GrFixAps3\nb8a0adMcG4qYg4OzDppEvpV6cjl7CTVq1AivvfYahg0bhuzsbGPiI9NjC9xP7Nq1C127dsWyZcvw\nyCOPGB0OueIWZ0hZWVno3Lkz6tevj7lz57IeXsbwImYZcejQIbRv3x4ffPABevToYXQ45I6cpJ2/\nl9C2bY6unkFBuHjxIqKiotC3Y0eMb9cOiI42OmLyEZZQyoDTp0+jU6dOmDJlCpO3FQUFOZJ3/rVJ\n862hWaVKFaxZvBh1P/gA8xITjY6WTIYJ3MLS09PRqVMnxMTEYOjQoUaHQyVRWC+hAmtohsyejbbf\nfIPJ//u/+Pzzz42OmMxEVb3649iFH1m5UjU9/cZt6emO7T6UmZmpbdu21VdffVXtdrtP900ekp6u\n+sc/5h1PBe8nJ6sCjn9Vde/evRoSEqLr1q0zJFzyLWfuLDa/sgXurnyntwAMGZ6elZWF/v37Iyws\nDLNmzeLFLasqrpdQIS3zxo0b44svvsCzzz6LXbt2ubaPYnq6kB+4VYYv7Q/8rQWumtdSSk6+scXk\nA5mZmfrMM89o586d9erVqz7bL/nQLVrmy5Yt01q1aul3331X6vci84ILLXAm8JIqcHrrC8eOHdNm\nzZrpM888o5cuXcp7wCRlHfKQ4v6ezseWL1+uISEh+v7776v9/Pni/9YGNjio5JjAvcWAD8Tq1av1\njjvu0NmzZ99c82Yrq+zI97f9+eeftVXDhrq+YUPNPH26+NcZ0OCwDJM2gMyVwE3wC/EIHyfL7Oxs\nnTx5st511126efPmW8fFVpb/y/e3vjp8uL7Qu7c++OCDmlxUci7s2DBp0jKESRtA5kngJvmFeIQP\nD/z09HTt3r27PvLII3rq1Klbv4CtrLIj39/abrfru+++q3feeaeuWbPmxucVlZxSUkyZtAxjwgaQ\neRK4SX4hVpGdna2ffPKJhoWF6UsvveTaxUoTHoDkJUW0qLeuXKmhoaEaExOjqampju0TJxbd4DDb\nMWP0WYHJGkDmSeAm+YVYQUJCgr4aGantmzTRTZs25T1Q3IFs0lNA8oJbtKjPHzumY8aM0Yjq1XVn\nixZ66eTJ4t/PTEnLyOPYbF9maqYEbpJfiJkdPHhQe/TooWFhYfr5vHlqHzXq5gN58eLCWyjFtbLI\nvxTXSs2XhGwDB+oLvXvrXXfdpf/4xz80Kyvr5vcyYdIyJCaTNoDMk8BL+gsx+pTKE27xf9i7d6+O\nGDFCg4ODdcaMGXr58uW85xQ8kE16oJGJFGhRf/fdd9q2bVu9//77ddGiRZqZmel4nqeOJRe6PBb6\nmBv/B68zaZ4xTwJXLdkvxMiE5ak/aiH/h8vDhun8GTO0efPmWqdOHf3LX/6i586du/m1hR3IZmw1\nkTkUcWzY7XZdvny5Pvnkk1qjRg0dNWqUHnr3XUf/8YKv9+RntCSfX/aYyWWuBF5SRiUsT355pKdr\nVkyMbv7XvzQ+MlLrVq2q/fv3192TJ2tWwcTtygUmM9UtyRxcPF5/+eUXnTx5skZERGjjxo119uzZ\nevpWfchd3Xdhx6o7n1/2mLmBfyRwVeMSVim+PLKzs3XPnj06c+ZM7dKlizaqXFkV0I8mTtS0tLQb\n39+dA5YtcCqMm63U7Oxs3bhxoz733HMaFBSkjRo10ldeeUW//vprvXDhgvv7L+4z6urn18X6fomP\ne4u15E2TwP/zn/+U/H/hqVMqL9fjUlNTde3atTpz5kzt37+/hoSEaGRkpI4cOVKXL1yol4cOdb2F\nUlSsixeXyZYIeVdWVpbu2LFD//rXv+rjjz+ugYGB2rp1a3399dd10aJFun//fr127VrRb+BuC9zb\ntfESfH6uXLmi+/bt02XLlhX/3j5kmgRerVo1DQ4O1vbt2+uoUaP0//7v/zQ+Pl6TkpL0t99+K/p/\n4MlTKg/U4347flz379+vcXFxOmfOHB0zZox27NhR77jjDu0fGKjRbdroyy+/rB999JH+8ssvridd\nT7RQiDwkMzNT169fr5MnT9Z+/fppgwYNtGLFitqkSRMdNGiQ/u1vf9NPP/1Ut2/frqcSEwvvMVVc\nDbw0n99SNHSunz2rJw8c0DNPPaXL/+d/9LvmzXVgt27aoEEDve2227RBgwbap0+fwnvsGMCVBF7q\nJdVEpDOA2QACAPxDVacVeFztdjvOnDmDpKQkJCYmIikpCYcPH8apU6dw4sQJVKhQAXfffTfq1KmD\n0NBQ1KhRAzVq1EDTU6dwpXlzVKlTB0FBQahUqRIqX7+OagcOIKBdOwROnYpyr78OmTkzb1rOuLjc\n5ahy2WzAtm3QRx6BvvkmMl98ETJrFv7z8su4GBCAjIwMZGRkwGaz4dy5c0hLS8Olkyfx+MaN+KBu\nXRw+exa2lBSMz8jAgogI1KhXD2FhYahXrx4aN26Mxo0b465KlSB//vPN6xu2awd06lRoPIiOLnxJ\nLa4YTyaTmZmJpKQk7Nu3D0lJSTh+/Dh++eUXRB46hLUZGahSpw7q1KmDkJAQ3B0YiGaZmahatSqu\nNG+OqnXrIjAwEJUrV0aV7GxUT0pC+fbtUXXaNMi4cSg3a1bxx32+tUKzq1TB5TNnEPDWWzg3dCgC\n58zBiZH7YoWwAAAIX0lEQVQjka6KSydPot6CBdjQoQPS09PRLj4ei+vUweM//IC3AgJw5Nw5hISE\n4OGQECzbuxfvjB6N2m3a4Pe//z3uvfde3Hbbbb79pd6C19fEFJEAAD8D6AjgFIDvAQxQ1YP5nqPF\n7UNVYbPZcPLkSZw8eRKnT59Geno6zp8/n/vv+fPnYbPZkJmZicuXL+f+G5KRgSPZ2YgsXx4nAgIQ\nEBCAGuXK4a1r1/DXSpWQrorK16/jL1euYAKA83Y7IkRwTBUP1ayJ81WrorPdjkPBwdBq1RAUFITg\n4GDUrlwZHQ8cQEqvXqgWFoZatWohLCwMNQMCINu3F70uobvJ+BaL2hJZwZUrV3DixAmcOHEitwFU\n8N9Lly7lNpRyfoIvXcLhrCzUE8HJ8uVRPt+PqsJutyM7OxtPXr+Orao4b7fDbrejYsWKuPO229Au\nIAAHqlVDrM2GLyIi8MK5c1jZujVur1ULNWrUQJgqBr31FnZ/8QVCHn4YoaGhqJCRYZkGkysJvLTl\nkdYA1uS7/waANwo8xzvnFzmnRYcPa1ZMjGaePq0XL17UCxcuaHpysl4eOlQv7N2rV4cP18tnzuj1\n69cd3aa83bfanQuuLIlQWeX8nNmPHdPsUaP0SmqqXrp0SS9cuKDnzp3TtLQ0tdls+ttvv2lGRoZe\nvnxZr127VvjqU652t/X0Z93L4O0aOIC+AObnuz8QwN/V2wnclT9EwT9qca/xVM8O9hAhf+XJxoaH\nu+i6nKiLGsls0gaTLxJ4H0MS+K0OppJc+S5tV0WLfbsTucWTx7cXB8lZMVEXxZUEXtoaeCsAk1S1\ns/P+eAB2zXchU0R04sSJua+JiopCVFRUifd5SyWpK3viQmIxF0+LrJkTWYnZLrj72WcuISEBCQkJ\nuffffvttr1/ELA/HRczHAZwGsBNuXsT0OHf/qLyQSOS6lBQgIsKx2HJ4uNHR+DVXLmKWalV6Vc0C\n8BKAeABJAD7Ln7wNER19c+INCir6G7m4lcGJypriVrG32Rwt7+Rkx78Fn0c+V+p+4LfcQf4WuJ+d\n8hD5naLOSMeNA6ZP55mqD3m9Be62Nm0cf/Scb+6cg+DSpaK/9YnId3LOQCdMcJRLcpL0gQM8UzUh\n37bAgcIvhACsQxOZCWvdhjNfCxxwJOTYWMfBERvruF/Utz6TN5HvsdZtGb5P4EUdHIUldiLyrfxn\nv+HheQ0rJnFT8m0CL+7g4Lc+kfHYK8tSzNELJT4e2LyZNXAiIievz0boYhC3HsjD7oVERDewTgIn\nIqIbmLMXChEReQQTOBGRRTGBExFZFBM4EZFFMYETEVkUEzgRkUUxgRMRWRQTOBGRRTGBExFZFBM4\nEZFFMYETEVkUEzgRkUUxgRMRWRQTOBGRRTGBExFZFBM4EZFFMYETEVkUEzgRkUUxgRMRWRQTOBGR\nRZU4gYvIJBE5KSI/On86ezIwIiIqXmla4ArgHVVt5vxZ46mgzCQhIcHoEErFyvFbOXaA8RvN6vG7\norQllGKXvPcHVj8IrBy/lWMHGL/RrB6/K0qbwEeLyF4RWSAiQR6JiIiIXFJsAheRdSKyv5CfHgDm\nAogA0BTAGQCzfBAvERE5iaqW/k1EwgGsUNUHCnms9DsgIiqDVLXYMnX5kr6xiISq6hnn3d4A9pck\nACIiKpkSJ3AA00SkKRy9UZIBxHgmJCIicoVHSihEROR7XhuJKSKdReQnETksIq97az/eIiIfisiv\nIlJoacjMRKSOiGwSkUQROSAiLxsdkztE5HYR2SEie0QkSUSmGh1TSYhIgHOQ2wqjY3GXiKSIyD5n\n/DuNjscdIhIkIl+IyEHn8dPK6JhcJSIN8g2O/FFELhT3+fVKC1xEAgD8DKAjgFMAvgcwQFUPenxn\nXiIijwK4BOBfhV2cNTMRqQWglqruEZFAALsB9LLY77+SqmaKSHkAWwH8SVW3Gh2XO0RkLIDmAKqo\nag+j43GHiCQDaK6q542OxV0ishDAN6r6ofP4qayqF4yOy10iUg6O/NlCVU8U9hxvtcBbADiiqimq\neh3AYgA9vbQvr1DVLQDSjY6jJFQ1VVX3OG9fAnAQwF3GRuUeVc103vwdgAAAlkokInI3gK4A/gHr\nDnizXNwiUg3Ao6r6IQCoapYVk7dTRwBHi0regPcSeG0A+Xd60rmNfMzZxbMZgB3GRuIeESknInsA\n/Apgk6omGR2Tm94FEAvAbnQgJaQA1ovILhEZbnQwbogAcFZEPhKRH0RkvohUMjqoEnoGwCfFPcFb\nCZxXRk3AWT75AsArzpa4ZaiqXVWbArgbQDsRiTI4JJeJSDcA/1HVH2HBVqxTG1VtBqALgBedJUUr\nKA/gQQBzVPVBABkA3jA2JPeJyO8AdAewpLjneSuBnwJQJ9/9OnC0wslHRKQCgC8B/FtVlxkdT0k5\nT3/jADxkdCxueARAD2cd+VMAHUTkXwbH5JacMR6qehbAUjjKolZwEsBJVf3eef8LOBK61XQBsNv5\n+y+StxL4LgCRIhLu/CbpD+BrL+2LChARAbAAQJKqzjY6HneJSHDO3DoiUhHAEwB+NDYq16nqm6pa\nR1Uj4DgN3qiqg42Oy1UiUklEqjhvVwbwJIoYqGc2qpoK4ISI3Ovc1BFAooEhldQAOL78i1WagTxF\nUtUsEXkJQDwcF6AWWKkHBACIyKcA2gOoKSInALylqh8ZHJar2gAYCGCfiOQkvvEWmvI3FMBC51X4\ncgA+VtUNBsdUGlYrKd4JYKmjHYDyABap6lpjQ3LLaACLnI3HowBeMDgetzi/NDsCuOW1Bw7kISKy\nKC6pRkRkUUzgREQWxQRORGRRTOBERBbFBE5EZFFM4EREFsUETkRkUUzgREQW9f/dYlve7WDutgAA\nAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from scipy.stats import norm\n",
"y_noisy = y + 0.8 * norm.rvs(size=len(x))\n",
"p = plt.plot(x, y, 'k-')\n",
"p = plt.plot(x, y_noisy, 'rx')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Scipy.optimize.leastsq"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"定义误差函数,将要优化的参数放在前面:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def f_err(p, y, x):\n",
" return y - function(x, *p)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"将这个函数作为参数传入 `leastsq` 函数,第二个参数为初始值:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(array([ 3.03199715, 1.97689384, 1.30083191, 0.6393337 ]), 1)"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c, ret_val = leastsq(f_err, [1, 1, 1, 1], args=(y_noisy, x))\n",
"c, ret_val"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`ret_val` 是 1~4 时,表示成功找到最小二乘解:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nA5MAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"p = plt.plot(x, y_noisy, 'rx')\n",
"p = plt.plot(x, function(x, *c), 'k--')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Scipy.optimize.curve_fit"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"更高级的做法:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy.optimize import curve_fit"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不需要定义误差函数,直接传入 `function` 作为参数:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"p_est, err_est = curve_fit(function, x, y_noisy)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 3.03199711 1.97689385 1.3008319 0.63933373]\n"
]
},
{
"data": {
"image/png": "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\nA5MAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"print p_est\n",
"p = plt.plot(x, y_noisy, \"rx\")\n",
"p = plt.plot(x, function(x, *p_est), \"k--\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里第一个返回的是函数的参数,第二个返回值为各个参数的协方差矩阵:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 0.08483704 -0.02782318 0.00967093 -0.03029038]\n",
" [-0.02782318 0.00933216 -0.00305158 0.00955794]\n",
" [ 0.00967093 -0.00305158 0.0014972 -0.00468919]\n",
" [-0.03029038 0.00955794 -0.00468919 0.01484297]]\n"
]
}
],
"source": [
"print err_est"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"协方差矩阵的对角线为各个参数的方差:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"normalized relative errors for each parameter\n",
" a\t b\t f\tphi\n",
"[ 0.09606473 0.0488661 0.02974528 0.19056043]\n"
]
}
],
"source": [
"print \"normalized relative errors for each parameter\"\n",
"print \" a\\t b\\t f\\tphi\"\n",
"print np.sqrt(err_est.diagonal()) / p_est"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 04-scipy/04.05-minimization-in-python.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 最小化函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## minimize 函数"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab inline\n",
"set_printoptions(precision=3, suppress=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"已知斜抛运动的水平飞行距离公式:\n",
"\n",
"$d = 2 \\frac{v_0^2}{g} \\sin(\\theta) \\cos (\\theta)$\n",
"\n",
"- $d$ 水平飞行距离\n",
"- $v_0$ 初速度大小\n",
"- $g$ 重力加速度\n",
"- $\\theta$ 抛出角度\n",
"\n",
"希望找到使 $d$ 最大的角度 $\\theta$。\n",
"\n",
"定义距离函数:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\nAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def dist(theta, v0):\n",
" \"\"\"calculate the distance travelled by a projectile launched\n",
" at theta degrees with v0 (m/s) initial velocity.\n",
" \"\"\"\n",
" g = 9.8\n",
" theta_rad = pi * theta / 180\n",
" return 2 * v0 ** 2 / g * sin(theta_rad) * cos(theta_rad)\n",
"theta = linspace(0,90,90)\n",
"p = plot(theta, dist(theta, 1.))\n",
"xl = xlabel(r'launch angle $\\theta (^{\\circ})$')\n",
"yl = ylabel('horizontal distance traveled')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"因为 `Scipy` 提供的是最小化方法,所以最大化距离就相当于最小化距离的负数:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def neg_dist(theta, v0):\n",
" return -1 * dist(theta, v0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"导入 `scipy.optimize.minimize`:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"optimal angle = 45.0 degrees\n"
]
}
],
"source": [
"from scipy.optimize import minimize\n",
"result = minimize(neg_dist, 40, args=(1,))\n",
"print \"optimal angle = {:.1f} degrees\".format(result.x[0])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`minimize` 接受三个参数:第一个是要优化的函数,第二个是初始猜测值,第三个则是优化函数的附加参数,默认 `minimize` 将优化函数的第一个参数作为优化变量,所以第三个参数输入的附加参数从优化函数的第二个参数开始。\n",
"\n",
"查看返回结果:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" status: 0\n",
" success: True\n",
" njev: 18\n",
" nfev: 54\n",
" hess_inv: array([[ 8110.515]])\n",
" fun: -0.10204079220645729\n",
" x: array([ 45.02])\n",
" message: 'Optimization terminated successfully.'\n",
" jac: array([ 0.])\n"
]
}
],
"source": [
"print result"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Rosenbrock 函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Rosenbrock 函数是一个用来测试优化函数效果的一个非凸函数:\n",
"\n",
"$f(x)=\\sum\\limits_{i=1}^{N-1}{100\\left(x_{i+1}^2 - x_i\\right) ^2 + \\left(1-x_{i}\\right)^2 }$\n",
"\n",
"导入该函数:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy.optimize import rosen\n",
"from mpl_toolkits.mplot3d import Axes3D"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `N = 2` 的 Rosenbrock 函数:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x, y = meshgrid(np.linspace(-2,2,25), np.linspace(-0.5,3.5,25))\n",
"z = rosen([x,y])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"图像和最低点 `(1,1)`:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nbxj8dmObAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = figure(figsize=(12,5.5))\n",
"ax = fig.gca(projection=\"3d\")\n",
"ax.azim = 70; ax.elev = 48\n",
"ax.set_xlabel(\"X\"); ax.set_ylabel(\"Y\")\n",
"ax.set_zlim((0,1000))\n",
"p = ax.plot_surface(x,y,z,rstride=1, cstride=1, cmap=cm.jet)\n",
"rosen_min = ax.plot([1],[1],[0],\"ro\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"传入初始值:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1. 1. 1. 1. 1.]\n"
]
}
],
"source": [
"x0 = [1.3, 1.6, -0.5, -1.8, 0.8]\n",
"result = minimize(rosen, x0)\n",
"print result.x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"随机给定初始值:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 0.815 -2.086 0.297 1.079 -0.528 0.461 -0.13 -0.715 0.734 0.621]\n",
"[-0.993 0.997 0.998 0.999 0.999 0.999 0.998 0.997 0.994 0.988]\n"
]
}
],
"source": [
"x0 = np.random.randn(10)\n",
"result = minimize(rosen, x0)\n",
"print x0\n",
"print result.x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于 `N > 3`,函数的最小值为 $(x_1,x_2, ..., x_N) = (1,1,...,1)$,不过有一个局部极小值点 $(x_1,x_2, ..., x_N) = (-1,1,...,1)$,所以随机初始值如果选的不好的话,有可能返回的结果是局部极小值点:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 优化方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### BFGS 算法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`minimize` 函数默认根据问题是否有界或者有约束,使用 `'BFGS', 'L-BFGS-B', 'SLSQP'` 中的一种。\n",
"\n",
"可以查看帮助来得到更多的信息:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None,\n",
" bounds=None, constraints=(), tol=None, callback=None, options=None)\n",
"\n",
"Minimization of scalar function of one or more variables.\n",
"\n",
"Parameters\n",
"----------\n",
"fun : callable\n",
" Objective function.\n",
"x0 : ndarray\n",
" Initial guess.\n",
"args : tuple, optional\n",
" Extra arguments passed to the objective function and its\n",
" derivatives (Jacobian, Hessian).\n",
"method : str or callable, optional\n",
" Type of solver. Should be one of\n",
"\n",
" - 'Nelder-Mead'\n",
" - 'Powell'\n",
" - 'CG'\n",
" - 'BFGS'\n",
" - 'Newton-CG'\n",
" - 'Anneal (deprecated as of scipy version 0.14.0)'\n",
" - 'L-BFGS-B'\n",
" - 'TNC'\n",
" - 'COBYLA'\n",
" - 'SLSQP'\n",
" - 'dogleg'\n",
" - 'trust-ncg'\n",
" - custom - a callable object (added in version 0.14.0)\n",
"\n",
" If not given, chosen to be one of ``BFGS``, ``L-BFGS-B``, ``SLSQP``,\n",
" depending if the problem has constraints or bounds.\n",
"jac : bool or callable, optional\n",
" Jacobian (gradient) of objective function. Only for CG, BFGS,\n",
" Newton-CG, L-BFGS-B, TNC, SLSQP, dogleg, trust-ncg.\n",
" If `jac` is a Boolean and is True, `fun` is assumed to return the\n",
" gradient along with the objective function. If False, the\n",
" gradient will be estimated numerically.\n",
" `jac` can also be a callable returning the gradient of the\n",
" objective. In this case, it must accept the same arguments as `fun`.\n",
"hess, hessp : callable, optional\n",
" Hessian (matrix of second-order derivatives) of objective function or\n",
" Hessian of objective function times an arbitrary vector p. Only for\n",
" Newton-CG, dogleg, trust-ncg.\n",
" Only one of `hessp` or `hess` needs to be given. If `hess` is\n",
" provided, then `hessp` will be ignored. If neither `hess` nor\n",
" `hessp` is provided, then the Hessian product will be approximated\n",
" using finite differences on `jac`. `hessp` must compute the Hessian\n",
" times an arbitrary vector.\n",
"bounds : sequence, optional\n",
" Bounds for variables (only for L-BFGS-B, TNC and SLSQP).\n",
" ``(min, max)`` pairs for each element in ``x``, defining\n",
" the bounds on that parameter. Use None for one of ``min`` or\n",
" ``max`` when there is no bound in that direction.\n",
"constraints : dict or sequence of dict, optional\n",
" Constraints definition (only for COBYLA and SLSQP).\n",
" Each constraint is defined in a dictionary with fields:\n",
" type : str\n",
" Constraint type: 'eq' for equality, 'ineq' for inequality.\n",
" fun : callable\n",
" The function defining the constraint.\n",
" jac : callable, optional\n",
" The Jacobian of `fun` (only for SLSQP).\n",
" args : sequence, optional\n",
" Extra arguments to be passed to the function and Jacobian.\n",
" Equality constraint means that the constraint function result is to\n",
" be zero whereas inequality means that it is to be non-negative.\n",
" Note that COBYLA only supports inequality constraints.\n",
"tol : float, optional\n",
" Tolerance for termination. For detailed control, use solver-specific\n",
" options.\n",
"options : dict, optional\n",
" A dictionary of solver options. All methods accept the following\n",
" generic options:\n",
" maxiter : int\n",
" Maximum number of iterations to perform.\n",
" disp : bool\n",
" Set to True to print convergence messages.\n",
" For method-specific options, see :func:`show_options()`.\n",
"callback : callable, optional\n",
" Called after each iteration, as ``callback(xk)``, where ``xk`` is the\n",
" current parameter vector.\n",
"\n",
"Returns\n",
"-------\n",
"res : OptimizeResult\n",
" The optimization result represented as a ``OptimizeResult`` object.\n",
" Important attributes are: ``x`` the solution array, ``success`` a\n",
" Boolean flag indicating if the optimizer exited successfully and\n",
" ``message`` which describes the cause of the termination. See\n",
" `OptimizeResult` for a description of other attributes.\n",
"\n",
"\n",
"See also\n",
"--------\n",
"minimize_scalar : Interface to minimization algorithms for scalar\n",
" univariate functions\n",
"show_options : Additional options accepted by the solvers\n",
"\n",
"Notes\n",
"-----\n",
"This section describes the available solvers that can be selected by the\n",
"'method' parameter. The default method is *BFGS*.\n",
"\n",
"**Unconstrained minimization**\n",
"\n",
"Method *Nelder-Mead* uses the Simplex algorithm [1]_, [2]_. This\n",
"algorithm has been successful in many applications but other algorithms\n",
"using the first and/or second derivatives information might be preferred\n",
"for their better performances and robustness in general.\n",
"\n",
"Method *Powell* is a modification of Powell's method [3]_, [4]_ which\n",
"is a conjugate direction method. It performs sequential one-dimensional\n",
"minimizations along each vector of the directions set (`direc` field in\n",
"`options` and `info`), which is updated at each iteration of the main\n",
"minimization loop. The function need not be differentiable, and no\n",
"derivatives are taken.\n",
"\n",
"Method *CG* uses a nonlinear conjugate gradient algorithm by Polak and\n",
"Ribiere, a variant of the Fletcher-Reeves method described in [5]_ pp.\n",
"120-122. Only the first derivatives are used.\n",
"\n",
"Method *BFGS* uses the quasi-Newton method of Broyden, Fletcher,\n",
"Goldfarb, and Shanno (BFGS) [5]_ pp. 136. It uses the first derivatives\n",
"only. BFGS has proven good performance even for non-smooth\n",
"optimizations. This method also returns an approximation of the Hessian\n",
"inverse, stored as `hess_inv` in the OptimizeResult object.\n",
"\n",
"Method *Newton-CG* uses a Newton-CG algorithm [5]_ pp. 168 (also known\n",
"as the truncated Newton method). It uses a CG method to the compute the\n",
"search direction. See also *TNC* method for a box-constrained\n",
"minimization with a similar algorithm.\n",
"\n",
"Method *Anneal* uses simulated annealing, which is a probabilistic\n",
"metaheuristic algorithm for global optimization. It uses no derivative\n",
"information from the function being optimized.\n",
"\n",
"Method *dogleg* uses the dog-leg trust-region algorithm [5]_\n",
"for unconstrained minimization. This algorithm requires the gradient\n",
"and Hessian; furthermore the Hessian is required to be positive definite.\n",
"\n",
"Method *trust-ncg* uses the Newton conjugate gradient trust-region\n",
"algorithm [5]_ for unconstrained minimization. This algorithm requires\n",
"the gradient and either the Hessian or a function that computes the\n",
"product of the Hessian with a given vector.\n",
"\n",
"**Constrained minimization**\n",
"\n",
"Method *L-BFGS-B* uses the L-BFGS-B algorithm [6]_, [7]_ for bound\n",
"constrained minimization.\n",
"\n",
"Method *TNC* uses a truncated Newton algorithm [5]_, [8]_ to minimize a\n",
"function with variables subject to bounds. This algorithm uses\n",
"gradient information; it is also called Newton Conjugate-Gradient. It\n",
"differs from the *Newton-CG* method described above as it wraps a C\n",
"implementation and allows each variable to be given upper and lower\n",
"bounds.\n",
"\n",
"Method *COBYLA* uses the Constrained Optimization BY Linear\n",
"Approximation (COBYLA) method [9]_, [10]_, [11]_. The algorithm is\n",
"based on linear approximations to the objective function and each\n",
"constraint. The method wraps a FORTRAN implementation of the algorithm.\n",
"\n",
"Method *SLSQP* uses Sequential Least SQuares Programming to minimize a\n",
"function of several variables with any combination of bounds, equality\n",
"and inequality constraints. The method wraps the SLSQP Optimization\n",
"subroutine originally implemented by Dieter Kraft [12]_. Note that the\n",
"wrapper handles infinite values in bounds by converting them into large\n",
"floating values.\n",
"\n",
"**Custom minimizers**\n",
"\n",
"It may be useful to pass a custom minimization method, for example\n",
"when using a frontend to this method such as `scipy.optimize.basinhopping`\n",
"or a different library. You can simply pass a callable as the ``method``\n",
"parameter.\n",
"\n",
"The callable is called as ``method(fun, x0, args, **kwargs, **options)``\n",
"where ``kwargs`` corresponds to any other parameters passed to `minimize`\n",
"(such as `callback`, `hess`, etc.), except the `options` dict, which has\n",
"its contents also passed as `method` parameters pair by pair. Also, if\n",
"`jac` has been passed as a bool type, `jac` and `fun` are mangled so that\n",
"`fun` returns just the function values and `jac` is converted to a function\n",
"returning the Jacobian. The method shall return an ``OptimizeResult``\n",
"object.\n",
"\n",
"The provided `method` callable must be able to accept (and possibly ignore)\n",
"arbitrary parameters; the set of parameters accepted by `minimize` may\n",
"expand in future versions and then these parameters will be passed to\n",
"the method. You can find an example in the scipy.optimize tutorial.\n",
"\n",
".. versionadded:: 0.11.0\n",
"\n",
"References\n",
"----------\n",
".. [1] Nelder, J A, and R Mead. 1965. A Simplex Method for Function\n",
" Minimization. The Computer Journal 7: 308-13.\n",
".. [2] Wright M H. 1996. Direct search methods: Once scorned, now\n",
" respectable, in Numerical Analysis 1995: Proceedings of the 1995\n",
" Dundee Biennial Conference in Numerical Analysis (Eds. D F\n",
" Griffiths and G A Watson). Addison Wesley Longman, Harlow, UK.\n",
" 191-208.\n",
".. [3] Powell, M J D. 1964. An efficient method for finding the minimum of\n",
" a function of several variables without calculating derivatives. The\n",
" Computer Journal 7: 155-162.\n",
".. [4] Press W, S A Teukolsky, W T Vetterling and B P Flannery.\n",
" Numerical Recipes (any edition), Cambridge University Press.\n",
".. [5] Nocedal, J, and S J Wright. 2006. Numerical Optimization.\n",
" Springer New York.\n",
".. [6] Byrd, R H and P Lu and J. Nocedal. 1995. A Limited Memory\n",
" Algorithm for Bound Constrained Optimization. SIAM Journal on\n",
" Scientific and Statistical Computing 16 (5): 1190-1208.\n",
".. [7] Zhu, C and R H Byrd and J Nocedal. 1997. L-BFGS-B: Algorithm\n",
" 778: L-BFGS-B, FORTRAN routines for large scale bound constrained\n",
" optimization. ACM Transactions on Mathematical Software 23 (4):\n",
" 550-560.\n",
".. [8] Nash, S G. Newton-Type Minimization Via the Lanczos Method.\n",
" 1984. SIAM Journal of Numerical Analysis 21: 770-778.\n",
".. [9] Powell, M J D. A direct search optimization method that models\n",
" the objective and constraint functions by linear interpolation.\n",
" 1994. Advances in Optimization and Numerical Analysis, eds. S. Gomez\n",
" and J-P Hennart, Kluwer Academic (Dordrecht), 51-67.\n",
".. [10] Powell M J D. Direct search algorithms for optimization\n",
" calculations. 1998. Acta Numerica 7: 287-336.\n",
".. [11] Powell M J D. A view of algorithms for optimization without\n",
" derivatives. 2007.Cambridge University Technical Report DAMTP\n",
" 2007/NA03\n",
".. [12] Kraft, D. A software package for sequential quadratic\n",
" programming. 1988. Tech. Rep. DFVLR-FB 88-28, DLR German Aerospace\n",
" Center -- Institute for Flight Mechanics, Koln, Germany.\n",
"\n",
"Examples\n",
"--------\n",
"Let us consider the problem of minimizing the Rosenbrock function. This\n",
"function (and its respective derivatives) is implemented in `rosen`\n",
"(resp. `rosen_der`, `rosen_hess`) in the `scipy.optimize`.\n",
"\n",
">>> from scipy.optimize import minimize, rosen, rosen_der\n",
"\n",
"A simple application of the *Nelder-Mead* method is:\n",
"\n",
">>> x0 = [1.3, 0.7, 0.8, 1.9, 1.2]\n",
">>> res = minimize(rosen, x0, method='Nelder-Mead')\n",
">>> res.x\n",
"[ 1. 1. 1. 1. 1.]\n",
"\n",
"Now using the *BFGS* algorithm, using the first derivative and a few\n",
"options:\n",
"\n",
">>> res = minimize(rosen, x0, method='BFGS', jac=rosen_der,\n",
"... options={'gtol': 1e-6, 'disp': True})\n",
"Optimization terminated successfully.\n",
" Current function value: 0.000000\n",
" Iterations: 52\n",
" Function evaluations: 64\n",
" Gradient evaluations: 64\n",
">>> res.x\n",
"[ 1. 1. 1. 1. 1.]\n",
">>> print res.message\n",
"Optimization terminated successfully.\n",
">>> res.hess\n",
"[[ 0.00749589 0.01255155 0.02396251 0.04750988 0.09495377]\n",
" [ 0.01255155 0.02510441 0.04794055 0.09502834 0.18996269]\n",
" [ 0.02396251 0.04794055 0.09631614 0.19092151 0.38165151]\n",
" [ 0.04750988 0.09502834 0.19092151 0.38341252 0.7664427 ]\n",
" [ 0.09495377 0.18996269 0.38165151 0.7664427 1.53713523]]\n",
"\n",
"\n",
"Next, consider a minimization problem with several constraints (namely\n",
"Example 16.4 from [5]_). The objective function is:\n",
"\n",
">>> fun = lambda x: (x[0] - 1)**2 + (x[1] - 2.5)**2\n",
"\n",
"There are three constraints defined as:\n",
"\n",
">>> cons = ({'type': 'ineq', 'fun': lambda x: x[0] - 2 * x[1] + 2},\n",
"... {'type': 'ineq', 'fun': lambda x: -x[0] - 2 * x[1] + 6},\n",
"... {'type': 'ineq', 'fun': lambda x: -x[0] + 2 * x[1] + 2})\n",
"\n",
"And variables must be positive, hence the following bounds:\n",
"\n",
">>> bnds = ((0, None), (0, None))\n",
"\n",
"The optimization problem is solved using the SLSQP method as:\n",
"\n",
">>> res = minimize(fun, (2, 0), method='SLSQP', bounds=bnds,\n",
"... constraints=cons)\n",
"\n",
"It should converge to the theoretical solution (1.4 ,1.7).\n"
]
}
],
"source": [
"info(minimize)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"默认没有约束时,使用的是 [BFGS 方法](https://en.wikipedia.org/wiki/Broyden%E2%80%93Fletcher%E2%80%93Goldfarb%E2%80%93Shanno_algorithm)。\n",
"\n",
"利用 `callback` 参数查看迭代的历史:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(37L, 2L)\n",
"[ 1. 1.]\n",
"in 200 function evaluations.\n"
]
}
],
"source": [
"x0 = [-1.5, 4.5]\n",
"xi = [x0]\n",
"result = minimize(rosen, x0, callback=xi.append)\n",
"xi = np.asarray(xi)\n",
"print xi.shape\n",
"print result.x\n",
"print \"in {} function evaluations.\".format(result.nfev)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"绘图显示轨迹:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x, y = meshgrid(np.linspace(-2.3,1.75,25), np.linspace(-0.5,4.5,25))\n",
"z = rosen([x,y])\n",
"fig = figure(figsize=(12,5.5))\n",
"ax = fig.gca(projection=\"3d\"); ax.azim = 70; ax.elev = 75\n",
"ax.set_xlabel(\"X\"); ax.set_ylabel(\"Y\"); ax.set_zlim((0,1000))\n",
"p = ax.plot_surface(x,y,z,rstride=1, cstride=1, cmap=cm.jet)\n",
"intermed = ax.plot(xi[:,0], xi[:,1], rosen(xi.T), \"g-o\")\n",
"rosen_min = ax.plot([1],[1],[0],\"ro\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`BFGS` 需要计算函数的 Jacobian 矩阵:\n",
"\n",
"给定 $\\left[y_1,y_2,y_3\\right] = f(x_0, x_1, x_2)$\n",
"\n",
"$$J=\\left[ \\begin{matrix} \\frac{\\partial y_1}{\\partial x_0} & \\frac{\\partial y_1}{\\partial x_1} & \\frac{\\partial y_1}{\\partial x_2} \\\\\\ \\frac{\\partial y_2}{\\partial x_0} & \\frac{\\partial y_2}{\\partial x_1} & \\frac{\\partial y_2}{\\partial x_2} \\\\\\ \\frac{\\partial y_3}{\\partial x_0} & \\frac{\\partial y_3}{\\partial x_1} & \\frac{\\partial y_3}{\\partial x_2} \\end{matrix} \\right]$$\n",
"\n",
"在我们的例子中\n",
"\n",
"$$J= \\left[ \\begin{matrix}\\frac{\\partial rosen}{\\partial x_0} & \\frac{\\partial rosen}{\\partial x_1} \\end{matrix} \\right] $$\n",
"\n",
"导入 `rosen` 函数的 `Jacobian` 函数 `rosen_der`: "
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy.optimize import rosen_der"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"此时,我们将 `Jacobian` 矩阵作为参数传入:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(38L, 2L)\n",
"in 49 function evaluations and 49 jacobian evaluations.\n"
]
}
],
"source": [
"xi = [x0]\n",
"result = minimize(rosen, x0, jac=rosen_der, callback=xi.append)\n",
"xi = np.asarray(xi)\n",
"print xi.shape\n",
"print \"in {} function evaluations and {} jacobian evaluations.\".format(result.nfev, result.njev)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以看到,函数计算的开销大约减少了一半,迭代路径与上面的基本吻合:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x, y = meshgrid(np.linspace(-2.3,1.75,25), np.linspace(-0.5,4.5,25))\n",
"z = rosen([x,y])\n",
"fig = figure(figsize=(12,5.5))\n",
"ax = fig.gca(projection=\"3d\"); ax.azim = 70; ax.elev = 75\n",
"ax.set_xlabel(\"X\"); ax.set_ylabel(\"Y\"); ax.set_zlim((0,1000))\n",
"p = ax.plot_surface(x,y,z,rstride=1, cstride=1, cmap=cm.jet)\n",
"intermed = ax.plot(xi[:,0], xi[:,1], rosen(xi.T), \"g-o\")\n",
"rosen_min = ax.plot([1],[1],[0],\"ro\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Nelder-Mead Simplex 算法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"改变 `minimize` 使用的算法,使用 [Nelder–Mead 单纯形算法](https://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method):"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(120L, 2L)\n",
"Solved the Nelder-Mead Simplex method with 226 function evaluations.\n"
]
}
],
"source": [
"xi = [x0]\n",
"result = minimize(rosen, x0, method=\"nelder-mead\", callback = xi.append)\n",
"xi = np.asarray(xi)\n",
"print xi.shape\n",
"print \"Solved the Nelder-Mead Simplex method with {} function evaluations.\".format(result.nfev)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAqsAAAFBCAYAAABQLOaIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd0FFUbh5+Z3Ww2lRKagIA06QJSRZoUEaUjiEgRsSEi\niiLqp4INUECaHStiAQsoKqI06RhC7713CMnuZuvM90ecZZNsmU0H7nMOx7gzd+beyWTnN2+VVFVF\nIBAIBAKBQCAojMgFPQGBQCAQCAQCgSAQQqwKBAKBQCAQCAotQqwKBAKBQCAQCAotQqwKBAKBQCAQ\nCAotQqwKBAKBQCAQCAotQqwKBAKBQCAQCAotxhDbRV0rgUAgEAhCcPjwYRo3qMOKQVZqlc64reK7\nMSxbt5XKlSsXzOQEgqsHyd+HwrIqEAgEAkEOUBSFhwbex3PN7VmEKkCtMkZ27tyZ/xMTCK4RhFgV\nCAQCgSAHfPjBe1hPbGdUC4/f7bWK2YRYFQhygBCrAoFAIBBkk4MHD/LKS2P4oqsVQ4Anaq0SLnZu\n/jd/JyYQXEMIsSoQCAQCQTZQFIUhA/oypoWDGqUC71erFOzcsTX/JiYQXGMIsSoQCAQCQTZ4/70Z\nOM/s4unb/Lv/NWqWhF37j6CqImdZIMgOQqwKBAKBQBAmBw4cYOzLL/JFt8Duf42iURAfZeDYsWP5\nMzmB4BpDiFWBQCAQCMJAURQefKAPL91up3oJfWNqlYkQSVYCQTYRYlUgEAgEgjCYMW0q6oU9jGiu\n6B5Ts3gaW7eKuFWBIDtIIWJoRICNQCAQCAT/sW/fPpo3voV1Q9OomqB/XK9vZU6a67F2w6a8m5xA\ncPUjmgIIBAKBQJBdPB4PD/bvwyutHGEJ1W+3wOI9Ck6nJe8mJxBcwwixKhAIBAKBDqa9OwXD5X0M\nb6rf/X/4EjwyHyaNgT37juLxBK8cIBAIsiLEqkAgEAgEIdizZw9vvf4qn3WxIut8cro90OsbmdZN\nJB69F0omRHDw4MG8nahAcA0ixKpAIBAIBEHQ3P9j2zioEob7//XlMqfSYP709PSPetUNIslKIMgG\nQqwKBAKBQBCEdye/Q6TlAMOa6Hf/rzkCk1YqLPxAwWhM/6xuFQvbtm7Jo1kKBNcuQqwKBAKBQBCA\nXbt2MfGt18Jy/1+2Q69v4KmB0LDWlc/rVVPYunlN3kxUILiGEWJVIBAIBAIfVFVFURTsdjuD+vVm\nXBs7NxXXP37ofJnSpWXeeirj53Wrw7bt23N3sgLBdYCxoCcgEAgEAkFBoIlSRVHweDzef4qioKoq\nU6dMIs5+mMca6y85PnsT/LVPZf+fWcdUqwAnTl7AarUSExOTm0sRCK5phFgVCAQCwTWLqqoZRKmi\nKLjdbu/Pvtt9f969ezfvTZ/Cxkftut3/By/C4wvg0zdUShTLut1ohBpVotmxYwdNmjTJ3YUKBNcw\nQqwKBAKB4KrHV2hmtpIqSnpilK8g9RWosiwjyzKSJGEwGFAUhVFPPsab7RxU9CM6/eHyQM85Eu1b\nqPS9K/B+dat62Lp1qxCrAkEYCLEqEAgEgquGYK57TZT6s5QCXlHq+0+SJCQpY4fHSW9PoLjnGI80\n0u/+f3WpzHknJE4JPqZeNSvbtiYCQ8NbuEBwHSPEqkAgEAgKFf5c95njSf0JUlVVkSTJK0QNBkMG\nQZpZlPpjxYoVTHp7ArtGKujYHYCVh2DaaoW13+ItUxWIutVg4dcb9B1YIBAAQqwKBAKBoIDIqete\nE6aaKNU+yy4XLlzgsSeG4vIoFDXrG3MpLb1M1XMPQb3qofevVx227djrFdYCgSA0kqoGdVno94EI\nBAKBQOAHf657t9uNy+XCYDAEtJSCftd9TvF4PHTvdTclbz3Dyk+PMLubmw7VQq0Lenwjc9QNST/o\naxigqlCqjZkt2w5QtmzZXJi5QHBN4fcPW1hWBQKBQJAr+GbY+ysF5StItX1dLlcW1732/3khSgPx\n2huvkqIe5Jm3arJzxTlWH02lQ7Xg9prPk2DFIZUDfspUBcKWBqriYNGiRQwZMiSn0xYIrguEWBUI\nBAKBboK57v1ZSAO57rWfzWZzgbvDf/31V76d9wWTE2/BYJSp3a4YS76zMradJ+CY/RdgxK/w1USV\n4kX1nUdVYcgrMnanwqnTp3Jp9gLBtY8QqwKBQCDIQmbXva849SdEw3XdO53OQhG3uXfvXp4c+Rj/\n+60GRUqaAGjTvwzPTjqCouC3xqrLAz3mSNzVWqVne/3n+nCuxOJ1KiMnFmPTP6tzaQUCwbWPEKsC\ngUBwHROqi1MgS2lOXfeKomAwGPJhhYFJTU2lb/9ePPDWjVRvHO/9vGLtWExGiZ1nVeqUyTrupb9k\nkj3w/ST97v+NO+DZSSpT55eiTHkD307bnBtLEAiuC4RYFQgEgmuczK573y5OoVz3/kpB5TTrXptT\nQVpVVVXl0WEPcXMriY5Db8iyvXjZKNYctWURq8sOwPvrFNZ/79/q6o9Ll+Ge4XDv43G0vDMKt1vl\n1MlTpKSkEB8fH/oAAsF1jhCrAoFAcI2g13WfuY4p5F/Wve9cC1KsTp02hQMnN/LW93X8bq/QNI5l\nOx080uRK3OpFG/T5DsY8ArWr6juPokCf52RKVoxgzJTiABiNEjfXiWfjxo20bds2x2sRCK51hFgV\nCASCqww9paBCue5lWcZoNOZ71r2GoijIek2TOSSzOF+2bBnT35vMpH9vISLS/xxu61mSr34763MM\nGPiDTKUK8L9H9ZWpAhj/qcymvfDn4VIZPq/RABITE2ndunW+XQeB4GpFiFWBQCAohPhz3fvGkwJZ\n3PiBSkHllus+twhR3ztHx/XteuVbSku7JidOnOCxJ4Yy6rtqlLwxcOX/xl1KMtmict4KJWLgk0SJ\nNcdUDv+tf+7L/4W3PlH4fHkZYmIzCtKaDVUSl63C4RheKCoiCASFGSFWBQKBoAAJ1FY0O657l8tF\ndHR0oRc+mpU3O/PMfB0y/+x7PSIiIjIkftntdgY/1J/uz5WhXtviQc9jMskkJESw9qiL6iXg6YUq\n306B+Fh98zx1DnqOhEdfLkq9JpFZttdsYOK7GVuw2WxIkkRkZGSh/70JBAWFEKsCgUCQD+RG1n0w\n173b7S5U1tNgaKIy1D6BLKXa2n1FaahwBlVVGfnMcIpVtdB9VIjWVP9RskYMSw5e5vk/oWt7la5t\n9K3P7YZuT8nUuDWSR14o4nef6nVNHNp/ApvNlkVcCwSCjAixKhAIBLlEuK77/Mi6L4z4Jlf5E6SB\nymP5itJw+ezzT1m7aQlvr6uje3z9TsWZ8VIy5UvJzJmg3/0/ZqrMsfMSizeWCLhPpFmiYtU4jh49\nSpUqVbzrMhqN1+TvXCDICUKsCgQCQZhkx3Wv/ZzfWfeFgczXweVyoaoqVqs1wzXRxFpuC/UNGzbw\n2puvMGFVXaJi9T/24ktEIEvw2weK7jJVvyyDj+YpzE26gYiI4INqNDCwdetW6tevT2pqKrIsExUV\nhdEoHs0CgS/iL0IgEAgCkFPXvfbf/Mi6L+hSUNocArnu4UqMLYDBYMBkMuW5UD979iwPDLqP4bMq\nU656tO5x+xJT+OTp/cTGSqRa9VlVDx6D/mNg9LTi3HSzKeT+NRp42LxlA0OMQ4iJicFqtSJJElFR\nUQXeMEEgKEwIsSoQCK5rArnuXS4Xbrcbo9Hot63o9ea69yWzIPX9/0Cue8B7XdLS0rwCPi9xu90M\nGHwfbQYXpWnXkrrHnT9u55U7N9Pgiaac+PsAKzaeoXn94GPsDrj7CYnbOkVx79A4Xeep1dDEzO83\nAGAymVAUJYNgFSWtBIJ0hFgVCATXBaFc9+C/FJSWuJTZbV/YRGleWFaDlYLyvQ7hxpPmV43V/73y\nAu6Yk/QbV0P3mDSLm/+130yZZhW5Y2I7loxWWbT8PGMe8gQdN+wNmTQMvDsvQfe5ipWQ2b5tLx6P\nB4PBgNlsxuPxeJOuREkrgSAdIVYFAsE1RU5c95kz751OJzExMde0YNDrutebda/3fHl9Tef9MI/5\nv33H5MRbMBj0ncvjURnfawcuQxQP/NoXgHqDbuHr6WvxeCCQZ/6LBfDjEpVfd5fSLcJtVoWnel3A\n5fKwe/duateuDUB0dDQWi0WUtBIIfBBiVSAQXHVkFliBEpxy4rr3LbB/NRBKAAaqTerPdZ+XMbaa\nFTsvr+uOHTt4dvRTjPurFnHFI3SP+2zUAfZvtfHIvie9orNk7ZKYzDJb9yo0qJl1zLa9MPxNGD8n\ngVJl9T1SVVXl2X4XccpmGve+icTERK9YlSSJ2NhYUlJSSEtLQ5Ikb2yvQHC9IsSqQCAotGTHdR8o\n6z47rvu86rSUl+jp4pQbpaByMr+8DAFITk6m3wO9GTKlEpXr64sdBVj00UkWf36SwUmPYIrNmBwV\ne2MxViZdyCJWUyzpcap3D4ihQ48Y3ed6b1wqSeucjNvXkzWfH2DDxnUMGjTIu12SJOLi4khJSclQ\nX1cIVsH1ihCrAoGgwMkt131uWgQLszDw57p3u90AOJ3OXHfd5ya5HQLgex2cTif3dLuTup0iaDug\ntO5jbF5ykU+e2UuP+X0pViVrZ6vSLSuxaE0yI/pfiVtVVRjwokx0gpFxH+mPU138k43PJl3m2dV3\nEV3ERKXGCfzx9fos+8myTGxsrChpJRAgxKpAIMgn8sN1n1fzLiiR53sN/HVxymw9NhqNhb4LUnaS\nqwLF1fpa0QGGjRzBvgN76fpqbd3HPrbbyps9ttHyzTuo3KGK333qDqrHT+02oqqgXdppX0us3ASL\nDukXxbu3OBkz8Dz3fdCcG29JF8U3NijOvl3LcTgcREZmbMtqNBozlLQym81CsAquS8RdLxAIcpVA\nrnuXy4WiKBgMBl2ue18xVhDiK79d4zl13Xs8nkJXocAfwcR/qBargdrOAjz17ChWnthPRNOGrP/l\nJM26hS5Vdfm8k5fabaJ679o0Gdks4H7lmpYHSWLPIZUalWHtZnhphsqHi0oSX1Sf8L54zsPQO8/S\n7MHqNB9wRRRHRhspWy2BrVu30rhx4yzjtJJWFosFh8NBsWLFREkrwXWHEKsCgSBbhOu69+1epKfX\n/bVGZiGW+efC7LrPTTSxqt0ruRFX+9LYV/glaTUVlrxLyvIk1g8di6reHHSMy6Ew9q6txFYqyd2f\ndQ0577iyRfhnYzIJRaHrCBjwdDyNW0XpWrPTqfLY3edJqJZAvxlNsmyv0KgoGzdu9CtWAcxmM3a7\nHbfbjcPhECWtBNcdQqwKBIKABIqNzI7rXhOqMTH6E1EKGkmSwg4DCGUd9L0uuSlKC1syWOb7wffF\nBrKWxMpu7dqJkycx+89fqbhiOoYisRTpcjsnHQpHd1qpWDs24NymDt7NxfMqD+8b5HefzCQ0q8Af\nq1OZ85tKhRomRr5ZTNc4VVUZ91gyp8/IjDvQwe8+5ZvEsW7lGh7jsYDHUFUVg8HgDQkQJa0E1xNC\nrAoEgixdnHytpFq9zVCue0mSQpaCcjqdBbG8PKEwZt0XhHgJt06rx+PJtXaiH3z0ETO+/pxKK2dg\nTCjiPZ+pUnkSf78QUKx+/8ZRNv51kSE7hyEb9bnUa91fh7l3baVECQOLj+rvhvXNe1YW/2zj5e3d\nMAY4V6XGJfhu6r8Bj6FdSy3hSpS0ElxvCLEqEFxHZDfrHsix617bryATlrJDoNqk/lz3hbGzVW4R\nKMHJX53WQOJcs/7mRszl7Dlf88b0yVT8ZwYRN5TIsC26SyvW/PgLvZ6rmGXcyrln+GHiIfr98yCx\npfyLWX/YzliJMMGbXxXHbNY3/3VL05g85iKP/9qeYuWiA+5Xtk5Rjh85QWpqKnFxWcttuVwu7zUV\nJa0E1yNCrAoE1xiBXPeZM6jzO+teE7ZaklVhIli2ud1uvyriSXPrJSCYxdj3ftBeWMK5P7Q55nSe\nP8//medfe5WKy6YRWemGLNtLPtmLXZNmY0t1Ex135TG3Z8Nlpj64i06zunBDw6zjAnFg0X4WPf47\nUcVjOHMieNtVjaMHXAzvcZ67xzWkRtsyQfc1RshUqFuKxMRE2rZtm2W72+0mIiK9uYEoaSW4HhF3\nuEBwlRKu695XlOp13ec2siwXaGxluNZBh8OByWS65sRAuK773Iyrzekx/vzzT4Y9+wwVFk/CfHMF\nv/uYyiQQUyqeLUsu0bx7usv+7FE7r3bawq0jm1G7X13d5zux/gQ/9f6BylMe4fKaXaz4bQO9Hwo+\nxpKi8FCHc9S660Y6jqql6zwVmhRlzdo1tGrVKsPLnBbrHRV1JZnLaDQSGxuLxWIRJa0E1wXi7hYI\nCjmBXPdOp9MrIPxZSiGj6PAVpAVlEdTmmpdkFuc5sQ4WJstpKPwJwUDVB/yJ8/yoypCdGqu+rFq1\nigeHPUr5X94i+pZqwXduUId18w/TvHtJbKlu/tduE2Vvr0SbN+/Qfb7zu87xXcc5lH+2N+UfvYuY\nGuVZ1205qlo84DVSFJWR915Ajo3hoW9u132ucg3iWPz5Hzwx7Ani4+O918nj8XhfKn2JiIggKirK\nm3Cl/S4FgmsRIVYFgkJAdlz3Wla1P9e9JjgKm9iSZdkrpHNKflgH80Nc5wbaHF0uVxaBWhharPrO\nM7vnTUxMpO+gB7jhu1eJbVYn5P4lH+vOhoEv4nFX560e21HMMfSc30f3+VKOXebr1rMp0bcNlcf2\nB6BY67qoqsSBXS6q1jL5HffuCyns3OJh3P47dYtH60UHC8dtw2WRMZlMWCwW4uLikCQpQwhAZsxm\nM4qiYLPZkGVZlLQSXLMIsSoQ5CM5dd1rwkMTpR6Ph+jowIkbhQ0tZjUc/CU2BbIOaklOhVGo55RQ\nXZzgiuXyWour3bFjBz3u60OpT0cTf8etusbEdWrKCRe80X0bh3ak8fCBJ3WLR9sFG1+3+orY5rWp\n8fGTGbZF3liK9UvtfsXqwm+sfPN+Cs9vuAdzrH8xmxmX3cO0O5diLJ2Aw5rMhQsXKFq0KFarlZiY\nGFwuFyZT4GNFRUVhsVhESSvBNY0QqwJBHqAn6z6nrnvN+no1IcsyLpfL77ZQiT2+Qj0/S0Hlt2U1\nVJ1Wf1UZAGw2G2azOV/nGi6KogS0EmpkXvv+/fvp3LMbCVOHU7SLfre6LMtI8XFsX5nM4M2PYYrW\nJx6dVifftpuDdENp6i54Jcv2qFYNWL5wBf2HZ/x8e6KDVx6+wMAvW3JDzSK6zqUoKrPuW0XyRZUe\ne55mdY+v2LBhAz179iQlJYW0tDTcbnfQ2sSSJBEbG0tKSgo2m02UtBJckwixKhBkk+y47gMl82TH\nda8JqauxFJTvdcqPxJ7CSG7WadXuqcKOtrZADQMyxxWfPHmSbn17U+S1IRTr1z6sc52d9B22s6mU\nrJ5AsZv0FfD3uDz8cM/32BwGGiW943efco90YmOLP/B4VAyG9Gt+9pSbh+86R6vhtbi1d9ZyWYH4\n4Zkk9q27QPfdryIbjcQ3L8/q9Wvo1asXcXFxXL58GQhd6kuSJG9JK616hShpJbiWEGJVIAhBMNd9\nMEEayHWfm6WgDAYDHo+n0GUCBxIimih1Op0YDIZ8S+zJLjm1rOoVZddqnVZ/L3QOh0PXy8mZM2e4\nu3cPokb2ImHoPWGd98ybX3Fq4hyY8xMXH+iO9ZyVmJLBO6episov9y/g3IFUGu39JKBAjKtfGWOk\nkd2bndS+NRKHXeWRTucpd0spek1sqHuOS6buZtUXB+iycQyRRdNDeUq1uImVo1cA/zU3MJlwOBze\nOqvB8K3BKkkSUVFRIccIBFcLhesJJxAUIPnhus9tcjNhKTtkxzqouauvpczlUK77vGqx6nv+gkRP\nXLG2VpPJhMFgCLr2ixcv0ql7V+QH7qDE0/qTogBOvfopZ6bOw/Pjn8j16mMqW4YDv+2n3uBbgs7/\nrxGLObziKI12fojRHDxkIKLiDaxdkkqthiZeGnKJyxYjYzfprzKQ9NNR5v9vE+0XDSe+ypVuWCUa\nVWDJ9t3Y7XZv8pTZbMZisRAfHx+yPrHBYPCWtPKteCEQXO2Iu1hwXeFPVHg8HtxuN06nE6PRqNt1\n7/sQLihLmMFgCBgDmluESuwJ13WvCeyrQaxmTggLt05rflpJ8+M8OYkr1v7WQomnixcv0qJ9W6Su\nzSj1yuCw5nb6xY8588F8PAuWINesDUBai47s/n5VULG69q01bJuzjYZJMzCVCB1vGtuhESsWLkKW\nJFb+mcYru7rrvp8PrDnLZwNX0/yj/pS5vWqGbRExkZSsWY6kpCSaN2/ujVeVZZnU1NQMJa0CERER\nQXR0tChpJbimEGJVcE0SruveN+Y0L7s45Taa8MuNuNXsJPZkR6hfDeWgMt87aWlpWVz32e3iVNjJ\n7ZcTDT0vKAcOHODunn04fe4M1e5tHVZnrJOjZnLu8z/w/LoMuXqNKxsfH8HhdrNx290YzVkfeZs/\n2cSaCau5ZfkEom8K3mlKo9yjd/Hvuz+xI8nOiL86El8qKvQg4MzeFKbftZQ6YzpRtX9jv/sUa1aB\ndevX0bhxY+911qysviWtghEZGYnH48FqtSLLMpGRkUKwCq5qhFgVXNVkdt37Cgxfy2jmBzBk7XXv\ncrm8X+xXC9pDKxyxmpuJPdmdc0GGLmjoqdOqrbuwJ3tl52Ulv15O9M5x/fr19Oo3AEv3V1DXfk/y\n7MW66qmqqsqJ4e9y/rsleH5fiVy5SobtcpVqRBSL4/CSQ1S9O2Mjgb0L9vDXyD+p/dPLxN8aosmA\nD66zyRgjZe54pjZVmpcMPQBIOZvGpDaLubFnQxr8r1PA/RJaVGTF9yt5/LHHM1ihfUtUxcTEhPw9\nREVFoSiKKGkluCYQYlVwVeArqMJJcgr3oZvXLvXcRltfZqtVZiGS+eeCTOyRZdnb0CA/CHQd/Lnu\nM98fbrcbl8t1Vcf9FfTLie88Ah33hx9+5IlRo0l79Cuo3wlKVOL8h30pN/0ppCBxmqqicPzRd7jw\n8yo8f65BvtF/Jr69blP2/LA7g1g9+s8RFvT/mWofDCfhTv2JUZfX72FTx1eQ4oujuPR5CBxWF++2\nW0LszeVp+fmAoPuWan4Tfz+zEKfTmaHFqm+JKrvdnmGbPyRJIiYmhtTUVFHSSnDVc/V+AwuuOXKS\ndZ8brnuDwYDdbr+qSkFpc3W5XAWS2JMd8sqymhei7GoIWQC811MrCVaYXk5855g5QUhVVd6eNIUp\nH31G2pi/oOJ/caX170KSjaSu2BywCYCqKBwd/BaX/tiA5691yGXLBTy3+tDj7Hm0L50/vQdJlji7\n9Qxz7/6OCq/054aB7XSvISVxH5s6/A/T048hFS/C5o+n0mN8g6BjPG6FD7r/g91jouuSJ4PuCxBb\nsTgeSeHQoUPcckvGOFvfElV6vEC+AjctLU2UtBJctQixKsh3cst1n9tZ91dDKahAQkwTJAXdTlMP\nsixnWwDmVTzl1UKo0AXfa1DY1p/5JdDlcvH4iKdZuG4baWPXQvGMYtNdsRnJXy7yK1ZVj4cjD7xO\n8tLNeJb+i1yqdNBzy63boSJzauMpoktEMaftbEo/1IlKo3vrnn9K0n6S7ngJ0/ChRI8dhWKxcG7M\na6SetxNXwn8zBlVVmfPoBo7vtNBj31hdcaOSJFGmWWUSExOpX79+1rXIMrGxsaSmpnp/z8HwLWkl\ny7IoaSW4KpFCPDQKv0lBUGjRUwoqlOs+8895/dB1Op3ecjH5TTg1OX2vi6qq2Gw2XXFshQFVVUPG\n3emNp8zr+0NRFNLS0oJ2EMoL9FYd0P5pncwKc7y11WrFbDZjMBhITk6m9/0D2WaPJm3492COzTpg\n71rkiXdwy8U/kE1XxJXqdnO471hS1uzEvWQDckIJXec33NOG2rd4OLDoADEtbqH298/rnnvqloMk\ntRqD8dFBxEx4yfu5o0pD7nurOk363eR33O9vbOfPKbvouvUlYsvra0yguDz8cccMKqil+GfJ0oD7\nOZ1OrFarrpJWkP5yYLFYiI2NxWw2F7oXcoHgP/x+iYu7VZAjMrvutYx6zS1tMBjy1HWf2xiNRtLS\n0vI0FEBPYk841jFt29USvuA7X8DvdcjveMqCIlQpKL1VBzSvRGHF1/J95MgROve8lzNV2+EcNg3k\nAEKrenPk6FhS/lzvbbOqutwc6vkSqUkHcC9LRC5WXPccXN3uZfPLz5PQpm5YQtWy7TBJrV/AOKR/\nBqEK4GzSlK2/7PArVtfPPsgfE7fTacXT+oWqR2FFvy+4tOccphLBBajJZEJRFFHSSnBdIMSqQBfh\nuu61z7UM+7xy3ec22pe3v/i6cNFrHcsNIaYlLRXGh4+/ZC/NGgxZxXlBxFMGIjdiVnP75STQOQrD\n9fIl83cGwJo1a7hv4BAsnUfjuWtkyGO4q7Tl0hd/ULTL7SgOJ4e6vYhlx1Hcy5OQ4+P1z+X4Mfhw\nJpLJSLWPntA9zrLzKBtbjcH4wL3ETH41y/bIRx5ge+8BWa7/7qWnmP34elrNGUKJhhX0zVFVWfPw\nt5xcfYiq279hf9U+XLhwgYSEhIBjREkrwfWCEKuCDOTUda/912g0ejNWcyr68huj0YjH49E1b3+x\ntdm1juUEzYJdkIRy3furzKCJ08KOHjEYKIRDT9WBqxW9Qhxg0aJFPPHMaNKGzoJG3fSdoNerXHq5\nITdeuMzhPq9i3X8mXajG+gkbCDTHXTtQe3VGqt4Cg7kI539cS8wL94YcZ919jKTbR2Ps24OY6W/4\n3cfUtgVWVeLEtmTK10u3nh7fdon3uq2gwRtdqditnr45qiobnv6Jw79up8qWOUSUKk7R5vVYtWoV\n3boFv1Y5KWkF6YL3ar4HBdcHQqxeh/hz3fuKUiBXXPfhiL7ChMFgwOl0YjJdabmYH9axnCDLMk6n\nM1/OlRsWY81aWdgfkv7mV1hKQeUnemOItZcQ3/tfVVWmTp/B+GnvYX/uD6jSSP+Jb6yNoUhxdtYb\nhBoZi3v5RuToaP3zXrsKdcC90GoA6qPv4f7xbU7Pfo+KIcSqbe8JNrYYjaFnF2LeHx90X6lSJbYv\nOkn5esWoleP4AAAgAElEQVS4dNzKlDv+psrg5tQZqb/96uaxv7P3yw1UTvwCU9n0uq2GVvX4c+kS\nunTpEtT6mZOSVlqFAFHSSlDYue7s/0OGDKF06dLUrVvX+9nFixfp0KED1atXp2PHjiQnJ3u3jR8/\nnmrVqlGjRg0WL17s/Xzjxo3UrVuXatWq8dRTT+XrGvSiueNdLhcOhwObzUZqaiqXL1/m8uXLpKam\net/I09LSsNvtOBwO7HY7brfbaxmMiIjAbDYTExNDTEwMUVFRREZGEhEREbTHd0REBC6Xq1DH0mXG\nN45SuxY2m817jbT1GAwGIiMjiY6OJiYmhujoaMxmMyaTKcPDOr/wjQ3ODXzDObT7Jy0tDavVitVq\nxeFweF27RqORyMjIsO4PWZYL3BIcDE2YaYlLgdYvSRIRERFERUWF/feR2/PNjfME+537u/8zrznz\n/e92u3nymWeZOOsb7K+uDU+oApw9jNvqwO1Q0mNUwxCqLJyP2r8n9PwfPPpe+md3D8d26DRpR84G\nHGbbf5LE255DvqcTMR+/E/o8nTuy+afj2C47mdz2b4o3qULzGX10T3P7pCVsm7qcSv98iLlKee/n\n0a0bsHLDWiwWS8i/a62klcPhwOFwhDynJnBdLhdpaWk4HI6r6ntacP1x3VUDWLlyJbGxsQwcOJBt\n27YBMHr0aEqUKMHo0aOZOHEily5dYsKECezcuZP777+ff//9lxMnTtC+fXv27duHJEk0adKEmTNn\n0qRJEzp37syIESPo1ClwV5K8JLdc97kdT6qqKmlpaURGRhY662qoxBYtZvVqaqdptVqJiooKKwYt\nHItxbt4fWhJeKCtQXqMndEFRFK/wLKyue7vd7rXkhiKcqhO+3w/hrvnSpUvc1b03h9Ui2Eb8ANFF\nwlvU1r/g3d5QphmcXIGUuAupZCl9Yz//GOX1l+Gxj6H1/Rk2RYysSaXhLajwTI8sw9IOniax2Sik\njncQ+9UMXadSTp4mtUoTKjQsQao9gns2Pq/7b3DPx2tYN+pHblo8g5jmdTNsUxxOdifcxZ7tO4iL\ni9Pl4ne73aSmphIbG6vrXvB4PKSkpCBJEsWLFxclrQSFAVENAKBly5YcPnw4w2e//PILK1asAGDQ\noEG0adOGCRMmsGDBAvr160dERASVKlWiatWqrF+/nooVK5KamkqTJk0AGDhwIPPnz89TsarHdZ9Z\nlOY06/706dPYbDYqV66crTlrcZoul6tAxGqwWNLMD+XMrnuXy4XH47mqvry1GrH+HpSZE5yCxVNq\ncaR5Kcry27Kak9AFq9Xq/ayw4s+yWpChK0uXLmXwQ8NITrkEb64PT6iqKtKCCag/vwHNX4dGzyB/\nXQP157nwyPAQQ1Wk8WNRP/sYXlwIddtk2cfVrB9nvvoyi1hNO3yGxObPIt/RihidQhVAKpmAISqC\n8ycc9Nj/ou775OB3G1n3zI9U/PntLEIVQI40UaxxbbZs2ULz5s1JS0sjOoRl2Wg0EhMTg8Vi0VXS\nymAwYDAYcLvdOBwO73e2QFDYEHclcObMGUqXTi8qXbp0ac6cOQPAyZMnadasmXe/8uXLc+LECSIi\nIihf/oq7ply5cpw4cSJX5pL54eLxeHC73TidTu8XTyCLaW5ZRDQ2btzIg0MGM3nyZB7oPyBbxzEa\njdhstjwvBaUnscVfPF0gDAaD1zVW2KxogfCtCFDY4ym1WMbcvr65VQrK31wLK74hG1oVjmAvInn5\nO7fZbDz/4ivM/fEP0mp+ibR/LNKSj1AenKnvAGmpyDPvR929FnothbJNAVCqD0H6clZQsaq63chP\nP47y15+o49dChdr+d+z6NJaf38Rx8gKRZdMz7e1Hz7Kx+bPIt99GzDcf6F6vardj7f4QDjtU6lEL\no0nfI/Xor9tYOXQO5b8cS1yHJgH3M7Ssx4pVq+jYsSMpKSne8ItghFPSSrtvREkrQWFHiNVMFJSL\n78MPP6R9+/aUKFECp9PJxYsXKVGiRJbYwcxZ1XmZVdy5c2dq1avBE8OGs2zlMqZPnkFsGFm4gPch\n6Xa7c2ylzM/EFu1YWjhAYSKUxUxRlAJN9tJDTmrDFvZkt7wi2P2voVnKCuJFZOPGjTww6FEuGG7F\n3mwLmIqhyibU5Z2h/ztgChHycXIP0vhOIMWgPrgfzEWvbGs4EjXxNdi1HalmnSxDVZsNafB9KLt2\no07dAcXKBD5PdByG0hU4+9Nabhx+D/bj50ls/hw0bULMvI91r1dNtWDp1B/PyWR4aTZHpg+hhY77\n+eTSPSy773NumPksRXu1DbpvVOtb+Pvl2YyXM3ahCvVdqrekleb1MpvNqKrqFaxms1kIVkGhQtyN\npFtTT58+DcCpU6coVSo9LqpcuXIcO3bMu9/x48cpX7485cqV4/jx4xk+L1cucF/qQKSmppKYmMjs\n2bP5+++/6d+/P02aNKFChQqMHDnSaxkxGo0YjUYMBkO+JvNIksSk8e8SUySKw66t3N72Nnbs2BH2\ncbREKz34JrY4nU7sdnuBJbZoIrug8Hct/CV7adm8WvxnVFRUgSZ76SWUxVJ7SQu1foPBgMlkyrNk\nt/y0rAb7nQe7/2U5vWZmfid2QbrgGff6W9zVpS8nSr6Ovc43YPqvCH5CK2RzcVg7N/hB/p0PLzZC\nLdkSZeD2jEIVwGhCSrgF+duvswxVL16ALu3g0AnUmfuCC1Vtzo3v5czsZThOXmBj82eRGtQn9qdP\n9S4Z5eIlUlr2wHPBgefLndC2Fx6nh4tbg3vYzq47xF/dPqb0W8NIeLBLyPPENK/Lnq07sNlsGAwG\nYmNjsVgs3uTGYERFRSFJElarNeD963K5vMJX6y5ms9lEwpWg0CHEKtC1a1e+/PJLAL788ku6d+/u\n/fy7777D6XRy6NAh9u3bR5MmTShTpgzx8fGsX78eVVWZPXu2d0wojh8/TocOHbjxxhspXbo0Q4cO\n5ffff6dOnTpERkYybdo0jh49yrx58zKIL62Yc35nUDdq1Ii7OnemRNVYbn+xIp26dOTzLz4P64vM\nYDB4H8IaeoSYZiH0fSjnZ9a9Vnorr8mtDGxNoBTmLHtftLkGW7/dbg+5/oiIiEItyv2RnReRYPd/\nQYWr7N27l9taduCDb5OwN98EZbNmwSulBiH9Nsn/ARQP8rdjYOYAaD0VOn8V8FxqoxfwfP81qs8L\npHrsKHS4HUmNQ5m+E8w6qwV0f5bULQdJbDoKtXYdYn75Ut84QDl1hpRm96BQBM9nW8BkAllGLXcz\nx37ZHnDchS3HWdTxPUo8N5CST/XVdS452kx8nSosXZredlXrQpWamhry71zL+Pd4PNjt9izbVVXN\nUKJPK2mlJcY6nU4hWAWFhuuuGkC/fv1YsWIF58+fp3Tp0rz22mt069aNPn36cPToUSpVqsTcuXMp\nWjT9zf6tt97is88+w2g0Mm3aNO68804g3eU1ePBg0tLS6Ny5M9OnT9d1/rS0NJYvX07NmjWpUKFC\nBlfLd999R1JSEi+//LLfsdrbbn73rT958iRNbmvEM4mdcTs8fHXvahrWaMLMqe8TH6KLjPZQ1r74\nfAVK5njSwpZ1r7nFoqOjc+wSy+y6zvxzbsUbh5MVnp/4c937tgjNq6oDuUFOrqne0JWc3v/ZqQSR\nExRF4cOPPmbc6xNxVHkN5cbHIdC8FScsSYBX/4GbGlz53HIR+d1eqEd3ofb8G0pmde9nRv60FOp7\nHyPd0QF15/b0Yv81W6M+/1N4Czi2C3nMrRhurkr8hj90D/McPkZKyx5QoR7KO3+A7/WePZHiq2bQ\nY9sLWcYl7znDr80nU2RQV8q9q7/UoXXddg50GEH/Xn345KOPvJ/bbDbcbreurlWKopCSkuJ9udNw\nu91YrVaKFCnid3+tNN/V0rhDcM3g92a77sRqYcbj8dCiRQvmzZvnFcu+5KZ4CpcJE8ezePePDP6h\nJc40Nz+PSOTo8hS+/vwb6tWrF1KISZKEx+PxtvcrTKI0GOEKFT2lkPJSlDmdThRFyfcXGo1w1q9Z\nhiIjIwv1vRDqHshcEi5YKSjf9efmmi0Wi67SRjlFVVWOHz/O4IeeYMchG7ZaX0NstZDjpPXtkWpX\nRHn0P1f7kS0wvhNyzI0ovZaDSadF9Jd7MVR1ogx9HHXgvdBmCDw8LbxFbPwD3u4DsTdiqmgibsNv\nuoa5d+0jtXVP1Fvaob4+L+sO1lTkLsW57+jrRJWK836cevgCvzR+h5gubbjxs5d0T9OyegsHOz2N\n0qoTNc+fYtM/y73bVFXFYrF4raHZKWmltTv2V2FAK2kVHR1NVFRUoXv5FVzTCLF6NfD5559z8OBB\nRo8e7Xe7VvA5VEZobpOWlkb9RvXo+/WtVG11AwCJ3xzk5xGJPP/sGAYPejCkdcxms3ndl1cLLpcL\nt9udpR6o3lJI+W0x9ng8OByOkCVuckpuWAwLS63VUGglfSIiIgqkJq0eclusBhLfP/74I6NfeBVH\n+RG4b3oBZJ1/y5c3wboW8OFp2LgAZj0OtR6EdvpLRAFwaR/MrgMGI9z3GnQfFc6ikOZPQv12HLSb\nDLX7wYxSFN27CkO5G4IOdSdtI6V9X9TWfeH5wElYkf0q0GRca6oPTq8iYzt1mQWN3iayeQMq/hC8\nE5YvlhVJHLz7WZQnx8DQEUTUv5ETBw9m8GSpqkpKSoo3NCAULpcrQ0mr5ORkYmNjA34fa/vHxsZi\nNpuvqu9twVWNEKtXAy6XixYtWrBgwQK/mfeKomCz2fLUihLogfzzzz/z9sev80xiJ2RDumX3zN7L\nzO6zirqVb+X96R9mcSn5UtBWv3DRrkNaWhomkymg695fU4WCnLPeHuF6jpWXFsP8Etbhkvn3rCUH\nBhLieV2TVs98s/s7D1V/VzveiRMnePb5V1iftB9b7TlQ9Naw5yn/UxmleDE4tQ86fAY39w7vAK40\n5OUjUHbNgQ4PwSNhCF2XA3nGENTERah9FkL55gAYPq2FeWRvzKMeDTx05XpS7xmI2n04PD4h+HnG\nD6WCsoEOvz2K/YKFX5tMQqpamZv+1G/9TV2ayKGuz6E8/Qo8/gwA8ffdxecjh3P33Xdn2DeQiz8Q\ndrsdu93urcVatGjRoPeM1vkwLi4uX8NMBNc1fm9Icef5Yfz48dSuXZu6dety//3343A4stWSNTtE\nRETw0EMP8dlnn/ndrpWr0ptdHwjfBI9g7TS1agRms5n777+fBHNp1n+x33uc0tWL8NS6O0ktc5Tb\nWjUjKSkp6Nq0Nq6FiVDJLoDfDGwt2aUgMrADoYmpcJKsgq1fywwOtn6TyZSt9WvzLKj7IVRil2/L\nYVmWA1adKOgXFI1gc9CTxKZVvtCqK5hMJjweD++99yHNmrdk+apEbM02ZUuocnEtii0Fju+GB7aE\nL1TPbUP6ojYcXA43PIK0dYn+sclnkEY3h+1rUR/Z5RWqAJ4aA3F8+m3Aoc5Fy0i9ewDqgFdCC1WA\nviM5sWw39vMWfm89HcqUoeIf7+qeasri9Rzq8hzK6De8QhUgtUVbFi1dlmV/WZaJjY3FZrPpeiZo\nf69ao4tQ921kZCRms9l7n1wtyZuCaw9hWc3E4cOHueOOO9i1axeRkZH07duXzp07s2PHDt0tWffu\n3ZujN1C73U7Lli1ZuHChX6uTZu2Ljo4O+WUTTk1KPa7LjRs30uv+7rywuytR8aYM25LmHuKn4f8y\n5tmXePyxx/0eoyATgEJZkQJdBy0zO79DL7KL3W73ZpH7kt3156UQy+tYS3/3v28TCT33v5YcWFh/\n/76WVX+/Y62ihe/vM/M/33VrLxFz585lzJjXSHM0wOYcC0praPYXFGuqf3Kuy8i7R6Ec+w5iBiM5\nvkHt9gNUuEPv4pA2zUD95wW4oR/U+hhww4oSMP4fqFw/+PiDm2DsnUgJdVD7Lc4atuC2I00tTpFN\nf2KolrFTn3Per1iGPIM6fCp0e0T3kiO7F8NgArlEApWTvtL9LEj5fQ2H730J5aUJMPixjBs3J3Lj\ns4+wb5N/Y0BmF38wVFXl0qVLGI1GXQla2v2lKIo3JKAwvJwJrlmEZVUP8fHxREREeLMtbTYbZcuW\n5ZdffmHQoEFAekvW+fPnA/htybphw4YczcFsNvPAAw/w1Vf+y7hoD1XfN+nMlpNgNSm18j+xsbFh\nl4K69dZbad+2A3+/lbVES8M+N/HU2k58PHc69z3Qh0uXLmXZJzeswqEIZkVyOBxei1mwUki+FrOC\nrrcaLrIs67IY6l1/Xs81N6w1oazjWghKdkqh5WedVT34WyvgtYQ7nU5vmTttvSaTyVuH1WQyYTab\nvV4BX+u40Whk+fLlNGzYipFPf8KF1DnYPAvA0ADUDsj7xumdJJz8AZbcBGc3QLltUGomquku5H91\nWCgBbOeQf+wIa16DBvOhzqz07HvZhBR7K/KiEJ2mVs+DMS2hxgOo/Zf6j681mpFK3Izzm/kZPnbM\n+gbLkFGoY74IS6hy+QIOu4pHMlI58QvdQvXyryvTherYKVmFKkDdBpw9dcpbDzwz2j2tp6SVdi+r\nquq3pFVmtCQuwHt/Faa/B8H1gRCrmShevDijRo2iQoUKlC1blqJFi9KhQ4egLVl9W69qLVlzysMP\nP8zcuXO9CVUamhCTZRmn0+lXiAEhhUhORMjrr77Juln7OX8wJcu2klXieXJ1RxwVT3Fbq2YkJiZm\n2K7VXM1p/dLsFk/XslvDuRbaA6cwucCCrV8TK/nVPCEnhCsE/b2IhHopy+/6vLlFqLU6nc4ML1Fa\nPWbNha+JU7PZnKEmr8lk8r6M+N7bmzdvpn37bvTpO4IDR1/E6l4HhpZXJmT8AOX8crDsCT5x21Hk\nDR2Rtj4MRd5AKbsVTDelb0uYinJsFSQfDH6MI3/DZzUg1Yra8jCU6JDx2lR9C2X5HHDYso5VFORv\nXoHpQ+Cuj6HjlKCnUuo+juPz7733oWPyR1hHjUN94ydol7VubECO70ca3ACiSuG2OZF0CtXkn5dz\n5L5XUN6cAf2H+N/JYCCieUuWLcsaCqCh3d8WiyXo35RWWzUuLg6Hw5HlGeMPrWar2+3O8HcmEOQX\nQqxm4sCBA0ydOpXDhw9z8uRJLBYLX3+dsWtKKNdoTh+CiqJw5swZ6tSpw+jRoxk2bBgdOnRg2LBh\nXiGmJXtIkpQjIZYdbrjhBoYPe5JfRm3y+4UVEWmg54zG3DWlFj37dmP6zGne/bQYWL2Wytwunp4d\nCtK6Gk7zBG39WuiIb8OAwirOAllWQ1nHtZcdo9GYZy9lGnltWdUTT6q9eGi/Z19Bqv2OtVAF7TNf\nC7l2HkVRMpzHYrGwZ88eHhjwMO3adWN90t2kKbvB2Cdr3VS5FJLcDMOBN/0vRHEjHZwEy2uiWlXU\nG49C0WEZ9zGWRIqsj7xpqv9jeJzIy5+B+d2hwvMoTdaA0U+L52LN0ztjrf4h4+d2K/L47qi/fwgD\nV0Pd+0P/AhoMRbl0Gc+Wndhffhvr61NRJ/0FTe8MPVZj2xp4qBHqjS3hpb3gAVvirpDDkucu4egD\n41Amfgh9BgTd13L7HfzmJ27VF71dq0wmU9jxrrKc3vJVS9K6mrxNgqsfUYsiE4mJidx2220kJCQA\n0LNnT9auXUuZMmU4ffo0ZcqUCdmSNdzWq1arlUmTJrF792527drF3r17SUhIoFq1aqSkpNCnTx/u\nvfdeatWqlSG+TxMwBZGJPGL4U0y9+V1m9VjK/Z/dTkzxrPF89XtWonyDBD7v8wErVi7nkw8+pXjx\n4kRERHgz7LV56y2FVFB9z/M6fCG316+JwFDxawWJ9jD1eDxeN32geGrfNRdG0R2KULHj2u9Y+9lo\nNAaMJwWyuJcjIiK8Qj4yMtJ7bC0cQPuvdgyDwYDFYmHKlBl8/PFneKSHcbEP5Kz1nTOsQ/4Qz/H6\ncPMEMJe9siF5I9LmAUjOS6ilfkKNCSz01KLvoG69E1q8CaYr9Ui5tA9pQXewW6DpvxBXM+hclOL3\nIS+cjnLHwPQPzh1DGtsRnKA+tg/MgSuTZECWIaEuqd0fhFQb6vtroHLoBgVelsyFt4ZA29HQ6ZX0\nNZasQ8q8ZcQ0qR1w2KVvF3Ns6HiUybOgq46Es9vvYMn7k4J2K9MsoCkpKdjtdr8l91wul7fSjNFo\n9LZw1RPvajAYiIuLIzU11XtPipJWgvxAWFYzUaNGDdatW0daWhqqqvL3339Tq1YtunTpElZL1nAw\nmUw4HA46d+7MrFmzOHPmDMeOHWPp0qV06dKFIkWK0LZtW0qXLp3hS0r7YsmPlqCZiYqKYuo709n+\nx1FeqzaPXYuP+92vxE1xPLm6I8rN52nesilr1671PqDtdnvACgQRERGYzeZC47o2GAwZOi5lh+xU\nYMju+rX5FgY0y6E/67BmNdRc9yaTiejo6ELlug/HsqondtZf1r1mDdXc9oHiSX1d96qqes+j1YJ1\nOBykpKRkiC00Go1ERUURHx/vFSTvvfcBdes15eNPz2JXN+NiIkjBhSoAcnVkY03kg/+1T3VbkHcM\nhzWtUKXbUMqdgCBCFYCoFsim0rDjS+2iwfbP4KsGqKbaKC0OhRSqAFQdi3J8V3qFgd1rYeQtEFMd\n5eEd+oUqgO0Cqt2GcuY8yidJ+oWqqiLNngDjH4K+n3qFKoDS7HEufvNnwPvm0ld/cOzhCShTv9An\nVAGqVMPmdrNly5agu0mSFNDF73Q6s1QBCCfeFdIFbkxMjPc7qzCFRwmuXUQ1AD+8/fbbfPnll8iy\nTMOGDZk1axapqalht2TNDZKTk+nYsSOLFy/2+9brcrm8hdXz+0GuqirtOnfkqHyR5KTDNH2gGj2m\nNMYU7f9Ne+svR5gzaDVtWndk+pQpREdHeztaXQ0Ws7S0NK9oCEZuV2DIDpoIzM+attlpFKAoSqGs\nteqLv3qwodaq/S4zV1Xwl4EfLAnH917SrKPaz1r4i+bq1+LB09LSiI2NzfJ9cfbsWT76aBYzZnyA\n1ZoMketAbpyNC7IaPB2h3iewYySyIQGl5Hww3az/GMkzkBxvow7airz4IdQjy1BrfQpleoY1Fenf\n21ATFDi8DZqOhtavhreW42vh+27I0ZVRHftR3/geGrULPc7tRn7nUdTlP6M+8idUzHQdFQX55Tiq\nrf2YqDpVMmy6+OmvHH/qXZSZs6HjPfrnuvg3ePwBnn78Md54442QVlB/XassFov3RTgz4bRwBbwv\nX1qFAFGDVZBLiKYAVysvvvgiN998Mz17Zv0iV1UVm82G2WzOd5evqqps2bKFu3t3peWi4azp8xGy\nK42hP7ajwq0l/I7ZuuAIX/RfTkyRkkx4dSx9+vQp1K5qXzKXMApUEilQKaj8tAx6PB5v8e/cJLMQ\nD9QoQa8Q15pc+GuAUdBoa9XEakREhF9RGkiIAmGL0sxu+8wvOL7CNNB1dblcXsEqyzJbtmxh8uT3\nWLhwIZLUGbv9QWR5IIpxHBjCyHTXUP4Fd3tAgaKvQrFns3EMBU4kgKogR1dGuXUJmIqHdwznBdjc\nE1LWQ9c5UKuX/rGqirR+EurysXDT01D7DVjfHblmJMpr3wcfa01FHtMVDu9DeWodFC3vdzfD1EaU\nHFifMmOHej+78NF8ToyajvLhd3CHfqOG9O0XqC8/A4170tx4lp+/+Yr4+PiQAtHpdGK1Wr37Jicn\nU6RIEb/jVDW8Fq7as8fj8YiSVoLcRIjVq5Vz587RrVs3/vjjD79fMoFaguYG2v0RyIokyzJPjx7F\ntmLnaDC1NxuGf8Ohz1fRYXQ9Or50CwajnOV4797+O8fSimN2KdQsUYr3J02hevXquT733MLXsuV0\nOjEYDBnWH6hGaUHPOSedrIJZh30FWU6tw7nZcSu76Ikn1cIUMgvRzNcCssaTZj5XsHhS3yx93/Jh\n4V4bq9XKb7/9xtSpn7B37yGczgF4PP0BTRB+C9LbEHkMJJ3Wd2U9smcMiicR1HogbYWbToEc5ouG\n6wDyhadQLIshqhy0ORTeeIBTP8D2ocimaqCeROk4AeoFT1DyknYJef79qCf+RW00H0rcnv55yg5Y\n2QgWnoWYOP9jzx5HGtEOSY1EeWo9mIJ85/4zE/OWidTYNw+ACzN/4MSY91E+/RFa6q8zK8+YiDJz\nEoycC9WbETmsIof27cFgMBAfHx/y3tASoqKjo7Hb7RlatmY9XXoLVy1ZM/T0VFJTU9GaZkRGRhb4\nd5/gqkfUWc0JycnJ9O7dm5o1a1KrVi3Wr1+fb12tSpYsSfPmzfn999/9bjcajRmKf2eHnJSCenPs\n6xyds4HLu07RZOb93LHsOVZ8tI93Gv/Kuf0Zy1tJksR9HzWHPXuJnDudvd1a07JTR8a88jIWiyXb\n888petaviReDwZDvFRjCRRNQoe6Jgi4FpQmx/Ih7CxY7q7k0tevlG0+qJQLKsuyNJdXiSTNXXPAX\nT6rFJaempmaIJwWyxJP6xidn57omJyczbdp0atVqxPDhM9iy5X7S0lbj8TzJFaEK0A9ZMiMpIWqV\nAnjWILtagbM9irskqPuBv5ENpZFSZuqeG57LyBeehqN1UW0u4AA4z8PlwF3vsuA4jZx0D9L2oVDk\nbZTS/6KYHkRa+7a+8Sf/hQ9rwaVzqO0PXxGqAPG1McSUgeU/+B+7dzMMrg9FqqGM2hxcqALc9gjO\nE+dxHDjO+Xe/58QLH6B8MV+/UFUU5JefQf1gKryyDBreBbHFiLypHomJiRgMhqBZ/xpms9mbgBcq\nhClYvGug/UVJK0F+ICyrOhk0aBCtW7dmyJAhuN1urFYrb775Zr51tTp16hR9+vRh4cKFfo+jZVOH\nilHMqy5GM9+bycfLvuf2RcPSxYfbzaq+szj151Z6Tm5Ki0duznCM7x5ZQ1KiQpGkP/CcPofzuYnI\ny9Yx+Y036dmzZ54JvlAWQ991+7MYaoksmbtDFUZ85xosxrKgrcN6Y4H1khfxpB6PB6vVSnR0tHee\n/mqgDNoAACAASURBVOJJtf/6iyfNy+u6b98+3n33febOnQu0IS1tCNAgxKhfgRfAfBwkP9ZRz0pk\nZQyKZyuo9wDTAd/9FoD8GFQ6AXKQcBPVDSkfw4UXkaVyKJ45IGmdp7ogl4lAqf9T8KmqKpz8CnY+\niWS6BbXEr2D4LyFMccKpEjBgKZRtFHC89O901KUvQsVhUPcd//ttfx7ZuAxlVqbGLmv/gJf7QNOh\n0EN/+1Tj5DqYSqvYdx1G+eoXaHp76EEATify8EGoa1ejvrEOSt/k3ST/+AZDipxmxpRJpKSkEBER\nETLmW1EUkpOTiYiIIDY2NuQ96C/eNRgej4eUlBTvy7tWzUIgyAYiDCC7XL58mQYNGnDwYMZC1jVq\n1GDFihWULl2a06dP06ZNG3bv3s348eORZZnnn38egE6dOjF27FiaNWuWo3k88cQTtG/fnvbt22fZ\nprlTo6OjkWU538WJy+Wi4W2NqTy5M+Xvruf9/Ngvm9nw4OdUaJjAwK9bEV863RphuWDn1ZvmEjV7\nBlHdOgLgXPUvrmFjubl4Sd57ZxI1atTI9nyyk+yjZ/1aJn9ehFzklMxC3O12e0V4duJJ84vstOAN\nFTsbKp40UIxpoHMpypX6pFpNU9/ap5nd9/lxXS0WCwsXLmTcuHc4c+YcHk8/3O6BwA26jyEbWqEa\nhqAa/nflQ8/y/0TqTlC7AtMA/2JINtZGLfo4atHn/J/A9hfSuceQFBuKZwpI/TJuV4+DXB1a7oDo\nm/wfI+0Y8vZBqJc3oxaZAXH9s+5ztjOGykXxdP8m6zb7ZeQFD6AeXYN66zwoFcSy6bbA4lLw9Q4o\nmz4f6ecPUGc+B10nQ4tHA4/NjMcNM9sgnUxEnfcXNNRZJcZqQR7UAw4eQZm4CeIyxfIe3ESZ9/pw\nePd2FEUhJSXFa40PuKz/xKcsy7pd/OG0cPU9h+YdECWtBNlEhAFkl0OHDlGyZEkefPBBGjZsyMMP\nP4zVas33rlajR49m+vTpGeJIta5VLpcLWZbzrItTKCIiIpjy1jtse/onPM4rxaJv7FqfLkcmkmw3\n8/rNP7Bl/mEAYhPM3PParTiHveh1AZtub0x00gL29WxL686dGP2/l0hNTQ14znBKQeVWKazcKGGV\nU/Q2StAeMHnRKCE30aoC+CPYWnOjtWjmovlaXLJ2Hs11b7Va8Xg83t9/ZGQkcXFxxMfHExsbm+F+\nysvrarfb+eWXX+jR434qVKjCU099xtGjDlyu5rjdzxOOUAVQPK+jOieCegk8S5GdjcHVDcVdA9RD\nwCcEEqoAivs11ItvgZKpk5RzN/Kp9nC6N6qrD4rnRFahCiCVR5IaIB+emHWbqiAd+wBW1kS1GVDL\nHvcvVAGKvotn189gO5/x81NJ6W7/88dQ2x0ILlQBjLHIcTWQfv883Q0/cxTq+2NgyILwhKrlPPLM\nNkhnD6IiQ4mS+sZdOIfUtTWcvIAydU9WoQpwU30up1o4cOAAspxeqD9UYX+n0+m9Z/W6+HNa0qqw\nlM4TXBsIsaoDt9tNUlISw4YNIykpiZiYGCZMyNjfOpQlJScPL6fTyc6dO9m4cSOpqancf//93H77\n7ZQrV445c+ZkESdabGF+i5MOHTpQp3JN9k7L2GXFFGumw8rR1B3fm68GruSrAf9gT3XS6omamCNc\nWF654laTjEaiRgwibvsffJ98kjqNGzFv3ryAsYa+gsWfKPddf26Ici0JJj++iIN1NgoWT+rbWtN3\n3oUVLWbVd6166pP6ay0aGRkZsrVoqHhS7aFvNBqJjo7OEE+quUW1Zhz5gdvt5q+//mLAgKGUL1+Z\nRx6ZxOLFVXA4vsZieQN4G0VZCmzKxtGbA/HgqIbk6oniuQXUw8AHBBOpV+iFLBdBSvkw/X89F5Ev\nDINjt6LYokE5BtJ4kIJYrj3voRz7Kj1+VcN6AHl9C9jzCiTMQS39F8hB5mO6GTmyEtLmWf8dVEXa\n+D582RJK9UZpvRlMOurIAkqFp1EXfIz8Yg/U37+GZxLhZh3lrDSOJcGE2mBTUXscRi5SFWnB3NDj\njh9B6nQbGIqhTNoGpgAhXZIEDTp5cyEMBoO3sH+g76Xsdq3S28JVQ7PaWiwWUYNVkKuIMAAdnD59\nmubNm3PoUHrW6qpVqxg/fjwHDx5k2bJl3q5Wbdu2Zffu3V4hO2bMGCA9DGDcuHE0bdpU9zmPHDnC\nU089xa5duzhy5AgVKlSgZs2alClThpMnTzJixAhq1KjhrfWqob0xB3MJ5SX79u2jdcc76LTjZaJK\nZ806tZ1MZvmd7+I6f5mH5rXFYXXzaZ/lFD22ATk+awauc3UirifGUiW2CFPfmkCtWrUKPOteb3yw\nHnzd2f5KYflz24ez7tyOB80pBVmf1Dee1F/Wvd7rqoXcaIl2eYGiKKxdu5bZs7/n55/nI0k3YLG0\nRlXbAP7Kwr2DJB1CVf8kgBctE/uR5TkoyveAAbAAW4AArvigfA/yM0jFX0K9OA5Zqozi+RYkHYX9\n/0M21oVKPVCqvIp0ZBrq3peRotqjJswDWWd8eOqXkDYahu1BXjgE9dBy1AbfQpkw616n7IHVDZFi\nS6GO2gTR+kQuAP9+CXOHQbVHoMl/L+E7piGdnYG6ekfgcbu2w713ItVsgzoqQIKXL6vnctvWz1m6\ncL73Iy3rP3NJKy2etGjRot7727ekVSgXf05KWmntn0UNVkEYiJjVnNCqVStmzZpF9erVGTt2LDZb\nutsrISGB559/ngkTJpCcnJwhwWrDhg3eBKv9+/eHJaxSUlJYvHgxNWvWpGrVqhlqew4YMIDBgwf7\nFb//Z++846Oo1v//Pmd300gIgdCb9KCIKMq1gPUrSFERRPSqgIode8eGBbFQ7NerKFZQQVRAAUGl\nSpEqJXQhQIAACWm7ye7OOb8/zm6ySXaTWS6gv3vzeb32BTs7M+fMZHfmM8/zeT5P0Lfyr7QCeuzJ\nx5lXuJ4zP7wh4jqrn/yWLW/M4fw7T2bnsoPsTU6j1vQPw66r/X6K/jWR4uffZNC11/H0409Uar9y\nvKGUwuPxkJCQYPsc/1WNAv6KgjA7VlDlX8HIT6je82itoIL/P556UqUUhYWFFSLY/wl8Ph/z589n\n/PhPWLRoCT5fDdzuC1HqIqBRFVv7EeIatH4OuCrCOm5gBlJ+hFI7EKINWt8MnI0QdyBlWyzr4yhn\nnYcQH6N5AUQ8qPEgroxyH4CeCc6BiIRWULQPnfI5JFTU5lcFsS8VjYWMb4I6d3503q1aIf58G71+\nOIgkRIfz0DfZII4Alg859V7U71/AeZ9A85C/gd8LU2rDzMXQJowOf/liuLEvdB0Et9p0VyjIIfau\n5uzfk1HmgSmcsb/H40EpVcFzORK5DYejtbTy+/3UqlWr2oO1GtGgmqz+J1i7di1Dhw7F6/XSqlUr\nJkyYgGVZf0lXq40bN/LII48wadKksBeAoqKiEiH9X4Hc3FzadkjjlGd60e6+S5CO8BfCnPV7WdD7\nTYqzC/B7LVJWzsDVIXJRlZV1CN9jr8Hshbz6/AsMGDDgL3tiLywsDNuI4e/WKOB4FoTZIeBQse99\nKBEP/t/r9Zb0LA93PiJFScv7k4YS0+P93QjnEBAtdu/ezdy5c5k6dSa//bYAh6MOhYV7gGcBm5Xj\nJfge+ARYSmkKXwNrkPJzlJqOlCkodSlwExCaGTgAXAf8AnSkauxCyjdR6hOkrIdSXYDZwG4QETxK\nI0HvwOF4CktNg5j20GAJyCjPp3UYmfsYKvcTiG8Al+2Obnv3buTKf6LzNqHrfQ6xrWFXB3h+D9So\nU/m2eQcQH/RBHDmA6r4QkppXWEXMPBOu7Y5+pFyHrZ9mwN2Doe+T0P8J+/PN2Ye472T+NeZlhgwZ\nUrI4XBQ0Ly+vJJ1fHkEttp2uVXaLuYJwu90UFxcTGxtLQkJCiQVcNapRBarJ6n8LtNYMHDiQe+65\nh06dOlX4PNi9KJrI338yl3Ap7DFjxzLunddJalWPrhOHUuuU8JEhpRRLb/qEnZOW4aibQu0/FyOq\nINneJasoHPwI8XlFvPz8CPr373/CiXlRURFASYOAv5MVVCiOJgpcHicqde/xeEqKl8p3cypvBVXe\nNP+vQvluUVWhqKiIxYsX88MPP/HDD7M4ePAgDsdpuN0dMCSxFvAaUnpR6g3spfRLIeUg4CqUGgpM\nRYgJaJ0NnAzcAVSWmn8SKd0oNTfCuBpYipSvodQ8hEhD60cIWmRJ2RsYjNI2W57qXUjHMyhrMkJ0\nRuseIMdB070gbUpstIUo+Dc6+wmkaIWyPgXH2XD+IqhV8dpYcXsNuz+HtXch4s5BN55WMrbck4a+\n5Db0RQ9G3n7nMni/NyL5VPSlcyKT7C0TEDueQf++1WhOATHxI/QzD8Mt78JFg+0dL8Cfa+D57iDj\nuaFvd8a/VzYaGxoFjY2NJTc3t4wEoPy6BQUFSCltXSPsWlpprcnNzSU+Ph63210iB6i2tKqGDVST\n1eMBy7I488wzadKkCdOnTyc7O5uBAweya9euCtHWUaNG8dFHH+FwOHjzzTfp3r37UY+7evVqnn/+\neT755JOwP36Px4PT6YzKDqgyRGsFpbXm7IsvZKcnF2v3Pk558FI6PNULR2z4+ez/JZ1f+ryNrpFE\nzX89T1z/npVe1PxbdnCwUx9ikptRQxdy/7A7uXnIYJKTk4/J8QaPOdxxB5cDZczg/y5WUKEI6sfi\n4+NtpfqqIqXhyGm4qKkdPWn5tH3oWKGV+n8l2beD4uLikh7p5eeotWb79u3MmTOHb76ZyapVS4mN\nbU5BQQeUOg2jES1/rrwIcTda3wtEkwovACYBUwCBlA1Qqi8wALATqSxCiCvQ+lMg9NrkA75DiJfR\neg9wNvAUUL7CfQlwL7ALRCXRSL0H6RiBsiYiRCe0fougVlY6O6FqPQZJd9uY7mLE4VvAOoK23goc\nJyB6IRsnos6qoqip+CBy9c3oQ4vQdd+F5HJuBdnvILyvop/dWUIwQyGWvI+e+gCk3Q+dR1Y+llIw\npRZMnQOnnIZ882XUO2PgwSnQKYqs27Lv4I0b4LSh0PlOkidfxL6M7RV+b8EoaDDiX1k742hT/HYs\nrfx+PwUFBSQnJ2NZVrWlVTWiQTVZPR4YO3ZsSZX+tGnTePTRR09IowCtNVdddRVPPPEEJ598coXP\njya6WpV3ZbS6ymXLlnHVkBuo/fkLHBz8NA6HRdeJQ6l7dsuw6299fyErHpqM5YzF1awRSW8/S0y3\nyN6EBQ+8iHvKb1jXfkH8wtGQPptBN17PfXffWcY6LNrjDn2VJ2Ch6WW32/3/RfFAaJGVndR98O9Z\nnoiGRkmPVk8a2lo0nGl+sHgpUtry7witNR6PB601cXFxpKens2TJEubMWcC8eT/jdruJizsfj+dU\noANljfUj4RdgIoZ8VrZ+FrAYKX9Bqc2BNH9xQI8aRXepEvwLIRag9R8YPeqHaP06UjpR6gpgGBD5\n7yJlP6AnSo+t+KHeh3S8gLI+RogOaP0mUL7N8ufgeMFEV0WEcfz7kEfuRxX8APomjA9s6PfwT5An\nQ/dtpp1rOOybBisHI2LS0I1mgjNMEZVSiF2p6Nu+h1bdQsYvRk6+E71mKrrbJGjSM9LpKAMxuyui\n9xngLUZ/+zX66Z+h5Rm2tkVr5LejUFNegh7vwGkmEpv4YXtmfvUBZ511VoVN/H5/iQTATtOAoKm/\nnd9dVXrXwsJCpJQl5DdY0BW0ebPj21qN/1lUk9VjjT179jBkyBCefPJJxo4dy/Tp009oo4ClS5cy\nbtw4Pvjgg7CE0e1243K5KkRXT1Tfd4BBtw1l6UmJJI+8i6wHxpA/fiqtB59Dp1f74Uosm+pTlmLG\nqc+T274PSImY9Rlx53Um8fWncaa1qrBvlZfPwebdUD1fh7NvguwMYhaNQyz/hO7de/DYA8Po2LFU\nf3esGwUc6+j1sUSoPMPr9ZYcY+jfuLJoaXnXgapIabgoadD7tHzavioLsWOhBT1RKCoqYuXKlSxa\ntJhZs+bxxx+rcDqTsKyWeDwnYdL6H2AikW2i2reUjwMno1So4b4GtiPEIuAXtD4Q0IyeDvQOjFeA\nEPeh9fPAeVEekQL6YEj170jZEKVuBy63uf16YDCwFUSAKOospByJUh8gZVpA3nBKxD1Ix6moWs9C\nzdvKfqC9iPzX0dnPI8RpaPUN0CD8PpydoeVFqFNGl/3Al4dcdzdq7/dQ5yWoPazyw9l7FbKVEzVk\nsnl/ZC/i/d6IwlxUj8WQUFXhWwi2T4KF1yNS6qJHLod6FbWtYeErRr5zE3rVbPTAWdC4lJg6f32M\ne8+Gl158vsJmWmtycnIQQtiq+g+m+JOSkmz97sIVcwXHPXLkSIUxgwQ3SFj/7g/51fjLUE1WjzUG\nDBjA8OHDycvLY/To0UyfPp2UlBRycnIA86OtXbs2OTk53HPPPZx99tlcf70xtR46dCg9e/akf//+\nRz2+1ppevXoxatQoWrWqSOZ8Ph9er5eYmJgK0dITVeyzb98+zjj3bBosnUBM62YUb93F/svvR+Xk\ncN6nN9GoR9mbVtZv2/m5++v4p+6EmDjEszfCip+pMbAPCSMfwtGwXpn13RMmk//Qq6in9kPwAus+\nglz6b2IXvsnJaW149L676NbNREbC2UAd7XH7fD4syzomFlZHCzup++DDSajX7rGwgjqeetJotaAn\nCvv372fVqlUsWLCIuXMXsm3bRuLimlBUdBI+XwugFVDeqWIyQqxD67FUFpWsiIPAI8CrgBcpF6LU\nfMAXSPGfh5EJhNvnt8Bc4BvKFlJFQgZCzAZ+CGhcLWA8YN9uLwgh/omQnVHWK0g5CqX+hZStUep1\n4DQbe/gIHKOh6W4QgQdBzxzEoaEIrVDWeKCq1Pk8cPSBXvvBGYhMH5oPywciHXVRjWaDywbRLN4G\nGaeaQqv96TD+CkTtLuhLfoRovpfZa2HuFeA9CI9Mgc697G2XexAx8jLEkWzUoGWQWPb6x56lNJl/\nM9s2VvTYDXpSx8TE2K76PxaWVsGmA+EcW4IFXYmJidUOAdWIhOoOVscSM2bMoF69epx++ukRzZKr\nikb+pz9UIQSPP/44o0ePZuHChYwfP56RI0eWGJ0XFxejtS5jch7OPP5YdbEKh4YNG/LQvfeR+8Dr\nAMS2aU7zTd+SeO8NzB/wbxZd+wHFhwtK1q93biua9DoV5+P9oGYt9Ljp6Inr8KzcxcHWF1Hw1BhU\nfun68YP742icClPuLB00oRbq4sfwPPknK1vczM2PvMA5F17KtGnTcDqdZboY/SfH7XA48Pv9x72b\nVVWduoqKivD5fCUPIU6ns4xZflxcXAmJDL4PWi4Fz0HwJla+tajb7aagoID8/Hzy8/MpKirCsiyC\nbhOJiYnUrFmTpKSkMk0Y/tPvU7ATldvt/su6heXk5PDLL78wZswYrrzyGpo3b0OrVm257rrbeeed\nHaSnd8PnG0V+/oP4fP0whUbhLNX6Bx4GJtscWQG7gBVALHAvQryIUjuAm4EPUGok0IvI5PcqpIxB\niAmVjLMfIT5DiIHAIISYh9ZXAp8hZVOknGtzvmWh9TCU9QXQDJgFTEWpX7FHVAFuRiKh4HPw7URm\n9YKsq9H+G1HWLqomqgAXIh31YddHYBUh190Lv/WGxDtQzdfZI6oAsa2Rcc3g44HwXg9o9yD60ln2\niarWiI1vwA/nQsJlUONi5KIv7G2bsQEe7AhWAuqOrRWJKkDjLhzOzmHbtm0VPgoGKuLi4nC5XLaM\n/UNN/YPSoEgQQpCYmFgiOQsdN5JbQFCWFnQK+Cs7AVbj/y9UR1aPEsOHD+ezzz7D6XRSVFREXl4e\n/fr14/fff2fevHnHpVFAVlYWq1atIj09vcyroKCAk08+mbS0NNLS0hg2bFgJWQgSnKo0S8cTxcXF\nnHZ2FxxvP0jiZaVpSf/+Q2T2uQ/ftp10ee96Thp4lrmQZR7h+zZP4R8zE7qEtEdcvQjHyJtR2Qeo\nOfIh4m+7FuFy4V22huyLr0c/vg2Sw9yEtIZNP5G48DWcB9O5f9id3HLTkGNSjOV2u4mNjT0mGqxo\n9KTltaVV6UmVUhQUFBAfH4/L5apSTxopSnoiIyFBLSiYlrHHc+zc3FzWrFnDqlWrWLhwOatXryYn\n5xDx8c3xeBrg8zUCmmIsniYCT1KxwKgy7AVGA89goq+hUIHPN+BwrMWy0hFCIkQKSrUE/kDK/0Op\nAVEe1Q7gOeBTIJhyPgz8jJTTUSojkOY/H0N8Q+Usu4HHga+wJ18oDuz3c5RKB5wIcSpa/xDlnIMY\nB+JNwIcQ56HVZIzEIRq8D7FPIZyJCCVQDWdBbHRSDLw7YXd3UHvgkunQKIpOVkWHkAuuQx9ajW72\nFSRfAoVrYPu5MOEgxNWIvO2qmTDmGjjleuj1XqXDxM66jWf6tuChh0pdC4Kp+OTk5BItuN2q/1BT\n/2gtrVwuV6XuA8H95+Xl4XK5qi2tqhEO1TKA44X58+eXyAAeffTR49Yo4MMPP+TLL7+kffv2tG/f\nnrS0NNq3b8/atWuZMmUKY8dWLGoIXnjCeYKeSMycOZPbnnmchn98iYgpq/HMGT+Vw4+Mo+6ZzTl7\nwmBqNElh3Ys/svHfv+P9fk/Fnf34BY63HwaXoOabzxDbtzv51z+A5/cs1D1LKp/InjXELxyNWv8D\nZ55+Oo8+fD9du3Y9at3p0XQMq8qLNRorqOB6lY0VJKHBB5egNKA8GbWjJz3RCN5kg1HiY7G/zMxM\n1q1bx/r165k06Rtyco6QnZ1FfHwziooa4vU2ApoA9QiffPoYIXLR+tEIn0fCJITYitavAfuBjQFy\nuhGQgeKolphq+9BOUjuB14EXKCWddjEaKYtRqg9SzggUYdVDqXOBK4DKqr9HI6UHpb4gsoXWVqT8\nCqW+Q8rEgDRhMEZGMAj4Ejg3ivnuQsq3UWoS5vbzEPBiFNsHsQMpH0MxC+K7QpMfokvbax8iezT6\n4ItAN4Trd/SFE6Gxzcr9zF9g3gBkbDtUy59KpQiA3NIcNWQkXBCmaYrWiBlj0ZOehUvGQOfbqx5r\n64+cvPkFVv72a8lv1+fz4Xa7yzyQR1P1f7SWVsHraGXuA2AIbtDaqtrSqhrlUE1Wjxfmz5/PmDFj\nmDZtGtnZ2Se8UYBSiosuuoj333+fRo0qRhZ9Ph9+v/+4tYa0A601va6+iu3dTyPl4RsrfK4K3GRe\n+QCeZX9wxiv9aXXzuXzX+ik8Vz0KN4cxy1YKJoxCThqNs3kjEp4eRu6gh9CDvoe0S6ueUOZ6GNuF\n2NhUHBRyafceXDvgCi6++OKozpNlWRQXF4eNXP9dWouWr7YPmu//nbSglaF8VNguCgsL2bhxI+vX\nr2fVqj9YsWINW7emo7UkJqYJHk8qfv9ahGiOUtdj2o7agR8pR6L1RcYbtEp4gAxMpPMnDJFz4XDU\nxrJaYMhpeIeMUnyKELvR+hWqtqHyY4qw1gLLAhrUOKAb0A+wa9rvRYjb0XoEcFnI8kJgFkJ8htZ7\nEKI1Wg+mYjOBtxBiM1ovompSvxIpx1Lq3/owsAGjm92NkUPYwT6kfBalPkeIM9E6DRHzK7rllrD2\nU2HhXozYNwihvCj/5yAuAH0TslEGqsfPlW+rfMjVT6I2vgv1noRGYa5dGQ8gU5ahXvqt7HK/D/nv\n29FLv0UPmAHNbBbH+YuIeaMBa1YsoUWLFgghKlTjl0wviqr/aC2tvF4vBQUF1KhRw9aDZZDgVlta\nVaMcqsnqfzOmTZvGnDlzeOmllyp8dqKjq5HS2Vu2bKFH3ytosuFrnA3C9TeH/GnzODj0OZKap9Ds\nms6sGzkL3w9ZEB9BxuD1wit3IeZOAkshElNQT2Xamqec/hgs/w6V9jMc/pYk91S8R1bR7fyLuXZA\nH3r06FGlVEApVSIFCK3AtywLCN9atDwRLb+ssvMaej5DiWmoBKB81X35iEWw/eKJaBpxrOD3+0va\nCJf/Dnu9XrZt28aaNWuYN28+mZmH2bBhPdnZB4iPb4TfXx+PJxVTOd6QsmTtIPAmMARoF8WMdgL/\nxkT+moYst4BM4E8cjh0otQ2tc5EyEaiJUnUwJOxeKsoBKoNCyqeBS1GqX7nPNCZSuw6HY2VARhAL\n1EXr0zC61mnAO0C00pcZmM5YPwHbkPJLlJoViAJfgul6FYn0KIS4Dq1fBAaG/RxmY5oMbAfOAh4j\nVF4h5eVo/TBaP1DFPI8gxEto/Q5StkOpt4DWZg6ODuiGH0NSFY4GVjby4IOo3CmgbgXGgAj8HnU2\nOJrAlWshOYKUIH8H4perEJ7DqBazISGC44H/CGxoCG9vgdTAdyc/GzmqD2TtQQ1aCjWjcBnIWAgT\ne/LI/XcxfPhw4uLiyM3NJSkpKez1Ppqqf8uyyMvLo0aNGlWS2+B+g+4Ddh6GQy2t4uLiqglrNaCa\nrB5/7N69m0GDBpGVlYUQgttuu4177733hDQKUErRrVs3Pv30U+rVqyjE93q9KKWOaeV6JMP8ytwG\nHn/6Kabk7KTOJyMiEiXl9bLvn09SOHMhqtgPXXuhx06vfDK52YhnbkAv+QnqnwJ9x0KbiypP/RUX\nwnMnQf1noPE9ZpnvEByeTqL7G7yHF3BG53O4/trL6dmzJ6mpqRH1pKFEM5xJPlAmxW6HlIazgwrV\nkx5ta9Ggl2mw2Oz/F2RnZ7NhwwYyMjLYuHETq1atZ8uWzRw8mEl8fF2gLgUF6RjbpQuBVOxFS+cB\n8zFEyY4HahCTEWI7Wl+OlH8CW1FqH0LEIWUSltUASMPYNIXe6GcCqzEtVaM5/zswxHokkAJsQMrV\nKLUaKELKOijVGrgAQ8pLIcRohEhFqceiGE9joprPBv6vA8dzM/ZtuGYAnwFrKW0B6wG+QoixgCcQ\nnR5G+HMxF3gJ2EP4v40bId5E65FI2QSlRgNnllvnGUTcEvRJa8NHV7WGvM9g/71I0RJlfQeifyc9\nwgAAIABJREFUWYXVhDwP0a4T6h/vVNzHjomw+HZIugRaTKmyXazcehq61wD01U9B5hYYcQkyoTHq\nhgXgtOkYoTVi6Wj0/OegzsWc1dLN9KlfEBsbS3FxMcnJyRGvsdFU/dslt8FortY6rKVVJFRbWlWj\nHKrJ6vHG/v372b9/P506daKgoIDOnTvz3XffMWHChBPSKODrr79m2bJljBgxosJnQYJyNCb2laWz\nw9lAVWZZlJeXx0nt04g7vR313n+S2HYnRRzXvXgNBwY+SvH+bPRT4+HyIVWn8uZPh+HXAjGI2AS4\n4F70P26GxAjFMKsnI766HX1GZsUWj/58yJlJQsE3+A/Npk27kxnYvxe9evWkWbNmJVHLIJmMjY2t\ncD4qQ/mWoqHnNlyU9FhaiwVT6383832lFHv27GH79u0sXryYrVt3sGtXJtu2bSE//wjx8Q1Qqi5u\nd220rovRlaZSmhr/AyG+QeuHCF+ZHx5SvgskoNQthL9W+jDFVXuRci+wC6X2BcaVmOhqG0pbplY1\n3utAM5Sy22YzF0NWv8Gk4S2kTEapxsA5wKlUnmovQIgRaD2Myu2ofMBGpFyOUksxhVO1MBHot4ku\nGmwg5U3A9Sh1C1KOR6n3AvrW64Brq5g3SNkfrYegy7Rx9WEkAk8GzsMLQCT5jxchT0U3+QZqlCuQ\nKt6CPDAEXbQZbY0BMSTyRPRScFwC1+0HVyA67ytALrkdnTED3fhdSL2+0mMpwcEPEAXPo++eAK/1\ng7b94IqP7W0LUJSL/P569O6l6LO+h+TTiZnbkM0b15Y4fVSlGy0qKqK4uJikpKT/2NIq1FtVShnW\n0qoyBD1bqy2tqkE1WT3x6Nu3L8OGDWPYsGEnpFGAZVl07dqVL7/8ktq1a1f4vLJiIDuV6MeqUcDn\nn3/OXcOGIWJjqHPXAOqMuB2ZGD7Nr5Rib9+HKPh5OaJRa/Q9L8N5PSslrfLu7qi9Epr2Q24eh8rd\niTylJ6rbvdD6grLbao184zxUQWNIq8RaSBVBzlziC6biO/AdcTExdOt6Pl27duKMM84gLS2NGjVq\nVEitV6UnDVd1fzz8bsMhaL4fLrV+vMfdu3cv27ZtY8eOHaSnb2HDhi1s376drKw9xMQk4XTWpago\nDq93A8akvg0mmlj1g5aUXwO7UeqhKGZVhBCvAL3QuiMmlZ+Jw5GBUrvROgch4hEiEaVSMIVO7QPz\neQdDuip2kouMPIQYg9Y3YiyvQuHHRBJ34HBsxbK2A8VImYRStTAp/3Mx+tNo8CsmqvsuEFqJng+s\nwuFYgmWtRYh4tG4MnB+YmwQ+QIicQFesaB52LQzB/hTTArYpSt2N0c/axTKM32wGhjh/jRAPIYQO\nRIqvtbGPh5AJ21HNAwWYqgiRPRJ9aCzQHfQkEFVHuaWrFer0++Hke+DQSsQvfRGiJqrlzxATvkFB\nWCgLNqaA8sOFL8E/7re/7YE/EF/2RjjroM5ZADHmoSzhj2t59YFuXH311Witq4yaBuVhSqmwrYLL\nw+Px4PV6qVmzZoV1g56uQW/VaPWuwYIuMMVZsbGx1YT1fxfVZPVEYufOnVxwwQWsX7+eZs2anbBG\nAZ999hnp6ek88URFYX9QXxlM/UZqLVo+OnisLYu01px3aQ/Wn9YN56/fo7MPUP/tx6h5bY+w41h5\nBWxv3hurdkfEwY2Q2sCQ1vMvD09ad2+HgafCpfOgbhfI/xN+fwiRNQ9iE9EX3Af/GAI1Av3L92+E\n0WfBqcuhRuTOOiUo3g0r0kANITYWYmNX4navo06dRpx2Wke6dTudU089lQ4dOpSQ10hV93/1BTl4\nkzmWBVdKKQ4cOMCePXvIyMggIyODbdt2smDBYgoKCsjOPlBCSH2+FDyeWpjoaJ3AqzTSK+W3mPT6\nw9gnSd4AEUwDrqpkPR+mXel+hDDV+VrnBMZNBBJRqh5G+9iWyJXzy4HZwINEZ6+0DPgReAA4jBA7\nEGIzSmUGiHHNQOT0VAxZDx7/XuA94B6ijXRK+TLQAqX6YzpULQ5YWNUOSAi6A+FalPoR4nFgMFpX\n1c1KA+mYFrA/I4REa4UQHdH6rajmWzrv61CqPUKkA4fR+m7grij24AZ5GjSdDdqD2DcEoSXK/xWI\nKBof6LcQNV6Fk+9Frx4BtW+GZlEeU9E2xM5/ogv/QLTpjh44zf62ayfAzHugyY3Q6V9lP9s7lTN4\nix++n0RcXBxer7fKqOnRWFqFI7f5+fkVHDtCLa3sFFxVW1pVI4BqsnqiUFBQwAUXXMDTTz9N3759\ny3S1AqhduzbZ2dlhyWqvXr3o1y/aiEkp/H4/5557Lp988gl79+5l8+bNnHPOOTRp0qQkmgdU0Due\nqGheEGvXrqV7v6vxzN4IM77CMW44sa0bU3/808R1LN8vHI58Mp2sB17HejoTfnwasewjqJ2KHvYy\nXHhlBW2qeGc44vvJqCu2li5UCja/h9zyJipvF/LUPiba2rIr8tv7YM0vqI7rbc1f7HkFdr+F9mdg\nSIQfSAdWEBOzgtjYlXg860hNbUznzmfQtWsnOnToQOvWrWncuPHfqjd2UVERfr/fVspOKUVOTg5Z\nWVls3ryZ/Px8MjIy2Lx5Bzt2ZLB3726ysw/gdMYTE5OK1rUoKkrC50vGFMEsD1R629WG+hDidbRu\nDlwTxVFlYiKINwEnAYcwEcn9OBx7UWofWhcgRDxSJmBZNYFGwD5Myvte7FeggxCfAm60vovIOlkN\n5ATmtheHIwPL+hMTcayJUrUxpPR0qi6EmgmswuhJq4pcaQwp34YQa9F6S2DM+ijVCbiEUj1pZVgF\nfAx8hHm4KD/GdqT8GaXmIoQfaIbWvYBOGBnDI8BYTCGVXeQgxHS0/gyjdb0K41d7NA9Wg0D+DvhA\n3QtiZPS70GvBeZ6RDLWYCknnR7Gthch6Hb33GXBeCjEjoOgceGAfxFXxkOMvQs68E53+LbrTBGgU\n5iHM8hAzpyFrVy3lpJNOsu2VGiSJwYYhlR5CGHIbtKEK560a1LsmJibacvIIEty4uLhqS6v/XVST\n1RMBn89Hnz596NmzJ/ffb1I7aWlpx6VRgNaaffv2kZ6ezqZNm0qaBKxatQqv10vr1q1p06YN99xz\nDx07diwRv3s8HttaouOJO+9/gMlWPN5n3jRV/Y8ORvz8PSmD+pD60jAcKaWaQ60UuzrfgCf2LBj0\nKVgWzHgasfR9SE5BDxsFF/crJa0eN1zeAlo/Bh0erDh47lZY+Qgiaz7EJ6O73ARzX4YW70KDm6qe\nvPIhVrZFFw3AtMMMh1ICGxu7Aq3n4vVmIKVFYmJt6tZtQP36DWjatCEtWzakYUPzatCgAQ0aNKBe\nvXrHtTpWa11iN5OZmUlhYSH5+flkZWVx8OBBMjP3s3v3PvbtM+9zcg6Sn5+D0xmPy1WTwsKDxMQ0\nxe9vFUhPp4S8wt2YNFK+j9ZetL4zzOeRcAB4C/gnlafa/RiimRV4/Y7RdyqEiA2Q0kSMK0ALjF1U\nRb2u0a/WQ6mBRPYXrTi2lGOBM1GqByb9fRDIDGhcMwIaV4GUNVAqCePl2hIhvkeIf6CUDcu1MvN8\nHWiCUuW/rxYm+roNh2MTlrUtsH4ySjXAkOlNmEKtaArKgoVatVEq2It+F0L8AvyE1m6EaIrW3TGE\ntDyhnIQQq9D6W8J/P4LQwAocjq+wrMWY1rK9gYVI2QKlPohqzkaDOwal5gTefwvCZrvTkillIh2P\noaypQB1EYkN02jL723s2IXZeB8X70HFfgMtoZ2VRa9QF98FZ90TeNudPxFe9EcXFqHMXQHy4yLdB\n/B//ZOTdZ3HXXXdFFTWNpuq/PLkNPuxG0sj6fD4KCgpsFXNBWUurYPetavxPoZqsHm9orRk8eDB1\n6tRh3LhxJcuPV6MArTXt2rWjYcOGJQ0C2rdvT6tWrbj22muZMWMGNWpU7JJSVFREsF3mX4nDhw/T\n4cwuFH46B9ICHo07tuC4dwA680/qv/YAybdciQgQUM+qdHZ1uwX92EZIDZimKwU/jkD89i9ITDKk\n9ZKrweGAX6YiRtyC7rcXnBEiR0pB+lvIre+gcneAIx5avAcp3SGmig5FR+bDxj5gbcUQoKqQiyFI\ntwM9KSVVBxEii7i4g7hcB4GD+HwHKC7OISGhFuCkbt06uFwxOJ1OnE4nLper5N+YGBculwuXy0lM\njAulLA4c2EdKSioFBYUUFropLHTj8RTi8XgoKnJTXOzB6/UgpcTpjMPv92NZFjVrtsOykiguTsDv\nT8TYPCVhipWC783Nw5CUWWj9JPZ73hcAr2Cq9S+wuQ0IsSww1iMYsmXOnRAHkDITpQ4EIqVBUloD\nY4G0DyEUWt9heywoRIi3gUvRuout9Q2hNg8mQqSg9WGEiEHKRCwrGdN6tB1QP8z2+4AJGDP91lHM\nM6h7HQikIMQ2hEhHqV0IEYsQySjVDBOpPanMllK+A6QE9KPRPLQWAk8AFyLEmoCWtzFaXwJ0pfKI\np0LKh9D6WrQeEubzbISYhmkkUIzWHTCWYsHfVg5wJzAFOMPGXJch5asotSqw/hPAO0hZgNILbGwP\n6EKEfBmtxiLlKSg1HqgNsj20+wVqVBEl1n7EgVfRmSPB2RviJ5Z1CvCMQcS/i757W3hJ05YZ8O0/\noe7/wZlTqm5skPk9ndRYli78yQwfRdT0aC2tPB4PCQkJlZLKYMW/XUurIMGttrT6n0Q1WT3eWLRo\nEeeffz4dO3YsIZyjRo2iS5cuJ7xRwNtvv01hYSF33VVR1xXs5fxX+mwGC48+GP8hz379He6J88pe\nrL/7Aseo+3HVr0WDj54lvksHAA4MfZ7cX3ZiPby67A6VglkjEYvegoQE9N0vQfeByNsuQB2pCxd9\nW/WkcjfDnN5QuN/cZOKbQe3L0bUug5pdDZEtB7l5IPrwbrT1W5gdhsM3CHELWv9K1VEtP3AIIW5F\n61jMjdsfeKmQ/1thlk3A9GLvgklnxwX+Lf8KRjryMGna3hgiaQcKKd9Aa6Ikg5sx6eR7idyyVAFH\nMNHJQ0iZhVLLMdcxHZK+T8TYNDXDREvLp+49GDlAGubY7GIr8DVwK0YeAKYy/iCwHymNM4BSWYAP\nKWsANVAqmHK/GRM5tYvFwCKM7rUyF4NiDLndi8OxG8tKx+hJ44A6aN0S6EzVrWDdCPEaWl8DVGY+\nrzHHvAmHYx2WtQnzfdOYAq9eVN2kIBTrMd24pmKIuwKWB6KoSzHtX/tgKvvDkZo3At+Fnwh/T9PA\nnIB3658YAv0YpefUg3lQnAGikhS+tkB8DPqRgJ73TUzzhiAG4agtsVpWojd1r0PsvA7hy0HFfgWu\nrhXXUQpRVBv9z5nQ5JyQ5RZy3nDU8nfg5DHQ0kYnKwCriNi5Ddm0YTUNGxr7smiipl6vF7fbbYtU\nBsktUGl71SCCFf/VllbVqALVZPV/CR6Ph/PPP58ff/wx7BO1x+MpicwdT4Q6DJR3Gwjqnbr16MmO\nWx6DK64ru7HfD8/chZzxBcn9LiZ19APgkGxvcTlq4Mdw+tUVB1QK5ryKWDgOYmLQvW6EL8ZBr98h\npUPVE87+A2acA4mLwL8EfF8j2YTy5SBrdkalXGmirjVOM4bh3gOwojVYnwNX2jkjSNkdrT1oPcHG\n+gBbgKuBlzGFPnbwK0K8i9bjsKdHBKNJfBfTv95uodAR4HlMxf45VaxbCim/B9ah1DCMnvQQQhxE\nyv2BKGku4ELKeCAepZIxNlUrMFKAPrbHMlrVD4H+GNJaBRLmQP3fIcYLXiArGbQb6vtMANkLHEgB\nf2NIzQGXA3wuOPQP8LZFiC+BbLS+lcrT3WUhxCcIYaHUHZiHCDelxDToSpCHlAmY4q+6mAKrdQhR\niNb3EB1xXIup1B9BWQ3qEQw5XY9lbQC8AcLWFGN71SIgQWiEUpWkryMe50sIkYzWp6P1VwjhCzQv\nGELVJNuLEEPR+lVMu9gg/MD3CPEqkIfWlxHZu/UFpNyNUr9H8F2dgxB3gchFq6eAMG1ROQCyM5z8\nB8SVi4YrH/LAi6h9o8HZH+I/rjwiWtgH2TYJddUk877gAHJKP8j+E3X2HKhpo+gziOLDyAVduGPQ\nZWXab0cTNa2s6r888vLy8Pv9JCcnV5niD8oSjtbSKmgNWI3/elST1b8bZs2axf33349lWQwdOrTE\nwupYYfTo0TgcDoYOHVrhs2MdXf1PWosuW7aMfjcNxfNTOtQIE23MzMAx7Gr09o3Ue/EukIKDz32M\nNWJ/5JuAUvDLOMS80eic/VCzMVyRXuqPWAnksmGw41dU4obShf4MKHoPqWeirZ1obeGofQlWrcuN\nHm3/p2h/JvYKP3ZhCNc7VB7VKoUQryPE1EAa0s4YGimfRet8tH7a1hgAUr4H/IlST9reBtZgrIke\npWJhUDBCehhT8X4YKQ8ECOkhQCJlDYSID6Tu62Miki0oa68UxD5MgY9N4lmC1QgxK1BFHoyyFULC\ndKi/FWIsQ0IPY/hf6HPH9xgFx6DQZQKyY+Cm4tJlk1Nga0/wtkbKtzF60qsoufYm/Ar1l0OMAq+E\nA10ChHcJuArBVwyHCsz8UnPBpcDngMPJUNwcIxFoQ0XJhULKt4A0lOobxTkBIT7GGPP3RMqNaL0O\nrfNxOGphWY0wBvtpVPzOFSDEywFCbkcqoYEMhFgFLAm4LiRhbKcuDrP/yvAt8APGhUEDE4FxSClQ\nagCmqK6y/XkR4jK0/hpESBMWvQEph6H0KtCDMMVrkfcj5OWI1PaoZuNLF7pXI3Zci7DcqLgp4LRR\nf+DfDJ7T4f69cGgjfHUlIvFk9LlzQUYh1TrwE6y4DiFSadU8kfV/lM322I2a2rW0CnqrxsbG4vP5\nbJHbakurathANVn9O8GyLNq1a8fcuXNp3LgxZ511FpMmTaJ9+/bHbIyCggIuvPBCZs+eXSH9Eyy0\niomJsa0HKu/FGuofCv9Za9HrbxnKj8lN8T76cuQJzJmGY8TtOOKd+DKz0P+4DQa+XfXEf30Dpg0H\nvw9H055YrW6GJpeBI0K1tzcPprQA54sQH6EQyLsYij/AwW9Yvt3Gh5XWmPRvWuDVikhaTiFeQ4gx\nKDUfezfq4A32DMBuyj0buA0TGbJbtezGyAHOw170UgH5CDEBrbOAbkhpNLhKHULrAkyENC5ASBMw\n0bOGmOjtREwquZPN+YEhnrMDlfd2jP9zIWFGgJQSiIxKM/d2VCSmDTH8ayewHfPn2YexNj0pZN3J\nwIByQ01oBntvBH8xxLwBqcngqgEqD2rklLUE/R7zJwqtj5rihCJ/2WBeCQluG57wui/C6Dnfw0Tg\nO1ZyLjyY4qvdATeCXZiopBMjpTgdIx+xc01YgiGNownvXlCE6bK1CqVWYhoZ1EWp0zC2YUswLWvt\nRv5LYaQx7YGVASeFm6jcpqw8xgScEdYBB5COJ1DW1xji/A72Cs82gbgEOu4ERy3k/mdR+98C53UQ\n/37V+tIQyKK2qAbNYM8SaPUItB9h/1AsD3LDw6hdn0LyM1DrAeL3N2PJ4pmkpZV9oLMbNdVak5+f\nj8PhCFv3AKW2d0lJSVH5tR6tpZXT6SyRMlQT1v9qVJPVvxOWLFnCc889x6xZswAqOAMcK7z44ovU\nrl2bG2+8scJnfr8fr9dLfHx8mR+/nQYB5SOlULblaLStRTMzMzn9nPPwTJwHbStJeykFLz+K/PI9\ntN+PHvYLtLQRnVzxJUy6A+J6IIsXonx5yBb9UC0HQ4MLQZZLYe34ErHkLnRimM5WFebkh+J/Q+HD\nQHMcjiKUyg0U/NTD9CrvGCgYaYchsikIcUqAfD5f6e5LsRqTKn2T8F6Y4XA0coCNwBiM1i8OQ4SO\nYGyEcpDyMFofRqkjmIIbB0LEobUXw+xaUBohbUbl1kobMPrFOzAuAvYg5XcY4/+7IWYbpC4DlycQ\nnUwEkQ918sDlN3y6BuWIooAsAbeqijufjClm345xdQriZ8zzx0mB999SkR/9ClxEKdGtbPvgWOUJ\n7y8YzgQmeLgLUAKKHYC/YoR38/kBwroWQx6DWuAijE3WHhyOXSiVgdaFAX1tTZRqhPkuJmCi1bcQ\nXYEXCPE2xg/2Ycw95iCwBimXodS2QCODxhjtaNkIrfF87YhSdv1S84AlSDkXpbYFxnuc6EhqEH6E\n6IHmMtDTkLJ9wGWgeVR7kc4L0DXbQ+FKhLJQcd+Cs3yThypgrYOC3iAPwdmzoG4Udli5axHL+iEs\ngao3G2KM767ryMMMu1EyatQLZVYPdjLUWldJLENtpMJJyfLz83G5XMTFxdkit6GotrSqRiWoJqt/\nJ0yZMoXZs2fzwQfGhuXzzz9n2bJlvPXW0ZlmR0Jubi6XXnops2fPrhBBVUqVaFeD74PksarUffmI\naTStRcu3Fw36vN5z/wN8NXUq8sa7UXcNh5qV6CYPZcH1F0PGDmSLc1Ddh0O7SyJ3ttIaOeZcVG5j\naDkFCn6H/c8jPEvR2o9s/U9DXFPPMvvQGjnzPNSRBpA01da5lu47oHg+ypoXWFIA/IZhHBuQch+Q\ng1K5mJt2AuYGfDmG2CVRWnEfWokffB+DlCOARSj1no0ZaUyK+Fm0LgikwAsCr0JM56JChMhDynyM\n1i8PrQvR+nBgjjJQzBSL1rEoVQNDKoPR0YaUkuC9wL8wFlN2e8eDlDOATQH9Y1XWNhamu9N2YCHE\nuKCNDwaEXKqmOKFIwg3e0mXhiOIXQLjumN9iAraXhPkslEiGI5o/YgLFP9vYPjhWJMK7HGMyEOrB\nPx3zHBDMvO8EFkrwp4LPC4fc4HUhhCugbzXfI6UaYh6U2hA+aroAU+D1KOb7ZhfZmAebjgjxJ1rn\nImUdlGqHKdSr2EmvFIcwzhAjgEgPqG5MVf/PKJWOw1EHy+oE9A4Q5UYoNTqK+YLxg/0SpaZhNMWf\nY7+oMBSbgftB/AGuf0L8B1FFU1FHkN7hKM8nQG+E62f0WROhvo0iW60Q20aj05+DGjdC6rtlxy5e\nR21Pb/ZkbK5wbQ4SS6fTSUJC5Q+wkYqzgt6qycnJJftXSpGfn2/LeQCit7QKnUu1pdV/NcLexKv9\nIP4inKinwuTkZLp168bbb79NzZo12bx5M507d6Z3794lDQJ8Pl+Z5gDBp9ZoSWm41qLB/2utCe3i\nFBMTU6EZwb/ffYcFvy1j39cfw8R/I4Y9jR48DGLDXPhS68EXP8NFbVA5RYjx10CNFHSP4XDW9eAq\nt40QqBs+gpfPBPcfkHgWtJ5unsZyZ6L2vIrY1h3tTEC0GYJueQPq3I9gWmfwrwFn1WlqFfcKeFpi\ninluwRDM7oGXCQoH1gS2YSrAv8EYvLdESi9C+AAvWvsCLz8mb+0DBErFYFK5AzA5bSuwP1Xu/zrw\nLyhlSCc8jBBxCGHIDLiwLBdaxweq6utjCrhSMGndTzDG7gMJKD2qQGOE6AVMRusHCV/cEua8qcsQ\nYidCfI3WwSI7N/AnpsXmARyOQpRyo7UHiEXKukBnVOrKskQV4Gq/IYWhuASz7KSQZZGufm4i15cF\nf7bfYTh/KL5OgG3dYPkZ0HwiJiQaYfsg/GHGCB7OLiqS4csxJDlUpnCjwjgQAJNjYatCe2OBpwLf\nFzs4H2N99Ukg0hnud25hitV2IeWfaL0DrfMxDgwrAkVN/4dSdm8rqUBXjP3We5RKZoqBFZgOWGuQ\nshZKdQBewbJKo+9a343Wj2M6gVWlDfUBvyDlZyj1J0q1AUYh5SsotdPmfIPYhJQjUepXhDgdIeqD\nsxnKLlHVCnwfg/tBkE0D82+H9t2K3DoKVRVZde9GrrgGXfAnNJgN8WFcBmJPxVtQmwULFnDhhReW\n+UgIQWJiInl5eUgpKyWWDoeDxMTEEr/WYGDD6/XicrnK3A+klGX2W5XzgMvlIj4+nvz8fFvuA6Fz\nCd1HNf43UE1W/yI0btyY3bt3l7zfvXs3TZpEY3UTHqtWrWLBggVlGgUUFRWRkpLCOeecQ9u2bWnR\nokWZNIrP58PhcJQQSLCXui8fJbUsq4TQBomp0+m03VrU5XLx4btv0v+mO/Bc+y7ik0fRH7wGj78C\nfW803qmhSK2PeOgFxFuvoK7NgnWjkTOeQ33zIOLCYejz74HkEP/TBu2R598By69BtdtUujy5JyT3\nRCsF2RNhx1uw4U1EQkN0fD2kpz8qaXvVJ18mQ+L7iIJbAt6XkXRvEkMK22K6Mp0NdEGpilKNUhht\nqEmzrsNo/QZhbvhOzI3eiYkUxYS8D/7ElyHEeLR+HK3tRs5uJRg1A3taaq3PQcotCDEBpaoy/lcY\nMejOwJy2YhosWJjOVTWRsh5KNcWyUgPHmgrEGuLv9EHyVkz1UzmE+6qVX1aMSaNfGUJ2vwMOxIPy\nhJ9yJobDHzgV/CfD+yuM1MDnLHEDAMz7cAjl1d8JKIgJTCSAyYlQrAB35KtzcHl5mQHAgGL4tCHs\nOoLUi1Hqogg7CTM1PQghxiDlHExjgzxMUdROhNiOaQMbg5RJWFYD4DLMdzgGmIjxXf0/2+MZXIkQ\nfyDEZyjVMUBQfw/IB9KAF1AqnDctmAjwxQjxHFp/R3h9+D6EmIzW3yBlHEqdBzxH8EFKqUGB9/2p\nOqK8MUBS56P1mcB0tK6L1ovB8yjE3A+iis5j/hUIzy2gMtF6HMoKFSe/hso+CfI3QVKE4sE9k2D1\n7ei489CNMyotwCp03sgHH35RgayCub4nJSWRl5eHw+GolPQF258Go6BSSoqLi8MWSDkcDpKSksjP\nzy9DbiMhLi4OpRQFBQW2LK1C5+Lz+ahVq1a1Q8D/CKplAH8R/H4/7dq14+eff6ZRo0Z06dLlmBRY\njR8/njVr1pQ0CEhLS6NBgwb069ePtm3b8uSTT1bQnFqWRWFhYYkWKIhIUdKgTKB8r/vg//9TXHPD\nEH4SbfBdMxLmvIeY+iwkJaKfeQMu7FU21e/3I3qcgk64DM590yzL+BG5+gnUkS3ITn0ZKg1YAAAg\nAElEQVRRlzwGTQOR0aICeLYFpDwD9Sux3VFeyHoXeeRDlHsL6Bo44i7BkheB62xwnAoizAVea2TB\npWifhVZf2jzieZhI7KdUnjYthZSvYayfRtkcg0CF+l6UesT2NkIsBH5E60exGyk1kd8xmKKpHphU\n8Q5M+v5QuSipCynrIES9gBvAMkzF08mAA2p+BHUzSgujDjWFhufCKRugzVaYK6BPUcUplE+3l1/2\nHbDFASior0v3n5WIo6gtlkOb/Q8ICZ9+nQLbLkP6N6H1drQeRsRmCDFboM1MGFDaZpkpAnI1JMSA\n1wEH2prIauq2gE2WNplx/JDqgHgLwj2/BOUHQblAecx2max2ph92nQIZZ8KepuANU8yS8DPUXwox\nPjP+QQfU9IJLgk/B4RpQXB/TzKIjkb+fCtPB6/SAA0JVCHbZ2ooQK9F6P0IkoHU7TPi4qY19GEj5\nKHA1SgVdTyyMtvULlFqLlM1Q6jqMs0G47YcB/VAqkmvGeqR8EaUWYULazwJ1yu7DcRU6dhA69tnw\nu1CHkMWPoIq/Bj0AI5epSOSEvBjRvD2q0/tlP/AeQa69Fb1/Drr221AznJ1WOfj3E3egPXv3bI+o\nIw2m4qOxtAqSxcq8VaPxa43W0kopxZEjR0qIcbWl1X8dqjWrfzfMnDmzxLrqlltu4YknnjhuY1mW\nRd++fbn11lv5v/8rG/3QWlNcXExxcTEul6tM5LQ8GQ3+ezxlDJmZmZx21tm4n10CDduY/PnkZxBz\n30G0aI165k04PcSge8ViGHIZ9N0CNRqVLs/dBkuGQdYiZKNTUD2ehA59YM1UxBe3otvvBYeNoqMj\n02DH9aB643BsQOlMtCpAxpyCdl6EdpwHzrPBERjb2glHTgH9MXar8KW8A6Pb/JfNs+TGlIxfjP0C\nk0JMpX9XTFTMDjRS/hsoMMVMYaEwUbjswOswQmxB68zA5wIpUwKEtC7mRh98lSXAQiwGFhsiWPNL\naJVRtlp/GpAfA8mXQnp78GVWJIXB6OQN7tJlUzAB2AQCpLQmwn0KWu/HRKvvoEIkPGZLoHCrfOTU\nQsrPATdK3U5EN4eYTZC6OGBL5YNDLvAGya8fo0Gug2ntGjwvqRgNgsNU/rdbUDHym+WAJCf4fQEJ\nQDm83wqyr4am86HZcmheHxochoOpsKsWZGjIcIPIgraeyG4IAJNrw9be4G0X/hjL4CCGhN1Mxba4\nQa3xVqRMR6mdCBGDELVQ6iSMdjoDrV+iYmOHqrAZ02jgfYRYjtYTMV3LOmOsFqpyjNiM8RZeRtnC\nxbWBSOoSjMzgWSIXAS4C8Rgk7wURMp62EN730J4nkLINyvqKyou4VoPjQrgsE2ICWpRD82H5NUhH\nQ1S9ueBMrWT7sqiRcxmjX+zLTTdFbiFdXFyMx+OxZWlVWFiI3+/H5XJVWUgVjV9rNJZWHo8Hv9+P\nEKKkUKza0uq/CtVk9X8ZWms2btxI//79GThwIHv27GHz5s088cQTnHHGGTgcjhLNaVxc3AkhpZVh\n7LjXGTV1Pu5HZpVGUn3F8OEdsHwKsks31PAx0Mqky+QD18OKHaheSyvuzO+GZY8gMr4GZwz60scQ\nyz9FFzSGlt/bmo/c1hOdV4xWQTFkBvAliNlIx3aU/wDIRByx55joq38pwrcArVZhz5oqGyMHuA37\nnZZWAk8Doyhr6l4ZNgBjMaS1ns1t8oEXMZHSlkAOUhoTf6UOB+ypnAF7qriAPVUK5vKxCbiHCp6p\nES2YNEJ+DQ32oROOhPdj/xzYNiLwpgBiFkHqBnDlg0/AISfgM9HJGBd44+FQGnhPDZyn0GioDyE+\nxjSoqOhHHBnFCDEeSEbryzEC0r1AFg6HG63dKFVERaJeG5gVOI/9qx6m5Dz5weuDA63BHTgp4aK3\nX6fAtvPMOSUT4+zgB6cDGhdBMyc0d0ITL3xvwcAwY5YvHHu/DWQOtnlefsOEfB/DPB1sRcpNAXIa\nixApKNUSE+Usm96XcgzQHqWG2BwLTCj6D4z2uxgpmwS8ZsNVt0WGEMMRom3AEWB1IJK6HNPowl6T\nDBNdHYyOfcYs8P+G8NwEKhetXsfW3xuQrg7odkPRre5Dpg9HbX8Paj4MdUZEdUwULUUcGEjDujHs\n2LG+0lXdbrctr9RgVDMmJobExMrtvez6tYbuuypLK601ubm5JCYm4nA4yjgQVFta/degmqz+r+G9\n995j2bJlpKenk56eTmxsLM2aNSMuLo4ePXpwyimn8I9//KMknRO8uEgpbRk2H0/4fD5OPescdl8+\nErqUixwWZCP+dSN6w6/I3tegHhoJDidc1BrO+xyaR+gkpRRseg+5cTQqd5exqzppItTqH9lFIAjv\nbljfHtRUggVT5XaOKQH/BimXodmLVoeABKRsgxCNUao5WjemtIq+IaaqPqjF/Q4hHkXrSdi1mTo6\nOcBnwCqUGo6J0OZhiIV5SXkEIXLQ+ghK5QXWcfL/2Dvz+LjK6v+/n+cmk71pk7Zp043SltINKKsF\nBYpsVQFRK4sLflFkEQFXVGRxQxAEBARlEwHZV0F2KKVCgQKl2H1LW7o3bbNOMst9zu+Pc29mksxM\nJogi/HJer/uaSebO3efez/M5n/M52ua0FKhApDLY9lo0ZZtpewVrHwI2dy7aKX8Ahi3Slu8OrdJf\nYKBpDEwtgtGroS0OL/oq6e0a94FdNgDnoijY7I+1Nfh+DdqFqxot889Xkh/FmJuAWrT9aKaIoxVP\n7wGb8LwWnGtBpB21QaoK9LWDEAm1tdXBcel6bW1DNcf7oG1F842wBeyXUbZwHUSWwMCNAZh1it3i\nNgDIg4LtaUZB67fpSONbH3a7DE5MdF9NV4eCu2ph5ZkZ9iOMRpSdXIO1OoBRX+CyAJyOQb3AeupO\ntRNlSM9AvV4zRRJYibULEHkzcDyoDtbxdvDdQ3tYT6aoB76DMVMQWYhmHy4kPx/fMAJ2teItbPxi\nXOzxoLnA1fSu6cEdEPkJpqgak2jDDXoSinrRxco1Y3f8CNd4F8g3iETu5fXXn88pMQtZUyBnKj5M\n7wNZLa26Lrc3llZhxX82S6swA9ivn56XEOAWFRVRVlbWZ2n18Yg+sPr/W9xwww0UFhZ26Ferq1Vn\n9be//Y2nn36aG2+8MaOtSUtLC0VFRT1Wc/6nY/bs2Xzp1DOJXr4YijKAoS112Bu+glu7APv17+BK\ny7G334j7woaeLWQ2zYFXTofmtWArsFXH4/odDxWHgM08qjdbfo/Z9Htccj35PXxeBQ5H86xRtKd8\nI8ZEA81mFC2uqcTaGowZhu+/ggKKY1AQ66Ggy8swFQTfvwwFA/uietE2oB1j2jAmijGtQKgRbcO5\nVlJFSYVBOjaCMUX4fgQtNBmAgq3BKANWjLUvIDIPkXPJv41oHGP+hEgt8CVlAyfc3RkMhbZScy0U\nfxrqfGh6D8asyKzZvAtYeSIKfoKUeUfsAG4Kjkdv2LUG1FR/PArAN6LdtqI414ZIDCjF8wYjMgTn\nBgfrLwT+goKr3rSA3YC6Rkwnc5vaKAqMNwLbMKYRa9vx/VZC5wdrB2LMoC7Siiq6A+Rw0FAXSDmC\n3/Xoy+GUDIVkXZnVZwzs3x+Wj4Pl/WBNC/ib8bymYHuSah4x0E9pf7cZbMtBOHdM9+XnjH+iF8Rv\nSQHFJuBfeN5b+P4ijClCpAY9x/uRGpS8gXr23kh+nr0C1GHtLJx7Ef3dFKPMd2/su8LYjrKnzVi7\nL87di15LvYlNWPsLHPdD0T4w9MXe2WG1PgFb/w/LYJz/dzBjiBR+n1NPTXLFFZfmLKTKx9KqpaWl\no013LlCZHj35tXaNXJZWjY2NlJSUdHo2hQC3tLSUkpKSPoeAj370gdW+0BARzjvvPHbddVdOO+20\nbp+HBVdlZWV5+d/9J2PmV07hObubFltlixWvY28+FVe/FqKtMOEMOCgP7WeyDe4fA4kDgRYsC3DJ\nBrz+h+JXzoTKz0BhmpuAJDGLJiHth6EPxJ7D2u8C/8C5e7LMEQWWo6Xda1Fw8gbQD2v7oT9BwZjQ\nikpI2VLpe+d8RBoxpgJjioGCwD4oghryl6AARnvK64M4gaK+k8jfE9Vh7W2IgMg3cs/aSe/poH4j\nxGfALu/AN9Z3n/9F1FN0mYe1VRgzFL+sDsY0d9dUrhoJTafmWPkGtGT/KJS97L4fepxXAxuwthHV\nn0aDzyJ43u4BUzsomKrJDtA3oUD3APJnSpOoRvJptHECeF4bIu2BfCCJMRVYW4XIIJwbSDiAsHYZ\nIrPRVqfZKuW7ho+1dwDNOHcGYDNrYrtqVu/31GWtv4XdkrCb0fFL3QBYPhpWTAH7gmqL9yTV8Wtz\nMDWeRO+6k4ExN6DX6niMmYdzW7B2AM6NRlnT7K4p1v4BGEjudsGbMWY28GzQuGMEIkehXrE/ROQH\ndL7oeoolWHs7zs1CBwsN6IHIX1uq0prLce5GrN0N58ZjIguQEUt6zvoAJLdgt5+Oa50F7iIwP0h9\nJsuoqDiYhQvnMXDgwJz39Fyp+K7eqr3xSc3m15ot2tvbaW9v76SjTSaTtLS0UFlZ2Y09DbelvLyc\n4uLivLsy9sX/ZPSB1b5IRSKRYMaMGfz0pz9l2rTuzE7YSq+8vPxDrbTsVmyVK+Y9irnrXGT7Zph0\nHkz4DpSPzP2d956CF0+E0jqwVdqnO3Y1Hi/iJ9ZhSsZA/5lI5bFQOhVa58Hy6eAWAqPz2INWlDb8\nPJ37auaKv2PM9YhcRb4V+ApE5gcP6fzOlz6wn0bke3mvR81Fr0XRzKHdPy6dBTVzoSSut5xRwaxP\nojU3dWSuYJ8FrCuGuvPpdK/qdx0M3q44MQFs7QmohrEcTZkfirLPG/G85kBLGroQDAZqA2ukGhSF\n1aPdnI5CU8H5xno0tX8oqaK6FlTLuhHYirVNGKNgVOUDRRjTH5F6FIDthwLSKpRVzH4erX0WkVcR\nOYOulenZI4YxNyFSFGznBih9F2rqISIBIwr0MxDx1D2gfheIjwaeBT6lU2krjF0Juy2HMavgoXY9\nVF2ttB4FFnsQ/y6KgDNF6N26AWvXAWtxbhtaZFWEXiwHkv/12Qr8Cu3idWDa/xuBOYEt1wasHYpz\nBwfHIf04/xO9bp4ktwQgifq23oZza9GmBmcAQ7H2XOBInLs6j+2NYsx1iFyOtcNw7tco6k9i7EFI\nzT1QlsN3VQSab4X676uEwX8cTHfHhvKyQ7juuv9jxowZPRZSZUvFt7e3k0wmO2lV8y3Ogt45D4Dq\naJPJZIelVcjqZmNnw20pLy+npKSkzyHgoxt9YLUvOsfmzZs55phjuO+++xgyZEi3z9va2nDOUVpa\n+qHqgH7445/wp7sfRE78LRx0MhT0kOb5w4nw1hPg+9jB++ImfFd1rF7m9L597lhkcxNS+lLnD1wU\nYn/CuHvBX4FgsFXH4lrewiYEl8xdtJCKZ9Ce7feRH7AQrP1O0BTg/DzXEceY8xHZjcxVM9nW8yeg\nFee+ned3QBHnHcApaJpzu/6v8nkYFFeMkUCJpRipjksvolgiU2b4HuC9Q4Iiq85h7WxEXkfkTDKn\nZx2prlYb8LwmnGsNZA8exgwAxiMyGAWkg8mtCV4R7N8xpCjGbLETZWjfQynIRlSWkAR8jKnE2oGI\nDA7Y0fR0fcgw/Qu4G9VG7N3D+sIQrH0CkfmInIXm4cNjUY8C5C2oM0Mz1rYjEgtYW20wYe0wjBkY\neNhWpU2Z9OqrUCb+i2jb1CCsD+N/pec6k+ri3mJ1L9jxAxRwbqEzMK0PCq/Kg+MzFgV+m9EWY+cQ\nMs/5xz/RtrPXorZTz+PcUqwdiHP7o04Y2cGvdonbH+d+nuHTRox5EJE7sNbi3CHo7yCdLVyNFjAu\noHMXivRIoIOii7C2X7CuQ7rMcxG2ZDVu2OuZFxFfgd32dSS+AvH/CCbH717uZr/9buWpp+7HOdej\np2km1jRTCh66g8pc0Rtwm25pVVxcTHNzc067rHBbEolEn6XVRzv6wGpfdI9XXnmFCy+8kIcffrjb\nTSgU3ecazf43Ih6PM37inmxtaFDt6pcugUO+AYVZLG6a6uHcMTD099A6H9v8KC7RhN3t67jxZ0DV\nlM7zt26AB8ZD0QMQmZFjQ56B+A1Y8xYuvgkYgucdiO/vA0wOppFkYsSs/TKwGOduzXOvt6LN7L9F\nz4ApjDXAL4Gz0GrzfKIF+A2qmzw0yzw+CsJ2pk1vo73nHWChwsDYeHebqeLgqzOBv4yEzQJjN8DM\nNMulR4BVk6Cla7umMARrH0VkTVAAtQZ4D89rQKQ1SN9H8LwhiNSirUWHAIOxdi4iswJAl2/KHGAJ\nCpZmosz4KhSQbg4Y2rYO2YAWV9Xg3FBEylBW7kDU1SHfh+XCYH2fJ7N0AfRY70RlDltQULoYAGNK\n0M5nMaAgaKhQhUg1zlWh2t5wcsB16DWSraAsU7yDntRT6GTxNOYSJYYzMeaPWzjE6SpXAasimDX9\nkOgg9LhOAiqg/D6oWRQwvAa2TIKWfmil/wXkV3CYJDVoeBZIBMVXU4BjSQH6nmIL2gL2dlLNMFZi\n7R0493Rwrr9MdyPfVBjzU4wZh3N3d/nEoczt+VgLzp1Hduu5drAHQe2zUJxm1ScJTOMVyPbfAEeA\n3Aumh/uztFNcPILXXnue2tpaPM/rkYRIT8WH1lKZwGK+xVlhvB9LK0g1BOhp/tbWVkSkoy1rX8HV\nRy76wOrHIR544AEuueQSli5dyrx589h773yZmOxxww03sHDhQq644opuP+ywu8iHLVyfM2cOx598\nGm17fA+74GpcIor54oXIYadlLr564SbM3T9HJm8EWwCNL2E2XoS0zMdUjEQmng1jToaIPsDMwqsw\n86/EFa/Pr6Ahdi+0nQbyaYxZg7Xb8f0G9AG5K8ZMxff3Rh/Gk1G6cRxwNpmpxUzxfuQAjwHP4tzF\n5F8NvwhleY5Df/I78bztiNTjXAOqq41gbRHGlOD7JSgDtw1r27XSf8yvMnt+3o0Sdcej/p8bT4TI\n9TAwDoWDu3d+6ohmlOFcg7X1qM9rC6qbHQ4MD0BpmMLP/hCz9hlEXgtM/LMx2w7NgS8H3sPa7Ti3\nEwVAcYwZkAZIw+KqwWiquOu9dRWqYT2Y/P1sQTWsD6LMZQRoxPNUMiASC4Co7dCyQjW+X40xGxFZ\nioLIUeTnU7od+APagSo/SyVQltu5OSjI3QlshH7/gqFxlT93jZsGwMaDYdA8GNMEY4bCyHWwbRCs\nHgOrxsKO12Dsou7a5BVTsNGdQEWgs83UgmwNsCqwx1qPthPuj3MjgPlol7dMBWw9xc0Ysx2R7wSp\n/qUYMz7QCeczEKxHZQGz0bS+AE9jzA+AnYh8Ex2I9hTnYcsTuCHP6p/t8zBbv4rxW3H+3WDy83EG\niBR+jzPPLOBXv7qIaDRKUVFRj64vIWsadiHMBhZDUNlbQJmPpZXv+x2sbj4uNV0dCPosrT5y0QdW\nPw6xdOlSrLWcfvrp/P73v/9AwKqIcOqpp3LQQQdx8sknd/s8mUwSjUY/9IKrk0/5Jk9tGEH8oN/B\noruwr1+Ia2/AfP4nyBFnQUlaitg5zM/2QVonw9g70/4fhw2XYRv+imvbiN3lWNzuZ0HNgZiHJyNt\nh0PpH3veGBFs9AgkGUNc2vJZjz6g5mHtamBHAHoEBY8OrRofQKrYqQL1Ia1I+5+C0/zlAGHRVRxt\nP1mBskktKPBrDtLBalMl0hSAv2inbdM+7KUoA1eDpvmHkbFTU+lzUPMKRCz4TnFPVxL4gXDzBsDK\nGQEobUYL1PZE2ak6NHWqllBaYR4PGMtafL822JaywBN1f5zLwYBnODbWPo7IO4icg1K9K4H1WLuT\nVHGVwdrBGDMc3x+GsrNNqHzjC3TWQPYUa4E/BgfkOPTcbCFkZxXoN6dpWNvQ81CJnrMKtGBrQNrU\nn8wpesHaBxB5IwDk+TLI29BU+WT0WgGtiN9MKCGAnRjTirWxADCn2Fsow/NqVUZQ+RaMblFiOIz7\nq2Bl2FCgHWNuBAYh9kQYsQ7GrNRp1kZ1Gusad1rYdBDUzIFIAcQjsGU8pm0AxizBua1YW4ZIFSJj\nUUY6Xa85HxXO/or8i50SwBK0q9YbqFj6IBRY5mcnl4pLsdbDuV9g7ffRrmdfBn5A/ox7A5hDYdgs\nbOuduIbbQL4G3ACmFyluiWLsDynw7mHz5lUUFBR03NNzFTyFqfgwtZ6LsMjHJzV9uT05D4TR3t5O\nPB7H9/283AfSt6WoqIjS0lIKCwv7AOtHJ/rA6scppk+f/oGBVdDUzJFHHsnvfvc79tyzu8dhPB4n\nFovlNRL+T8XmzZvZY+8DaD3+JRgY+A4ufwj76k9wLVuwn/s+bsZ5UBYYeK9dABceCBPehNIMHoPR\nJbDup5joy+CVIIP2g/XPQtkS8HJ1mQnCrYOmiSDX07O3Yx0KYv+GVo+PxNoYxiSARABIddIHpkMZ\nMosCyv4Y4wE+IqqH1MmlvZpg/vAhZrG2BGMiiBTiXBEKgipJFfIMQgGyYMwtGFOI9kvvIfrdBoPX\nKcZOooTeFlL61DDuApr6Q8PREC9HQeIGjNkaALQkagk1NAClIVtaRWdLqjC2YcyfMebTQYFMrtiO\npvPr8Lzt+H44aABra1F2thYFpUODY5Pp2l4I3IKm9TPlusOIoqA7dHXYGPzPD/azMPCEHRxoWNO7\nVlWj58GQ6sj0CfJP04eAfHZQdJVeMR9WTm1FGb8GVHupHrta7OWCSc+HtZVB8dcAnOuPXjOVKJPc\nL7DCWolzZ9MB4iLLYOBrUJiARCHUf6JL56tGFMDvBXwm9e8JP88ss74PHbN1ZVyX9YfoJ1Fwmhvo\nGPNXoA2Rn5MdIO4E3sXz3sT3l2JteXBdDEX1rzfTu8p+0GP+Elp0Z4EZqLSgt3aACXQgUYctGIdL\nPgYmn25iQYigB/IcrC0nEunHddedzUknnUQymaStra3Hgqd4PN6RXeuJ2ezJJzU98rG0CpsAhB6t\n+boPpG9Ln6XVRy76wOrHKT5osAqwZs0avvzlL/Pwww9TVdW9ovR/oeDqxj/9mYv/+Bitx8/qbOlS\n9xTenB/gN67FHn027rM/hH6DsH85G16bhZu4KPtCnYNtf8FuuwbXugykBFP8PcSbDgUH5NSDmdjV\n0H4Z4l4hv7T7JtR79WxyV5u3oWCrHmWInkI1rOXoAy+Cgtn01/T1v4YxDyByHt26R2WNZpRpOxCt\n/M4SpbNg/OzOIOJxFGOuJeXR+RhQZ7BN5QFzWdClAn8TWlx0JvlXtIN2D7sdY45FZD9UO6v2X8Zs\nwtrmgJ31sbYGGIlzw4FabdggCwOmujfrXIam9g9CdclrUf1qU5rDQDwoqErXzvYH7sKYQYj8hPwZ\ntfeA32HMWEQyFb/F0dFB2C52Bwq61qGFXRF0YBNHAagWMRkTgtD+OBeCzwiq1xiBtkrNZxtd0Fxi\nLc59l/yr9TeiwP9olLFfDWOeye6nm6mD2V9Loe7iPNeXxNrfAdNxLrxgHbAWY94B5iFSj+dV4fvj\n0MFIqnmBMdcHxV+/IntThDAEWIa1T+Pcy1hbhnMhuHuW/GU5oC4B9yPyp+DvVmA+mOzG/t03Zx7G\nng6yFpEfoU0hnmHcuCuYP38OIkIymezQpWYDgC0tLVhricfjebGmH6SlVTwe7yjIMsZktLTKZ1v6\nLK0+UtEHVj8qccQRR7B58+Zu/7/00ks55hjVO/4nwCrAs88+yzXXXMN9993X7Ubzv1Bw5fs++3zi\nEFbs8j2YmOEJ997L2Nnfxe1Ygf30abgjzoKLDoRBv4IhZ/W8gvZ1sGAPcKUY6yOuAVs4CSk4CvEO\ng4JpYNLaDIqPadkLSe4G/D7PvbgXYy5D5Gbye8gL1v4SaMS57+e5DsHaW4FNgRF8vrEauBP4Bp37\npKdFLjP5ULYaB7ZWQvOBpCrwM4HmR1DW+SwUiPcU9ShbuiB4H0FTzJVYOxzfHxFsdy3KHnd9oAnW\nPojI24j8kOwp8y2ErKy1W1HHhGbCSnrPm4hzwxAZSqpxQjWZ2eBGjLkMY3ycu5Dc57wdlZK8h2p2\n5wIlWFuJMvCxAIAmgOKgkKo/UI1zAxCpQtncx9Hq8qPR49rTg30bCo5rEPlWHvODDgZuR6+x75Ji\nDdvQ47eVUEoALXheLM2RQJlca2twZa0wtqE7g7oFxVdd4yED3pdg8RS11+ox1qHs6Ew8bw2+Pz8Y\nbA9CZG90cJaN8WwPZDXfIXv2pB5jnkcL69oQCVvpjg328XuInIFIPi1rdwaFXLcHkpyvADMw5nyM\nrcW5R3pehGzE2h/i3GMoK3t12v45ysoO4LHHbmLatGk450gkEllbrYoIDQ0NVFZW4pyjubk5L+up\n3oDKXJZWYSo/HSD3xn0A+iytPoLRB1Y/TvGfAqsiwuWXX05DQwMXXnjh/2TB1bx585jx+ZNo++pi\nKM7Ss3vzm9gXz8DVL4YBtdC0HSZvgII8dGf192JWn4n4a1DN4l/BPI21q3H+dmzBOKQwAK/eQeDW\nQsuBIA+Sqh7OFYK1JyDiEMmXIWpAGcjP0d3iJlu0oe4AU+hNoY+1swKrqHPQFHYd+sDfoprSsdsy\nF9M8AjRZqMuVcu0emqqNBgxi+FByKGBbCqwPuiW1oABpCDAK5yJomvZE1KM03xCs/TvOvQKcjAKq\ntVi7HS3kag2OwxCMGYXvj0TT6sPQop5foz3oz+/FfrZjzB8QWYOyd01APda2YExbmvdqAk3DVwVs\nbA3OLUNZ6FNQK6SQEc217gUoSJkW7GM+0YAxvwNKA+2rRVnZBlLMbWOw7S2AalmdqyclQYmj564E\nayvSWNz+wTZX0NEqlsdRSnV0ZjeAQSszD4r+ZmCf3WGXOlixOyyYCqvHgfOCda9DBxrr8LzG4LpJ\noIBtFJrZ6EUqnddQ7eutpBwF2oG5WPskzq3A2iE4dzjdfVsB3kTB8gt01tSmx0qNNgIAACAASURB\nVEasvRnnHsLa2sBK7oC0z3cEx+o1MFMyL0LaMfZKxP0WaycFziPdB5zG3MSRR77Bww/fhYjgnCMW\niwF0k3nFYjHi8TgVFVoPEI/HaW1tzYs1/XctrbI1AUi3tMrHfQBSDgQhw9oHWP+now+sfpxi+vTp\nXHnlleyzTzabm/cfzjlOOOEEZs6cyec+172FZFhw9WE2DDjtjO/y0NISYodcn3vGbQsxL56ObHgD\nCmtg1DXQfwZ4OVLjItilhyFNRYh7vMuHO4C7wDyBtStw/jZMwSjEb8RgEAkfEJXkThuuR43nv0fn\nh1KueA0FIBei6eV8og6t+v4Gmf0qfRR8NHRMqu9cgD50Jag+H4xzgxFTDWOfgJMzVP7/DdjgYdsP\nDvwn8404cD1gglR1a1D8VYjnDcO5UYgMQ49rFZ3BwDuoJu8rwNQc62hDXQ+WY8xGjGkOmFILlGPt\nXjg3MljHMJSVzXb+GjDmNwFT+ktSTGm6o8AatBFBKBNoRQFOKZDAmEHAvoikt0odSPf2saCp7D8H\nVfjnkH9HqHXAr4P9Cav3G9Dz3YTKPqJAG56XBBI4FwtAs582FaLtdsswRgsARSpwLiwMLMOY1xFZ\nC5we7EfP9wVjXkXkaVR6kIHFL30hkJukXWuPGlheiG2fhiueBpNehD0XQf82WFgAC3zYVBBcN8OR\nsjVQ817QBlZgazk0/zqv7UsPa68GhuLc8Vj7DM7NwdoKnNsbLb7LnRWw9mJgKs5d2uWTFVh7A849\njzFjggFiNiB9AdarxLknO/9bBHgIOBtri3HuD+SU8dBMcfFU3nlnLiNGjOgArG1tbRQUFHToQ4EO\nTWl6ir69vZ1YLEZFRUXO+39vQWVXS6uWlhY8z8uok+2N+0A4f5+l1Ucm+sDqxyEeeeQRzjnnHOrr\n66msrGTq1Kk89dRTH/h6mpqaOOqoo7jxxhvZbbeutkKpEfeHVXC1fft2Ju25L82feRyG5uFDumU+\n3H0gmDLwW7FVh+OqvgYDPpsZuLbXwYLJ4B4hd1FNC3AvSiu+RmgGD2DMoKCQZ5c0di6srq/BmHuA\nqwM5QH6FF9ZeBawgdztJQZmkNlT79mRgbTQdY5qwdjsiO3CuMZgntKUqwveLUaBdDbyFPjgDq62q\n7fDFh+DdKMQbu7fpXDUSmmYAf0HTj5MzbFsbqv9cjbXbCJlMY8qDwjGD0rbDyb8/ewhYT0ZN9Teh\nwHQVnrcD57RzlTHVWLsLvr8rylCOxJh5iNyDdhc7NM/1bUfZsntQprcqsJdSRwE978NwbiQiYaFO\nKBcoRJtEXA8cSX72RRrGPBNcK9PQ87KdsFgKWoKCvXhQsZ8I5AIpzap27eoPlGOMulA4V4FIOSHo\n1KkUYx4AVgZSiXz62/toK94lQcp8QF77ZO0snHsJBbmDunwahdInoGYJRPxAWlKCbSsIpATxYCA1\nHL9/f9ijBfZYC8kILNgLFq+DUcu6ywtWDoHmn+WxdYIOPlZizL8QWYHqTsehTT7y6WAXxlbUL/Ye\ntJXbW1h7Pc69hTFT0C5y2bp8hdGADsrmgAkyajI/0KWuDJaRn+QnErmAb3+7hMsv/7UuJgCs0Wi0\no+Ap1JN29VYVEaLRKL7v98iahqAyEon0WJyVDihLS0tpamrqaO2aKXrjPhAuv8/S6iMRfWC1L3oX\nS5Ys4f/+7/947LHHOtJAYYgIbW2aoispKflQfvQXX3wxV159Pd6Yo/D3+THUTsvZR9vO/QW8dRuu\n6FlovxQrL+IS9XgDDsOv/noAXFMMidl4OWbDtbjkavJjYl5GQdqtpKq6V6EM1zY8ryVg2aIoy1aB\nPoAq8bxxKKPmoQ9EfS+if+urFwCQfwC7Yu1QjGkFWhHRjk1aYR9Hf7qFGFOAMQU4l0BBdMhODiIF\norIB5c3BvhwDeyfg0y/A7EPgjf2h9CWoeQMiDuIWtuyf1n1qIYoKvogCqTqs3dGxjepZOjLQl9YG\nUxEQxdprgDE4d1Kex3wDahw/H2UKNawdFixnNMooZ7HfArTBwR/RCvX0svQNaAHYcqzdDDQHjG8C\nY4Zi7a74fgEqRfg8yl5mcxToGiuAC7B2UMDOhrZW2po1XSKQ0nm2B981KOO9G9odqz/ODUAHGWGa\nPZQKVKCFbVcj8krA3O2bx/Y5rL0L555FAfUeeX7nHkTmIXI6nfXALtj+UErQHEwt6PUSxZiBWJsM\n2N0Yer2WYm1/jKkKNLlhYwMPLQqbRufWWQIj18IeC2DZvCyWWMCqs+jUiatjGzehg5xl+P4KVDLS\nP3AHKEavsyvIF4x3jhuALQH7uQa1zTiP3G1du8YlgR3W3Vjvxzj/QfS6vY7eOQ2sobT0CFavXtxx\nbxcRfN/vsLRKJpMdTGTXCFlTa22PBbfvx9JKRLqxvJmiN+4D6dvSZ2n1Px19YLUveh8PPfQQ99xz\nD7fffnu3EW54w4pEInmNbD/ocM4x7VOHs3DZJvAbMBXDkP1/AuNPgIIM25OMYW4bj8RPgPLLg/+t\nhLbfYOUFXGIbdsB0XPXXYMDnwBRj3p2EtE1HmbCew9rTgZdx7pYe5mxHAcsitFPOGNRCKbQ5cmmv\nXW2qEmg1+kiUrQu9WUOQMoDulj7NaAHYNFK967NE6awUEE04qE7APtXw0AmwbXCGL/goIF+Bau+a\nghR7Mqg+3y2oxldGWdnFbNGCMddgzCSc+xKd71uhe8BqPG8nvq/g1PNG4dw4RIqBJzDmi4h8pvui\ns0Yj2pnpGaASawsCUKqg15ix+P4YVO84Cj3m6b+F2cBlqLtDJj/cOCoNWIbKMjYFLWGbAzYWFADX\nYO1AoAbnhgQSgdDWKnwtQ4twfobIikDznJ8sQBn261Bwd2qWueIogAynF9FB2JRg39vQazeWNsWx\n1mGMXru+34h29lINqTLmWpgGEdS4vxRjSoFyREqD62UZqicdg17HZeQesISFUzPIqFmecCGckOER\ndh+wpARtidoCrAzAaR3GeKSaCuyNMvCpa9DamwEvyGzkM5iKAgvwvNfx/XfQgeh44Hf03sYKdJ/P\nDLZlQqBLHdHLZWzA2t/h3P2cf/73uOiiizo+ERESiQTt7TowylVMFbKmRUVFPRbcJpNJmpub8wKV\nvW0C0Bv3gXD5fZZW/9PRB1b7ovchIlxwwQVUVFRw7rnndvs8LLgqLS39UGxBFi9ezKemz6B93/mw\n/hbspltxyWbM1O8ge30HyrukMN+bDQ9/FsqXg9fls+TqALg+j0tswRtwKH5kd9h6E7i30YdoT9GE\nMjZfIHMVUvcw5nHgZkR+S37dh8Dah4G5OPcj8rfEWY2m6L9OZx/OtCidBeNf7pzi/zuwvBBafowC\nlWVoZ6mwICkKFOF5Q3CuFpEhKCidg2o3zyH/lD4o23wNyvoW4HkN+H4Tmmoehcg4REajadhqOt/b\nVmLM1RgzHedOpPt9bxMwD1iG523DuSZE2rC2FpFdEXkTBaO/QQcP+bIu/0KBaiGwS9CSNWwFGwUq\nsLY2KNjahVTB1rAgvf9HVBZwIfmBIMGYu4PvfQr1gN1BShYQspfa+MHaBNqOtTlgLR3KTqYPhsLB\nUWEwRTBGbdFE6tHubBMxpgwoRqQY54pRxrGIlIVaMcpKP4gOjD6NDp5ygQIJfgez0S5RWZwousVS\nVCz9ZboxpWMuyt5VbYyFdx1sLMWaKpzbBWWce0rFx4MitGNyDIga0DT/XJxbibWVOLcrehw2osfl\nTrIXW3UNB7yNtQ/h3Nvo73048Cr5X58Am7H2Spy7B2N2R+QEBg78IytXLuwE2HzfJx6PE4/Hqays\nzAkAe7KeSo98i7PeTxOATAVauaLP0up/OvrAal+8v0gmkxx77LGcffbZHHrood0+TyQSHdYgH0bB\n1fk/uZBbH99E24SgD/fWf2BX/RzXvBQ75jO4fX8Etane2vbJr8DqZbjyN7MvNFkHbZdi5Tlc/D1U\n5/etwOpmL9SWJtu+PoXmH/9Kfg8kwdrvA7FeWFMlMeY3QVo0k0ll5rD2xbR0cIaHSzZbqr8CdYWE\nGk1jhuH7Q1FAN5hs5uzW3hEApLPJbtnUjqaCl2Lt1mD+OHp8i1HQPxqVLuRzfW0CLkVbag1F07o7\nOwFemIhzu6HncSQpwL8jsBoqCgYPXa2tNqF61UUYsxZrG4PlxjBmKNo5rI5UFf4wckstwliGMeei\n9lQ/R4HjelSKoRZQ1rYGsoCw/WrIcBpC710FxCHL3g/nKhHph7Lv4VSGevC+hGovv4ACzWIUUGZ6\nVtRjzM8wZnPAKu7Sw/6AOhL8DmUoMxmmdg9rn8K551ANcT7raEeZ7ZfRJgFtGLMTa6P4JTtgnHTX\nrK4dAlOGwx5vgxTAuwfDu/tAQ77gcRWaDbkYZZsBNmPMPIyZi3ObsLYK53ZHAWrnYkjNHAwL5B+5\noiFgwx/GmAQik9H7SiXGfAeRa1F3kJ6iHmuvwrk7sHYMzl2C6m6hrOzbXHnlNzjhhBPwfR/nHM65\njjS8iGS0tEqPkDX9ICytMjUByGe50Gdp9TGKPrDaF+8/6uvrmTFjBnfddRcjRnRPO7W3t5NMJvO2\nEnk/Ed5InXMdN1bf92ltbeWAA6ezfdRtMPDw1Beia2HpubBzFqbfcGT/n8JuMyHeDLeMgcgNUJxJ\n1NYlkqugYX+U5SvB93egqc/dgANwbj8UwE4kZEatPRlYhHM35Ll321BropPRzkX5xFbUmuqLaOvS\nfMIF/qsxnPsaynyuIzS498duzUwI31MAyzyMOQyRfN0LwvXdBBTj3Gko2FwFLMTa9UBTUGBVhbVj\n04qfhqCtPq/AmL3Rrlq5HiYNwBvAv7B2G841EBa7GfM5RKaiwHRID8vRbVaWdAkwAWujqMdtCHZH\nYMx4fH8C+tAfgzJdIVv0JPBzjJmIyA10BvLtwXIXo9281uF5OxFpDhwDWoLlxDBmItrUoCYYGHSV\nBYTvfay9Auf+jKbRLyc/tv0Z4GdYOwrnrqBn9juJtbfh3P0ok5lust9VqhK+fw+4KtjOE9FzEieU\nD6isoD6Y3sOjAEsThhgmGNwYfAwOEARJeyX4K1VCZongM4AY1UANlK8K3AAk0FZPgpZQlxyF4VfB\nHtUwqQG2D1IbrMV7QFtwzkqfhZq5QYGXB1umQfRItFBqA8ZMA15FpDnQH++JWsvlSou3oC4NF9L9\nty7AAqx9GOdex/Nq8P0ZdLfEegRjXkbkbbIPhHZg7R9w7las3QXnLkLvUekxl2HDrmT+/FcpKCjA\n87wO0CYiWS2tukY8HicajebFbLa2tmYtzuraBKA3jGlYoAX0WVp9tKMPrPbFvxdvv/025557Lo8+\n+mg3LVFYIWqtzUtnlC1EpEPo3xWYikjHzTR8Daenn36ar3/7p0T3fRe8Lg8KF4eVv8Zuvg2XbMXs\nfTZSUIJ54yqkbCPYPLRj8X9A80kgz6Fs6XvA88AbWLsWkR2INGPMCKzdF98fi4KGb6HsVT7g4bnA\ni/NS8u9D/irG3It2qEkvRkiSsihSb0xjGrG2Aee2ILI1mK8cyjyoaFTSrRCVFw5Gs9Jh/LUE6mai\nD+kvEzIzPcdmNEX+GvpQVTN7z9s10IGORjV32eQPDaih/kSc+xYK5JIoazcfa9ch0hCk8ocDU3Bu\nIpoSHoC1P0KkEZHLySp9YBtaJDUfz9uIcw2ItKKM6BYUaF2MeujmIw1oAJ5AC3F8jBkc2FxpSl7b\nlQ7HmNGB1jYsAgunZRjzTaAekSvIzZ65YBvXoeziH1BQsycKPkONaQJrExiTDI6fAvlUMZOQ0pkK\nIo4UFJSOz1OvBOtJBO9N2nExGSY/mN9h8SjEx+GTSHvEVKPQrZRUiWGq1FDfh3+3AK+gIoCBGE5E\n2B09k2Fj2Q0UshnLdoRmksF6yxEqSVJNgurg2LwK9vMwtgz2mA9jl0HdWJhroXpRZ+usx4BlHkQd\nej17aFHl/vSuQ9VzqEzmbqAE/Z0+gzEPop7DE1A2OlvTCrD2HETOQeTMLp80Ysz1iPwJ9QP+OdkH\ns0JZ2Ve5+eafcdxxx3X+JM3SKh+LqK7WU9kiV3FWtiYA2ZoWZFp2n6XVRz76wGpf/Ptx++23M3v2\nbK6//vpuP+rwJlRUVNSjfim8EaaD0fC9MaYTIA1fjTE5byTHfeEkXlozleSul2Rf8Za/Y1dfiGte\nDn47FB4C/V4A07Mw37Z8EeJ1OHdfljmaUOPvV7F2BSLbENEUsT7YSlAf0QqMqQTULF2kkrBIypjb\nULDwVRQIhFMyy/sEmga1eF4NzjUi0oKyVhGsVd2hSBHa+rESBdtFwDNQPhQGr1OEMAAlCXdBdarF\nKGB91MDyg4Nq/3nog/abdH+QNqAFY3WBzrQZEDxvOL4/CmPewpgROHcmvfO5XIv6yxZhbQTnGtHO\nTZPw/clowcposmsir0DB8sUoYJ0DvIPnbQqAaRvWjgb2wrm9gEkoC1sIrMTabyFSjMj1wf/D2BIs\naz6wAs/bERQXtWJMbbB9uwJ3oGn5O1FQ09PgqAGVGlwWLL8SGInnqR2ZSgBCGUA7CpLUgN/YKsQN\nQGQuem0cjrL+ZSgoSp9K096vBs7DGIvIL1DbsQL0PKVDxnBqDoq8Xgkq/48Ptn1ncL7W4LGcApbj\nWI+jnUoMNSSoDda4PFhrFYYvIHkNf9YDz2FYijASNbzKrw2HDtm2oWftGXS44wGlWBI4PEbQSi0U\nRWHiemjbqWRw1/hrMdT9FD3P1yHyeVT20buw9reIjMcYi3P/xNqBOHck+qPL5/cxD/hzsCf9gWaM\nuRGR69EmBT8jP+eH5xk37g7efvufGYtofd+nra2tx2r+dODXExObydIqlBNkssrKd7nQZ2n1MYg+\nsNoX/36ICGeffTa777473/zmN7t9Hqbly8rK8DyvA5Smp+1DYGqMycqUvp9Yv349e+1zIG17z4Wy\nHh590TpYcg5sfwF88Eo+je8dB4VHgZelutZthZ3jQC5C2ZSew9qzEFmLyLnoo3I7qUKYlDG752kL\nTZF4wMAZrC0GLMZY9OFlEdFX5zxSQKIQ1UlWoL3ra9AUcQ8APPIkjH4jVdzuUMpqTxSw3gX4JV1s\nqUCtsxai6c51WFuPSAsiMbS71K6owf5IOhdAtWDt74EJgQQh03l2aHr8TaxdE7Cm7Vg7Gue2o7ek\nK+m5EAYU1M9DWdN3UFYzhrXjgX1wbg8UlO1KblasHWW5FgM1WGsCmUEMY0Zh7RR8fyoKcieiiD8d\nOG/D2u+jrTK/gha4vYvKAVZh7WaMbcC5FsS1ADEwA7HeMIw3Gt93kHwKBa2/QbW4VanJZHggSwPW\n/hrnbsCYfRG5G7UIi6Fsa8i4plf370SZ2ZfQ6v+voiC3kBSvGV5v4TQb+D2GYgqJ49NOFWXUkKSW\nGINQ8UIFKbC4LNh7gj2pxBDHEDaR1Uk6hmTJ4H36ND44yoM6HwmqUCCc6Wm3DXg6mDzgGAOXFMJA\nC2sdzHHwtIOXnSGBR3S8DydleATeE4FlYQX9UuB+4Fx6rsoPrbGW43lL8P2VwfGsRf1R8y0qS4W1\nPwEOQWQkItcEgPd8egeeHaWlX+TOO6/g6KO7d7oTEZLJZIe+M1fBUwj8CgoKemQ2Q1BZWlpKJBKh\ntbU1a2auN8uFPkurj3j0gdW++GAiHo9z9NFHc9FFF7H//mrIH950wl7TyWQSYwwi0gFAMzGlH3Rc\nfc21/PaG52md8lxOz9Uw7MqLkLqbkORnsd4cnP8exhuMKToGV/BZZV5N2s0x9ldM6/cQN4v8UvU7\ngCPQ1PkRee7F28C1wA/J38/xPdTH8UQUfPUQkeVQ+yD0iysGChnVF1DAehxwn4ElF5OCGGvxvEYF\nVdKGFobtGRQqjURBck8MdRPGXIUxe+DcySgceRu199mM7zeg2uDd8f1JaDp/FGH639qLUD/Zy+hu\nIt+AWi29hbWbcG4H0A/P2wff3w8tTPktxoxFu/xUZ9i+JDAXeBFj/oUxW3FuB8ZUA3sGbgHtaMXZ\ncTn2N7R9mg3MxyvYgO9vBWlBWe0kXuQwxIzFMRrMCLAj9dXUgOkC5N0KTPyHSOJZ1PP0CHSws53Q\nu9R6bRjbBsQQYojEEdcOEthGSei1GzKlFkzwPng1FILxEPHB7UAB/hBM+L8OPWqMAmIIyY5Gq9PQ\nXmytpNLxoWtsY2qNRFAevJ+BYgMlJsXzlpqgNYGBTQIv+LBSYLCB4/rB0WWwJgkr47AuCRsSsCMJ\nrQ7aRc+MQcFx/+AM16AiiaUoL/6TAvh8jrGJCKwS+NQwiJ6SYYb7geEHwbz9YWc1KvlYDPyMzvcE\nQWUwKzrAqTE2sMYajbLs7wTT1ehRyDccsBRjnkDkXYwZjIgC197HOoz5BYMHb2Pp0ncyZsVCoiHU\nj+aq5g+BX9hcIFeEbGpZWRmtra0faBOA92tp5XkeFRUVFBUV9QHWDyf6wGpf/HshImzatIklS5bw\n2muvccstt1BbW8vKlSuJxWIsXryYSCSCtRbf9wk7kfw3RevJZJKRoyfQlBiAjDgLak+CwhyAz49h\n5oxH2mai6eIEcA+YO7F2Mc6vx0b2xhUeD4VHgzcZ2zwdSRi0m1A+8QzG/BSRq8jXAFyLkhbh3I/z\nXAcY8zLwXFDpn+MhEVkO456CmTtT/3uBFGB9AJhJYJ4eQYukaoAROBc2EhiItX8GytE+5vnq9RpR\nbeWcYBtjGDMAYybj3AQUnA4iuy7UYcxViCwHzgCWYe1iROqDIpdd0KK3fVCKeGCX77dhzJmI1KED\nAgs8jzELgkr3dID7STSNOpXUoCEZrPdBrD0V536Agts5wL/wChQki2vGeDXYwok4OxWxU6BgAtjd\nIPEEJvojDA7nXQRFZ4BrAfcO+O+CLAW3WhlXo7IO57eAi4JXAV5/SGwBSWLKpkHJvoipAlupk5f+\n2l9fk1uwO3+La3gQWzgBF/kDFH4y96lKzsXGfoxLLAA5CjiAIh4kyXyKEWIkSKL86lAsjQjNCBGg\nAsMghEbUxKoS+KwHFxQqONXeahCV4L2k/t4mcGsSNguMicBlg+GocvDywA3OwboE/LkBbmmAegdl\nVkFx3Ndf9xRjONwK0yzsaxUYZ4rfFMJVYyGZLuV8FFgH3t4Wf6oHG0bCGwdhVr+AoSLwBg7B6XIA\nPK8/vj8quJa6tzzWRhjjcO6sHvZOUFnKKzg3J5BsqPetNi4Im5HkE4Jqvm/BuTcxZizFxTu4445r\nOfLIIzNW34dERKhLzXVf7w2zGY/HO/y6y8tzt63tLWPaW0ur9vb2jlbiJSUlfZZWH070gdW+eH+x\nadMmjj/+eJYsWUJRURETJkxgwoQJFBUVsW7dOn75y18yevToTjeDUGdUUFDQ4+j6g465c+dy+OGH\nY4tGql/q4KPwh50OA48Em+Hms+Of8ObR4C8iZUUTxnrgBqx9EidrAIMpnIjE3wB+ixa/5KF3td8F\nVuPcr/LcixjG/ACR8ai1UD4hWHsbWrl+WvbZBl8Fg5oUXybRXd4fJQIPQzvHWmDFSGj5EgrUMt0/\n4lh7HTAK575C5rT+RjSlX4fITkSiQdHHOOA1rJ2Ec+dm+W7XWAXMwtrlOLcV1eVWow4KodY0F+MS\nR4vinkN1pq3BPnwS5z6Ngom96c7YhtGCopWnMPZNxNUH/wOv+Ch8ux94k8GbCN647ul5l4Tk65B4\nAZJvgHuVjqIlvwm8Adji4ZiiUUjhaFzhLhAZBoXDITIcCoemigHblmM2/QzZ8QgUDobCKeDVgDSD\nawYTxdKOIQZB+1UkgfPbwSVAfP0t+DE99l0ZJAFwWPEpCNjTKvRKj6L5giIUhI5CxziDUTZzLZrm\nX45eNW26BoQ0MYGBAgye0dr+hEs9bIyF0ohBfCHm0EkUdPa3MLAAhniG2gIYWSgMKoDBHhQauL/J\n8GizUOYZDh4iXDgZ9kgbqy5phDvXwAuboK7R0OCEkcZwiIVPWeETFmrTDsVvCuHmQRAthEQc2AJj\nfZhZCysT8PAg8PcHFzEwz8A7HjZeFTQV2BfyasnahDbsOJvuGlNBPY1fxbmXgwK5EYgcQaqrWCwY\nDF9Mz9mbJDo4uwmRzej1fmZw5mYxceILPP/8E5SXl3djI8Pi11gshnOuR4uokNnsyXpKRNi5cyfW\n2rxAZW8Z03wtrdK1q/F4nIqKCoqLi/NaR198oNEHVvvi/UUikeD1119nwoQJVFd3Tp1ee+21rFq1\niksvvbTbjSBsGPBhdAk56zvf594nfGLFP4WdF2ASLyKSwI74Bq72m1AxqdP8duE3YdObuOSCHpb8\nInAzmDkg21GT8IFYOwKRMYH5d6jXHEEqtbcTfZB8ETgqz71YDfwC+Db5eU6CQoPLUTXgSMJErLWt\nQBuuuFkFf+ls0eNorrQVmI4yqlumpFn85AotMjFmKs4diyZbF+B564NiIz/wdgxtnkaR0nM2Yu2v\ngd1w7hy6s7OrCcGpMqcOa/fAuQNQcLoMuBZrT8K5s+k+aGhBbaRmYe1anNsWVOYfinOHAkOw9ruI\nJBC5E9X7hqEPdXgca98EsxHn78B4I7CFB+LbT4G3P/hvY2MXIlik9CqIfBEkCcnZEJ8F/tt43jqc\nvx1J7gSvHFu6O5TthSveA0omQHwtZuNlSGwD9DsMhlwCyXpoXwyx5RBbg3FbsNKIuBZcshUSrWAL\nMMUDoWQI0rYFYtvBT0D1QVBzNBSUa/vggi6TLQXXDhsfhTU3QmwHFA2H8kMhOp+ItOHaV2lJlsSD\nM5XyAJiIGimtx7AIWBNoSovR4YBnYUoVnDgaxvSDiNVJBKI+tCShJQEbonBvHdS1QL8IHLsbnH8g\njOoHhV1OZXsSVu6AFTtgdQOsa4J/bYU3N0EyqUDVAs0OSgvgiCGGQ2uEfatgr/5QkgUrNcTh7rXw\n+HpYuB3qEypD+ISFvS38w4dFAsMicNJw+PFo6Je2rOYk3LMJLk14rN9Dfy8TjwAAIABJREFU8Mc6\nWDQK3jgetuajqw7jVXQQdTU6BFiPMa8CL6Etiocj8mmU5c8E5l5A1bhP0tkVJIwWjHkIkb9grcW5\nw1D9dHrK36es7FxuvfVSDj30UMrKyrIWXMViMay1PVpE5cNsxmIx2tvbKSgowDmXVxHVf8LSKpFI\ndEgRwsYEfZZWH0r0gdW++ODDOccpp5zC4YcfzsyZM7t93rXg6r8VjY2NTJq8HzuL7oHiT+k/W/+B\nab4UiS/AlI5UmcDQkyBSDYkGmL0rJH4N9JSOA7Uk2heRMpRdXQLUYe0WjGkJdJ2tQBnasnM0vl+P\nFiadilb/d62w7j4Z8yTwCiJnoUC0FeW2WoFWtH98c1Dg1Iq272wLvh/B84bj3CBEqoEqGH0vnBL2\nmE+LB1CScjuw4ksQz6eFZwvKof0L1eaB2lKNx/d3RxWCQ8nNmkax9pfAMJybCfwTa5cish2RZBdw\nukuGZdVhzA8DHeoFaHHQHKxdj3PbMWYUxhyGcwejqsqusgCAi9C2nVMAsN4GnL8NbCVe5AB8czB4\nB0DBVDBd0pSuHRJ/h7afg2wC44PEoaA/XvlkXOlUpGQKlEyEkt2hIM0gvm0FNDwHLa9iYkuR+Frw\no8p82kJItmOHTYfKCbjSkVBaC6XD9LV4MLRvgZ0LoXE5NK+G7fOgcQkURNTdwoXw0iiT6pI6hayq\nVwhekepVYw1EXBKH8ug+ClBDJzM/WFIJmlIXAxIQstEALLYL+KKsqS9QaHUqsPr0EUmZYBmjm1hW\nbDEixJMQTwhxX4FpxIOKCFQWQ/9iw8ASGFwqDCmHphg8sRJ2tMHwKjhiKnz3aNh9OLTF4O9vwpPz\n4a3lsHmnzj+iDKZVw8GDYb8qmNxfty2MuA+v1MOj78EtqyHuoMRCmw+TK+C8UfCFGqjIkRVe0ASX\nbzM8OExI7mORHQPhjU/D0ingerr3bQ+uwQqMiSHSgLXD0q7bnsGStZcA09GudmFswto7cO4RrK0O\nfmO52NdXGTPmEV577SWccxnBXVg0G41GKSoq6tGqMJf1VOgKEBIa2Sytsi033yYAPVlahZ8XFxdT\nVFREaMUYdtHqs7T6r0YfWO2L/0xEo1GOOOIIrr76aiZPntzt83g8TiwWy2vE/EHGo48+ymln/ppo\n1Ttg0hgEF4fGK7Cxv+Ji67CDDscNPwOSLZhFZyLJteSnLV2Kds25lMw+hglgBSkD+A0o0xnF88rR\n315gdt7xHrSferqvpUIFY0owpgBjChEpxLkIyqKUB9vbn7CsxJiFwPNo56g0pmX8b+GkWPdNvR/Y\nMQR2CiZuEfk2nSvaHZqGX4S1G9AuU21YOxgYi3PVwNMYc2yQoswntgIvY8wi1Pc1HsgCDkUZpNHk\nfkjHUROiF9Dj2wYMxJiTEfkkqm2ozPLdDcAdGPMcsC6wGBsAbIbC46H0BrBDun8t+TbE78O4lzFm\nHS5RjykcjO33SfzSgyG+BrPjDkSSmNofIoO+DfF10PgcNL+OTa6AZD0uvhPEYSvHYqr3wB8wFQZM\nhP4ToKAMVt4NC34D8QbwSjFF/TCeBb8dl4hCPAqFxZiygZjKoZgBI3D9RyCVw6GoAlq2waInYM3r\neusvKAI/Dl4xpnwgpqgcibUgO9cSCY4k6BkPTfYj6FcLPQWcItDqQ7GnZyXqKygdORiG9AsArChG\njiWhNQat7dCSNjaKxmCXITBhNAyogKpKGNQf+pWlprJiaI/D6g3w/DyYswBa26DAg5JifTUYmluF\n8mKYNAKm7QZ77wp7joJxQ3WeMBpa4KE34Jn5sGA1bGtQdndsORw0EFa3wqvboDximDRc+Oon4Ouf\ngEgB1LfAr/4Bj7xp2NYqHF5t+PZw4aiByhZnijYf7t0KvywsYN0ePm5AIby5H7w9HVoqUEcA5aS1\ns1oL2pFuECLbUDOus+idb2t4TV+G2njEsPZWnHslcNL4JiqT6SmEsrLvc+ONF3D00UdjjKGkpCQj\nyPR9n2g02mOr1VzMZjqbGRbkhlX5PcnHetsEIFeBVtdmBOHym5ubOxjkvoKr/1r0gdW++M/FqlWr\nOOmkk3jkkUcYMKB7QVNbWxvOubxGzB9UiAif+dxMXl14IMmKn2eeKbEWdl6ATT6vej6/Fcze4OaS\nD5uh1eXX4Nw9ec2vVlVfQ6t2u9vEZI4daMebo4D98vyOYO0DwKbOvqZZ26lGoO5naDHVH3FuIJqy\nX4W1O4PuTUV43ujAzH8UarWT/kBdA9yMMV9AZHrXNfD/2Dvv+Ciq/f2/z5kt2VQSQg29V6VIExEV\nRQULWFBEsaB4Va69d732a0MsiL037AVEsAJKV+mh9xBC6vbdOef3x9lNQjpeQL+/V57Xa18sO7sz\nZyc7M898zvM8H6PN+wUh/sQE3geQsmPMDNUdKV9B62K0foqqo6kURmv6NZa1DtvORYimCHE8Sg0l\nHrIu5dUxY1r5alYu8AZCzAKxGa0KkVYvNCPQDAP6mxsa9SaCm0GmoV3/Bb0dIt9gWWuxo7tBa6yU\nvqikY9BJR0JSP3CU+72Ht0Pe27B3GqgCiHqNLMCRhGx3JiqjbxkpTWwOoQLY+R3kzIWC37FCu1DB\nAnSwCJHaBNG8G6ppd8T2ZegNv5mqaUIapDQ1ZDXqR0a96LAPHQ6gg36wo5CUhmiQCUmpprCqNeTv\nhtztpUMVmBO8G0NWNea2xxtbHq8i+qJlt1FJLvPcIQ1RjdoQiVa+UIgYcRUSWrSRNGwssaNmaJEI\nRMKaSBiiUU00rPEVayxpJAQiPjABwRCEItCuHZx5BvToDl06Q6dO4HbD/F9h1ixYsAA2b4CCQlNd\nbdNY0LedYGBHxeFtoG1jWL4VflkNs/80z90ucDrAts12jusiGD9QM6IHpFVRLFy3G+75EuasAH8E\nzmoiuKSFZnADkNWc0pYWw9gcyO6O4YrrBCyUiJ3NQbdG6+aY6KoMzDG6EUM2b6BOqR6l0JgE2ecx\nkiOJ0bReSdWzCTVhMVlZb7Jq1ZLS6fmqiGP5SKu66FKrip4qKSnB6XTus/64iao2ElzTeqtDVQat\n8tXditurj7T6W1BPVutxcDFjxgyef/553n333SrF+X+H4Wrbtm307juYQPqv4Kwle9U3A+F9CB1c\nAkohZd+YtutITChPVb3DowjRC62zgNvqOKolwJ2x91dn5qmIPzD9yCdR9zirMEI8h9ZNMfZ+oPur\n4N66b0zsZwKys8BvYVkl2LYxHoETIQZR1mGpuipleawDXkOIc9C6P8YpvwQpd6NUSUzbewRaH4bR\nsFbUMj+OkRX8F5MMsAP4HCmXotRuTPODodj2cRiNacX99ydSTkSpWAsuMR8pNqFUPtLqjmak0f6J\ngSAqdjoLAW+DfhfEUmNUwobEXtDkBkgaCO72ZWYkFYXib6HgY2R4ETq8Ex3xIjO6o5seh258FLgz\nYdUTsHuuqWw26AK2D6l9qGABhHyI9CxkVk/slr2gWQ9o2gUCRbD+F9i8GFmwAXx5qJICsCxo0QES\nPLB+BYSD4HAaFhiNUBPiUbrlEY/9D1d4PckNgTCo2BXA5QaXM0ZOw4bg/VVIaYZsWSAtgRAxwhjQ\naAVpjRz0OCqNdocnktrQyd5dYfK2h8nZGKBgexBfYRSvV5OeDh07CnodpunR05DYrCxYtAjeeBN+\n+hmEhgSnIdQOCyIKzhgJ998I7dqUjWntenj0efhuDuwpgH5tBBcO1Jx2GDSuYpJl7jpTcV24wfyC\nx2fBRc2ha7IhqN/mwWe5sLwE0mPV3z6d4YViib+XRAcawMIhsOIwiFY8Br7FxFndj7l9qA5BYA1S\n/olSf2CychtgBBwXUNaoYX+wByFmofW73HHH7dx66614vV4SEhKqjbSKRqMEg8E6R1rFK5tx4lix\nCQCURVrVRoKrWm9tqGjQimtmq+uQFR9nYmJiaUJAPWE9qKgnq/UwmDlzJtdeey22bXPppZdyyy23\nHJD1aq158MEHCQaD3Hbbbf8Yw9VTTz3DQ0/Oxp9at+xVUfwcuuBOUGMwRGtnTP/YCCmHYNtDMY0h\n411+VmDI7OPUrZ8OSPkUsACl7qnz95DyPWDVfrjnITn5TrrYRgjgA9Y4wSuTId0X65cO7LawQq1R\nKitGbJtgNLmvAaegdV0DxsMYUv0Tpte7RohGCNEX0zO9K7VnSUaA/2DMU8kYTWsflDoeGIIhuNX9\nDRcDbyLl7yiVg5FPtAI5FcSQffNyIabpnAX6NSzHYuzoDoQzC5EyEpV4EiT0gdzbwPsJMqE9qtFN\nEN4C3llIewMqmAvOVKymg7GbHAuNB0HG4UZvGvbC5g9g6+dYvlXY3hyjEW3QEkp2gncvolF7dL/z\noCQX8rcgi7aALx/lLQC3B9mmC3TuhcpsBgV7ID8XsXsLVmEOqqgA5Q9gNWuESEhARSKobbuwEhwg\nBXZJFbpk4q0lzDS/RZkWNQ4hBA0aNKBdu3a0a9eOLl26cPjhh9OmTRvS09OxbZtgMEgoFCqV98Sf\n5+TksGLFCrKzs9myZQt79+6luLjY9JcXsT9bObZsuSSOBAcIgR22iQaj+7xHSnAnWQgB4aBCWoLM\n5i6ad0ygWbsEVv9WwsY/fagoJCWC5TBmK4cDwmHIbOFi2JgGHD0qjTZd3Xz5cj6z3ytge3aQSFgz\n7Cg46xQ48RhoXK74uH0X/Pd5+HIG7MyF7s2MLGB0b2hV4X41rwT+MwNe+Rm0gqgGt4T2TeD03jBx\nCDQvJ1MOR+HFuXD7com/dwKqmYJl/WBxfygsuwk10XVJKHUtZce6xhivViDEMpTahpQpsTi5fpjz\nkcTIjt7GVFnrYvKKYJI5vkSpbKRsjlK9SUubS3b2CjweDz6fj8TExBojrerSErV8ZTMcDiOEqLYi\nGg6H8fv9dTJR/dVIq5SUlNKc15o+Vz4Ptj7S6qCjnqzWwxzUnTt3Zvbs2WRlZdGvXz/ee+89unat\nG8mqDUopzjrrLM4///wqu6FEo9HSHLtD5bCMRqP06TuEDQWXQMqVIGo5mWmFyOmPDmWCnhJ7MYzR\nRs7Bstag1J5YDFNPtD4WrRci5RqUepe6EckgQlyE6QE+po7fJIIQD6J1M0orpfsgjNHEmgSA5OTF\njAjDB+XKZue44JsE8Ab7QLgnhphWN322EXgf4xqurEU2lOcP4PdY5bQIIRrEMlMbYDSsF6B1bXKH\nbcBXsWzKPTHt3mHAT0h5NkrdRdXxYD7gfYT4GtiM1lEs62RsezSmZeUipLwITTpavAWiL6gVoF/A\ncvyIbW8F4cZKHY7tOQWSjgNHOZ2qikLx+1D0GkSWQKQEUJCQCX0fhhanQGLs/UVrYf1bsPt7ZGAz\nypeHyGiN6Hgsqv1QaDsY0lrAmhmw7EPEll/Q3rxYiVJDOKYjbtEeUtIR/kJk2IsqKUGHQlhZTZEu\nJyoSRYdCOIRGB4JE8ktKhyscRnFQGxISEhgzZgxXXHEFPXr0IBwOE41G66T7O1BQSrFs2TKmTp3K\n3Llz2bVrF5FIhcqwAKfHgXRa2FEbFVGoqAIFwilxeBzY/igqqmjaM4M+4zrR9qhm5Czfy/JPNrBn\nZR4leWGatXEz6ORUBgxP5vAhSSSlWKxc6GP6s3tY/pOPvJwIbVrBWSPglBOgXy9T9QUjK3jyRfjw\nM8GWHZo2DWF0L1idI1iwSZPvg4xUQZvWmiFHQkkJfPwFWBruGgGXDDaV3YoIhGHKD4L7f5WEeqUR\nPcwPW9vAwoGwPQqZ88G5GSIZkNcXyy7EtpcjhEaIhrF0jcGY9geVIcSrCGGj1ONUfz7ahJQzUWo2\nUnpQqjdwVuk6PZ6pXHnlkdx//z1EIpHSDlZVJQQopQiHw/sVaaW1pkGDBjVeBwKBQGmua22/zb8S\naRUnzHVZfzgcxufz1UdaHXzUk9V6mAzS++67j5kzZwLwyCOPAHDrrbcesG0UFhZy0kknMW3aNDp0\n6FBpebwScygNVzNmzOCssy8GFDJ5JMpzLnhONDE+VSG8Fnb2Af0y1ffXNiQL5sWqr7kYApeKlKkI\nkQ5koFRDtM7ATKPHTVBpGI3Z7cC1GA1o3FQVjq0nUsVjOyYItSWgsawAWgdRKhT7XAJSNkCIdHq7\nVrGoCnlqPw8sTm8POy+ow577HROHcznQAlNFXoaUOTFymoIQ3VGqGyYuq/yc6VrgWaQcg1Lls7Ii\nxF37QuxEa38shH8oxvncOPa+zbF82jYoNRUjw1gJvIaUS1BqF0K0A85E61MxZreKF5Awpgq+EqQb\ndAQr+WjsxNMg6Xhwddq32h78E/KfRUZ+QoW2IdyZiKxTUY1PgcwhsOVN5KYpqJJNkNwaIcIQLkRH\ngshWfVAdh0G7IdBmACBgyXuw4nOsvauxC3ZBchpWn6HYRwyDLkfAxhXww8dYG5Zi5+9BpiYj0lLR\nxV5UcQlC2wghUYEyU5ww4aTo2By9wwXR2A1JXO4JZdP+gwYN4v333yczs2rtYtz5XJ2Z5lAgnuEZ\n75RUWFjI22+/zUcffcSqVauwnZaZy7cVwmnhSHRhByLIRCeORDcqFEHYNihFNGTTtHtDOg7LokWf\nTPZuKGLdnG3krd6Ld2+EFh3cHDkylf4nJHPY4CS01nw6NZ8Zr+eRuyWM1jDsKEHPrpplKySr12m2\n79Q4HOByS6JRRcAPrVvCy4/DMUdWnrB5/nV4+ClBiVdz4/Ew6VhoUMWppiQIj38nePxHCHfzEM0K\nQq4y91pxfCRgXWsIn4g5xuqCKEI8AFyA1qeUe90L/IjpfJWLEG3R+gyqnhHKw+O5h99/X0iLFi1q\nPG/H/3bBYBDLskhKqio+q9z3LikhEonUSlbjv82DEWmllKKwsBCHw1GnRAEoI8/1kVYHFfVktR4w\nffp0vv32W156yXRfevvtt1mwYAFTpkyp5ZP7hxUrVjBx4kQ+//zzSicurTWBgGFRh/LieN11t/Da\na8uIRJojHfNR9l6sxKHYnvMg8RSw9p3jE0UPIYqmoOwfqVu1dDVwDqZS6sJMhecDRQjhQ4gQQoRR\nKozWcXIZxUgJVOwhYtsyzSmFiE/clj03F/ZiDIluRhkJTqU8WRvquZcfqyCrx3jgp8atYcvFtXwf\nP0Y/Og+jh1MIkRwjp10xga216Vg3IsRktB6KaZe6OpZ32jCWdzoYYwSprtodAMZiWqkmAkEs63hs\nO55X26SKz+wFnkJan6HUJoRsgnaNRkS/R9vrkJk3odJvBJlkOkcVTEP4pkN0HTrqw2pyDHbTUdDk\nREiKNYlQUdj6Fmx9E+FbiQ55oUk3KNkBJXuwOh+H3f10KNwGm+ciCzehivYgmrVB9Dse1ecYaN8T\nFs+BXz7H2rEGOy8Xq2ljEo4fDO1bYa/fgv59JWrLNmxvgJSuLdBaEynyQYmPwF4/YFKnVKwgWx3+\n85//cP3119fytymD1rq0i1BddH9/FXFSats2SqlScqqUScCo2JLZsiyEEKXniGg0ymOPPcYrr7xC\nTk6OEaJGbYQlsZLcqHAUFYpAzNzlTnYSCdokNkwgs2MawcIwu1flg9Z4kiShgMaVIAj4FC63wOWx\nkM6YGSwYIeDTtOzkZtJjzRlyWln1bdeWEJOv3cHSOcU0zoBbJ8F5o6HijPanM+Dm+2BnjpEE3Dwc\nmlVxyOT74KEZ8ORq0FX185jWFnZO2s+9vQp4B3gO2G0am6iFWFZGrDvbKdSWOOBwfMyIERbvvfcG\nWmuCwWC1RtnykVY1tVrVWlNUVFSaq7o/Yf21kWCoe6RVPEtVa11tpFVVY6mPtDroqCer9YCPP/6Y\nmTNnHnSyCvDhhx/y8ccf88orr1Q5dXQoLo7l4fV66dGjP3v2vIghOhuAR7Ecs7GjO5CePqjE8yFx\nFDiyQEcQO3uiw4dj3Pi1Q8pngXdR6knqRnCLMXEzCRhTRM3u17LtfABsjbVorHo7R3ju3Y/KqsJU\nilci5XagGKUCSJkJtIulAWwC7qCs8lkTopig84Wl1VNDpK/FTF9WRTLjCAIfIeVslNqGEKlo3Q2Y\njxDXovV/qHyRXQU8bqb3ozuRrsNQznPBNQqscq7q8PcI/4Xo6B5wNYBoISK5PWSNQjcZARkDyrqc\neTfB+qeRe2ehvFsQSY0Q3c9AdTkNWg02Jc2tC2DO3bDzNwgFjHBR2dCwKYz+FxTkQvZSrD2bsffu\nxdm+Na7hQ6BFU+y1G9GL/0Rt247tD5LaszVKa+xCL3gD+HYXgwZpmcqdXW6Kv3wFNY7OnTuzcOHC\nv6ynO5Ca8jhxKU9G48+FEJUIqZRyH1K6P4hEIsyZM4ennnqKub/9Fkt7i0KCyzwPhSHBhXC7kdrG\n9vqxPG4aD+tG5tGd8GXvJnfWCoK7CmjeqzH9L+lEz9HtSG7kYfOvOcy8awE7FuWQkmYx+sqGjLww\ng8xmZv9Eo4p3/pvLZ8/toaTA5uJz4JpLoUOFxlXzFsGkW2HNeji7j5EIdKziEOj3HiyuKkjjEwGr\n74RIgyoWVoQC9mB6iX0N+BEiCdMN7xzqpmONI4jHcyszZ37MEUccUUrWpJRVErW6RFrFdc4pKSl4\nvV6EELVKUOImqppIcPkx1BZppbWmsLCQlJQUpJT7ZdCKX7vi466PtDrgqCer9YDffvuNe++9t1QG\n8PDDDyOlPGAmq/LQWnPzzTfTuHFjrrrqqkrL4xfH6oT7BwOzZs3ivPOuIxBYwb6dXnKBx5GOL1D2\nFoSrPSSdj7baQt4loD+kblNwUYQ4Ha0bUbfmAvFt34bpblVVXmtVCMcqls1in6uM5OR7K2lWx7hg\nRgJ4g0dCuAGmj3k+tl2Ccdq3xrbbYWQJLdi34vk+huDfQdXJCDuAOUi5DqXyESIdIQbEoqkykfIu\noDNKPYwh5+WxBxM79StK7ULK1mg9KqZ37YA5fy1Hyglo3QitP46N5RmktRRlF2IlHIftOBdcI0Du\n22mNyFIIPIJkHipagEgbAsG16HAeotPV6PbXgKsR7PwUNr+E9P6JCuQj2wxCdTsbOp0MGW2Ng+fP\nd2Dpq4i8lehICNl/JGrwWdBnOBTugWcug42LjA41VvkjEkE2bmj00IEAdix81NU4lWhxABWs3snv\nSYKAz7jxw7G3lXf2T5o0iUceeeSAXDDjmvK6NvEoP3VfkZwKIaqtlB5oVJyiDgaDvP766zzwwAMU\nlHghGkEkJ0LURjsdCK2RKLAVrowkss7oS+NjurBnbjY5ny3Gv7OIrF6ZDJjQlR6j25KY4ebXqauY\nP2U5+ZsK6TYghbMmZTDktFRcbnOzuOznEp6/aRcb/vRzxOGCW67SnHycMYrFsWYdXH4TLFoGx3aG\n8/rBqhyYt0GwYocmv0E1ldUvJBwj4OfTYNlAsMufL33AVmALlrUB294GWFhWKradiSGtJwOj/uLe\n/ZwWLZaxZs3vpVmoNRUaaou0KioqKo2JisdGuVyuWpsL7G+kVU1NAAKBQGn1tfy662rQqrh+l8tV\nT1gPHOrJaj3Mxahz587MmTOH5s2b079//wNqsKpqeyNHjuS6667j6KOPrrS8JuH+wcLYsROYObM5\n4fAT1bzDjyFB76PUetA+EBmg7wDaY/IPa7q7Xw+cgclKrOt+/QUh3kTrG6k5rqY89gDPACOpjuQm\nJ99bOQ0gaEEYhEiKTem3wURTpVO9095AiDeAHLS+A+PsnwcsQogctA5iWT2w7QGYUP8KhJEAUt6K\n1gloPQUjk3gnFr2Th5S9UGoUpsNOFYH8AMwAbsToXoNIz3iUcww4j6scRRX5FQKPIlmAihYjG52C\nangeNBgOVuzCuHcGrB9v8lClABVF9r0Q1XU0tDsWnB7w5cH8ycjsz1B7NyFSM2DIGPTAUdBlEGxY\nBp88jlw3D5W/B8egQegzz0YcdRTqww+wPpuOvXkzCW2akjSoG94l2QTXbMFyWjg8ToJ5PoSEhGQH\n0bBCSIElbAK+2JDKnYXLO/gffvhhJk2adMCPm7jLv3y7zeqm7pVSSCmrrZQeKtQ2RQ3w448/csMN\nN7BmzRoAREoSOhiCSDQmI3ChIzaNjulK05N6ULB4M3t/XEUgt5is3o0YMKErPUe3Q9mKmXcvZM3n\nGwmVhDn+3AxG/yuDLn092Dbs2Bjimet2sPznEhI9cMV4U9xduVaybrNmxy6NzxfLeRUms/WcsTD2\nPNOG9raXYWOfsnHLT8CxsTnh1CI4zgENNfzYEbnSRtub0NobSwVIB9piur2VL9tuxXTHuh1z41fr\n3gS2IsRCYD5aF2NZbqZMeZQLLxwP1F6Fj0dahUKhffSjFZsAxN9b18pm3ET1v0RaxauqFY1Y+2vQ\nihNcj8dTWnCpJ6wHBPVktR4GM2bMKI2umjBhArfdVtd80L+G3NxcRo4cybvvvktWVlal5cFg8JC6\nkffs2UOPHv3xer+mevNUHFFMvumtQAghHGhdAqQjZQe07obWnTAktj1xoinENOBVtH6SunWi0Ug5\nBdiBUlfvx7f5E5gOXIzRx24BcrAsL0r50TqEEMlI2RTbborJJW0MLMJ04LqGunXrimMj8BbxPkdC\nNAQGoHVfjIa1tu/6OxC/SbCxrGOw7dMw3earG8f3sf25Cq0FUo5DqW5IeR9apqOT3gRn7O8Y/h6C\njyP0ErTyYzUahd1wLDQYZgxWYCKr8t5D7H4W7VuJSMhAdzof9i5H5M5DCwE9zobC7ci9y1GFO5Ht\nDkcNOQcGnAZZHWHRDMSXkxFblqF8XpzDh6NHnQH9+qNeeQnrq8+IbttGUueWNLzgBGSCi/wPfyTw\n5zocLotWwztRsrMI39pcfHt9JDd0oUJRSvKjKGXC6iOxaX9XjLDGVQDXXn01d99770GRz8QJaJz4\nmT7yRk9aFSE91KS0JsSnfy3LqrVKB7B+/XqmTJnC62++RTSexmBZYNs4kt1opdFRGxU2tweuJAd2\nRJHUyAPK7KtAQQhtK1wJEjvW4MDpFjjdEsslQUjsQAS/V5HR3MUN4VNiAAAgAElEQVSoa1vQ67h0\n2hyWhMMh2bsrxCNjVrJhSTGXXyG45TaYu1Dz4ocQVJAg4eLTYeEvMG0qBIOgW1kwTJpWYj/0h9XD\nwbUeMueBMwoRB+QNhnD5G+VvMMkdj1F1+ofpUCflQpSaj5m5aYrWAzGmx50kJ09j5cplpUa92qrw\n8YSAaDRa6rb3er1VZm3vT67q/pioqqqYBgKBUs3p/7Lu8uOuj7Q6oKgnq/X4+7Bw4UJuuukmPv30\n00onqvI6qLpcZA4E3nnnHa677nl8voVUb+4pj/mYit9UDNkzkU2QjWXloVRJzPSUjGW1R+vOKPUJ\npmI5FkPinLGHo4p/BaaiexPG1T4co930lXt4AR9SliBECVAS2+5ezMRwIpbVLEZKG2OIaUOqI5BC\nvA2UoPVVmD5GVWEXsAApN6NUASCwrC7Ydl5sfI9Ss8lKxfbdLITYhtYKKY9BqQCmYcBTwIgqPvcT\nMBUhVsWI0rkodT7G2S/LrftfwFtgNUEIL1pHkI3PQjUcC2lDTeZpHHu/hF1PIHy/ox0eRJcL0R3G\nQUYPIwoN5sPi/8DGtyFUbMSi4QCy/ymoYy+AwlzE3Pdg+yq0AOdpp6NPHw2dO6Oefw7r26+Jbt9O\ncs/2NBx/Alayh71vzSLwezZCQrvTe+DfU0Lxil2U7CwmI8tDyB8l7A3j9+rSKqrTgogNbmFyO+OV\n1DFnnsnkZ58lNXV/bi4qo6LzvjqTk23bpdrEfxIprQlKKXw+H263u9ap4opYs2YNd999N19//TUk\npoDfC2hI8kAwjOzYFueQfqgdOajflmAXlpB5Qi+yLjoGT8em5Hz0Kzlv/IAOBBl4TV/6T+pLUiND\nDNd+tZ5Z136HP9fHWTe1ZNS1LUhMKTsu1y4q4olxqyjODXH/A4ILLwaHY9/9vWqV5tKLHGzYEMXn\n6wYd+sOwb2FnELZGYHRZjBkfNYR1p+5DWKV8BmgWy2kWmF/WGqRcgFILMF3HmgNHY2ZG9iVrLtcn\nnHpqI9588+XS18LhMMFgsMZIq1DI3Ah4PB5KSkqqbAIQX5fP56tTZfOvRloJISgqKqpxG3U1aFUc\nd9xwVU9Y/2fUk9V6/L145ZVX+PXXX5k8eXKVwnyv1/uXLjJ/BVprhg07ncWLh2HbdassmxilL1Dq\njWreEcVEKy0FsmPZo7swTn4LUGgdd/2Xf2jKEgDiiQB27DUnUjoRwhBd23Zhpt+TMZXIdEwSwMxY\nVuL4/dgLCilfBFJR6uLY9gsw5HQdWhegdRjL6ohtd8d0lGpKPLldiClAIVo/yL5dtSLAd0j5E0rt\nBDxIeQJKHYvJa41fJGYCjyHlhSh1C4a8TkWIFWhtI+U5KDUOY8iqWOXYANyNtL5HKS84m0FkM6LV\nbeism8GK6ZELf4TtDyMCSwxR7nw+quMF0OgIQ1BVFJY/i8x+CVW0Edm6L+qoidB7NLiS4PvJ8MVd\nphVSKABaI7KyzLztqpU4VvxBdHcuKf26kDn+BGRaEnmvzCC4bA1aKTqe2ZOwL0z+0u0UbcknvZkH\nb0EYf6ERn8bbkgIkusAfhgQBYV2mSR0yaBCvvfUWzZrtjzGmsvO+/L8VTU5VOe//DhPkgYBt2zWG\n2NcVb7/9Ntdddx3+iInEwo5AShKEI7iGDcbq1JboT79hr1lPcreWtLnuFJqeOZA9M5ax/vZ3CGze\nTbezu3DUrQNo3M1UIw1pnY0/18uZN7Zi1LVZJKWWjfGHd3bz8vXZpHgUT0+BE4ZXbKyief1VuO1W\nTSTcgnDkMugwFcbtqvwFpnWCnRPKveDDdIYbhmUVYNuLEcKN1i2AYzH9YGtCEI/nIT799G2GDBlS\n9moNM2NxwhpPf6nNdR9vOBE3PlWHeBVda12nSKtgMEgwGCytrtaUKlAXg1Z1609OTsbj8dRHWv1v\nqCer9fh7obXm8ssvp0+fPowfX5lUHaiLTF2xefNmunc/AkhDyhNR6iTMSbs6p7ofITqh9dHAxDpt\nQ4jPgVdiDvbqSHgUEw0VjP37K0IsROtrqJuEAKAEeAFTlR1Wx8+AMUW9Drhj5okAUrZCqZ6Yaf2W\nVB3Ib2AIax5a34nJm12AUjkI0Qg4Ea2PocwgVRW+BR7E7BsRy2S9ADiqiu0WAw8gHdNR9k6sxBOx\nPZdCwkmm0UNgDrLkX6hILnjaIewdaDuI7HiOIajNjjJ5RgCbvkD88Sg6fzkitTEMuRw9YBw0aA7+\nQvjiHuSKT1Al+ciTx6LOnAhdesPzd8NHz0E4hExMQAqI+gJG9+i00CEzWS+dEneqm1BhEGWb06gr\nQRAOmufOWLvR5CQI+6E4AB4JgXIdnjq2acNHn31Gx441twmuynlfk8kp/qgLDvUxeaBwoLXw4XCY\ncePG8c2Mmab3bCiASElGR6M4hx0JvgB6dTa6xEfzcUNoddVJCMti9aRpFC3MpnnfZgy9axDtjm+D\nEILsbzYw6+rZ+HJLKpFWpRRv3rWJr6dsp0cPeHoK9Oix7/Gze7fmuqs1s79z4W+UDhfvrjzoN1Ng\nY1Msqxit/SjlxxyHFtAco6tvv597YhktWszhzz8Xl97AxKMItdZV6oXj+tVAIIDH46lx9qx8NFRd\nI60cDkedYqd8Ph+hUIi0tLRaK7e1GbSqW399pNUBQT1Zrcffj1AoxPDhw3nwwQfp06dPpeWH2nD1\n5JOTue++Z4hG+yDlyhjRaoYQJ6PUicBQTOUyjl8wztoXgcr628rQSHkDWvvQ+to6jkoh5ZPm2X5V\nSrcBb2JyXqsiOF5M5XdDuQQAhRDN0DoXk3YwgbrJIsBIBL7HVJLjGrczMfuspn2zCXgFKf9AKR9C\njETrjZhq6buY/RtHFJiGtKai1Dqk+zCU53JIPBNkOfmBCkLJQ8jw26jQTnA3gFAeoveN6J7XQ2Jj\n2LscFt2F2DMPrWzkkRehBl0ELQ4zlbOF7yK/fwKVsxbZtTfqnKvguNHGij/5Vqy5X6CjYVKuOA/P\nZWOIZG/Gd8cTRFZmkzm4M1kXDiHn62Xkz/odFYrS54Ku5G8tZudvO9G2TZ/jUtm2KkDO5iANMyDg\nhfwSU0kNljvTOoB7qshJrW7qviqT04F03u9vQsA/BQez+ciSJUu46KKL2LhxIwAiNRkdCJrkBymQ\nbgee1k1oc/XJJLTMZMuz31A8fzWJGQkMvftIeozthjPBQfY3G/j26ln4dvs468aWjLquRSlpDfqj\nPDF+DUu+yeO0UYIHHgSHE3bnmEdODrz/nuaHNVR97/wd0CIDlnaG9d1AN8ZYLb/GnAfupO5mzjg0\nCQnPccEFR/P002UG1XgV3rIsHA7HPr/N+O/Tsiyi0Witjvv4uqSU1Zrl4tifSCuv10s0GsXhcNSp\nYro/xq/y466PtPqfUU9W6/HPwLZt2zjjjDOYPn06jRo1qrT8YBuuyk+NRiIRhgw5kezssWg9HlPZ\n/BT4AimzUSoXIdoDI9H6BOAopLwRmIFSr9Vxi3uBCzHRMYPr+Jki4H6MfmxQnb+bEEuA79B6Iqbt\najZS5qJ1MVoHkbIRpiNUS0w0VQZmin0X8EosdmtoNWtXGEPXXKTcgVL+cu7/ZZimCFMwFdmKyMUQ\n1IUoVYBlHYdtn4sxVsUrztMwsoALUOokhHgcLX5HyAxImohOPB8crfZdbWA2wncvOvw7IqktutXV\n0PQccKZC7jeIdTejS9ZCQgqEipF9z0QNvgw6H2s0qbtWw6e3ITb9gnY6EWdfjj79EmjeGr79EOu1\nh1Cb1pBwZB8Sr7kQ97CBlDw4lfCbH2MXe2l3+fE0H3ckGyfPYM8Xi3EnOzjymsPJXZnP2s/XkZgk\n6D4oiXWLfOzdFaJJYyjMh4IScEkIq32/zsXjx/PE009jWVYlYlrR5HQonfd/R9e5A4FAIFBjQsCB\nwO7du5k8eTJTnp+GioZM/m4kCJaFlehGSNBKocJRdCiKK9kQtcRGSUiHRDokJbtKIBRBWIKsTh7C\nfkUooAgHFf7iCNga2waHAxI8ApdH4kxykdDAjfJIdoaKCI+wywb1YQZsPgG6BKHvYkgugWV9zaOo\nAbgmQ6YXnFkQcULeMbH2y1WhCHMeWY1SqwE/luXkp59m0aVLl31+n0ApYa1owou/L25gqunGJ17Z\ndLvdtZLQusROxd+TmppaKm2piz+iPtLqb0E9Wa3HPwc//PADDz/8MNOnT680vXigDFfl7+xruuhn\nZ2dz7LGnEAx+h5keK49i4EPgG6TcGMsPbY/Wq4HjgPOBTEyFoqaT0s8I8Sha30XtXZ/iWIUhcJdh\nzFIVEcZM4+/AtG4txLL82HYxYMdSANpg260wxLQpNcsKNgJvY5oT9I29FgB+QsrfUWoPRkM7AKWO\nALqxbxX2LUyl9b+YlIVi4A2k/BmldmNZA7HtsRjzWFWasR1AXLvqQ7iHoBtMBmevfftZRvOg+HZk\n9CuU7UW2vBiVNRFSymnuihZD9k1QtAjSO4InE7FnKdqy4MiLIOhFrpmJKtyFPOY01Fn/giOGQn4u\nPH0r1q9fobVNypXn47lsDKqohJIbHiYyfzHJ7ZrQ/qaRJLZrzJpb3qNwyQZaDWhG74u6sOLDdWz5\neRttunpo3sHNql+K8RdHaNII9uyGAm/ZEBMl+GNktU+3zjz1wjQ6deq0j8npn+S8PxTE70BjfxMC\n/lcEg0GefvppHnjwIbQVM056kiEaNProrj1g9NlQXAjvvA45u0js05m0UUOQCS4CqzZT8uU8IvlF\ndBh3BB3P74unUQrujETy/tzB/Ms+IClFctnbA2k3oKx97h/f7eCL55azdWUhKpgMuSMg3KNsYE12\nQZ8l0PMP+L0B5BbDKF/Z8o8yYd3ZMcLqw5DTtWi9Aq2LkbIBSjUD+gDdEWIx7dotZ/78H3G73aVV\n/LjBrTrZSLxAEDdH1TR7tj+5qrXFTvl8PoQQJCYm7nfFdH8jrZRSpVmy9ZFWfwn1ZLUe/yw8+eST\n7Nixg/vvv79KnVNduunsb/vG6i7699//EFOmLMDvf4uaSWcuZqr6WwyZdGBIo0aINITIRIgmKNU0\n1hgg/shEyueBjShV0dClMYaqaIVHBCG+BNbHOjjlI6UXCKBUMLbdRKRMR4hMbDsDUylNQYiPEKJ3\nTMqwP1iBicLqhJR5KJWPlM3RelAsnqplLfvnCwy5bwgUImX3mElqBPuasOKIAlOR8j2U2oGUw1Dq\nX8AcEC8hk8eiUh8HUsD/JjLwJCq8DpkxENVyEjQ+FWTsQqaisOlx5K5pqMBuZPdxqF7/hkaxilHR\nFvh0JBRvAh2FSBg59BTUyePAW4Q1/TnU5mw8Q/rhuWY87uFH4X/5I4JPvUp4+y5anj2QttecROHS\nTWx69HP8O/Lpc0E3Wh/djAWTf2fX8j0MOKkBzgT4c04REpu0FNi9y2hS3RaEbLP3XML8xRNcTm6/\n6x4uu/xynE5nJZPTPwmHmvgdKBxq82YcSiluuOEGpk17CdyJEI51OEtKhgQPXH4VtOuAeOx+2LaF\nzMtOo9mt43A2yyT3hU/Zfdc0EtLdHPXcWbQY3qV0nfMmTWfDGwvpd05rzn2yN4kNyr6TvzDMaxOW\nsOLbIsK+MZib1HJwRKDdC3BebuUBv2VBQEJeFBlNR6nGmFSAXlS+ydUkJr7BlVeezH333bPPkppk\nI/HzdSgUoi6tVg9EpFWc9KalpZW+Hl9vXSum9ZFWhxT1ZLUe/ywopTj//PMZMWIEZ5xxRqXlcXNH\nPJz8YLZvDIfD9O49mM2bJ2GMB7VDyluB2Sj1OKZ3/WaMbjQH2BOLmAqidTBGLoOYQ8qYiQxdiScC\nCMx0fPwhEMI81zqCIcN90ToDQ/rSMRXa6k6Ce4CXMf2/e9fyTfYAi5FyUywBIBob2zGY9oy1VYLD\nwAyknIdSuzEGtTyEOAOtH6PqdrC/Yiqwy2Na16uAcZgqdRybEPJEtNoGDjdYHkTrK9HNLwZPuYuw\nbx2suR5R9AskNkIfcQN0HQeulNhqZiDn34bKW4vsewrq1JuhbV/4Yya8dDmEiowuVSlc3TviOulo\nwgv/QK9Yg45E6XTb6bQcP4Tshz9n90fzsSw4+qa+WAkWvz21lL1biul7XCpBv83mP3wUF2uEMM2r\ntDL/CqBjI9iWJwhHNVEEgwcO4Mnnp9ZqoPon4X+Jhvo78U8wir344ovcdNNN2K5ECJRAQoI5HZw4\nEo4+FvH6NNiwloyxJ9Ds7otwtmzMzlunsnfqJzTs2YzBz55JZm/zuy/etJfvTp2Gf0cBFzx/BP3P\nbb3PuW7hB1t447IlRAJtsaONMLMcJUgZRLXaDRdFKw/wB4y/9KMMWDcawt1q+UZFeDzP8O23X9C3\nb999llTVWCKOeHEhFAohpaxV7hUOh/H7/XUiilXFTsW1tBVvsPYnKqu6ddeE+kirv4x6slqPfx68\nXi/Dhw/nmWeeoVu3bgQCAXbu3EnLli1LXaS2bbRYB7t945IlSzjxxLMIBL5nX9JUHfwIMThWcTy/\nDu8PA0swrv2zMVVKN4a81nQiK8TkkR4NHFmH7cSxBvgYuAjTPjWOAgw5XY/WhWgdRsq2KNUNY8zK\nAn7EREvdiomsqogo8C1S/oJSuxCiOXAyWh+HkRusR4jrEeIIlHoBM+2/B3gUKeegVElMm3oZVZPp\nt5HWIyi1AZEwEKLLIaEJuuvz0HCoMURtfxW5/QmUbzOyw2moPtdCs4GxSCobFjyCXPUiKliEOPEq\n9PBJkNEc/MXwxjWIZZ9BZhP01ffA8NHw/Vdw3yQoKcCZmlTq9Ff+EEIKVNTM2buTndhRRTRofpeW\nA5wucFiCxGSBt1CRngrHDoRv5ggaJWpCYcgphlQLSEzmoSeeZsyYMfh8PhISEuqJ3yFAvOJ3KLvl\nVYdPPvmEK664Eq8/AChwJ0CLltDzcPh5DsJbQoNRx9D8votwtWjM5osfpPirubQa0Y2Bj59OSmvT\n7nj1tPksuuUzsrqlMuGNQTTpkFK6jYIdfl44ex7b//QSCbRF68ZonQzNF8PEnMqD+h6jbAJ4uSE4\nA+CyIWzB7sHgP6mKb7KMli1/ZdmyBZXIYDx8v6ZIK7/fj9vtrrVSX9dc1YqxU7Zt15jtGo+cqgsR\nro+0OmSoJ6v1+OeguLiY1atXs3r1aubPn8+sWbOQUrJz50769evHJ598UkpII5EIWutD0uHqxhtv\n5+WX1xCJ3ImJdant5LIYQzzvx5DP2iHlB8APKHUTdY+mysZoQi+isq62JvyICeUfgBBbgIJy8VTd\nMAkA1cVTzQZmYdo0dsIQ1Nmx/NRdCNEYQ1CHVTMmL0JcHuuilYLW25ByEEpdCZxK5UYEecDNCOsr\nNCDSrkEnXwpWEzPFn38d+F8HZzrgA4cb0ecadI8JkBi7ufDuhh+uQWz7FlIboUfdBkeOBVcC7NkC\nr14Ba35G9uyDmnQ3HHkcbN+MvP1S9LJfSTlhIA3v/xeOts3ZPfFB/F//SKP+7eh+58kU/LGNNY/M\ngEiEEff2IVAcYt6UlSQmaibc1oBPXixm8+ogF4yG7+dKducqOjeCFTugoQOKcTD8xJN47JlnS42F\n5WcP/i857f+ONskHAv9Eo9js2bO5+ZbbWbtmpZlB8LggamQqwmGRcmwfUo7rg/S4yZ38IdHtuXSd\nOJi+9wzHnZ5I1B9m9pjX2fX9Wk66sRsj7+iG021+S0ppZk/O5tM7VxEJnIzW/cG1Bjp+CWfvLTcI\nTMJcm9j/pwNnlRvk50BOGogmkDckVnX1AyuQ8htOOGEIn3zy0T7fK+49EELg8XiqJKy2bZdKBmq6\nYdufXNXyJifbtnE4HDWS4f2pmNZHWh0S1JPVevz9mDt3Lueeey4FBQV07tyZrl27llZU161bxwsv\nvFBlhyufz1dlm74DDb/fT+vW3fH7fUAUKTsD/VCqD3AYVRFYKe8DPkWpJystqxo2QtwBJMUSCOoG\nKWej9a9ofTVVZ7bamHar64EdWFYJtu3DhPQrhBiK1odjqqx1jaf6GvgxFm+VE2uvOiJWQa2JnK/C\nyBBWY849XkxFuaqMnRlI6y6UWoX0DESl3ACek0CUI2+h3xGFV6NDS8DTBkJbkE16oQbdB62Ogx3z\nEL/ciM79A9n9GNSpt0C3oabKum4B8s1/o7atQA47FXXl7dDlMMheibxzInrVUtJGHUfGPZfhzGpM\nzr8exPf5DzQ6og29Hh2NHbZZPPENfNvzOfnO3rTok8H0K+fhz/Mz6f6GLPklwC9fljDqBEF+gebn\n32BwW1ixQxAJa9KdkkBSAyZPfYmTTqpcnaonfocW/1SjmFKKzz77jKv+fQ3FJSWANDMEDjfIKNJl\ngZSoYAhLaIQlSWmbiatBEgkZiYQKfeQv3kRSQzcn3tAFh8syvkQBOWuKmf1MNs6EpoT948G1GzLn\nQ/JWaBqEdpQRVdi3yhrHR5j78k8x0n0A4UDkt8KpCnjvvZcr/b7jemGn01nluVtrXZrBWpsudX9y\nVeMmJ6016enptZLb8pFTBzPSKjExsZ6w1o56slqPvx8lJSXs3buXVq1a7XNh1lpz7733IqXkxhtv\n/MuGqwOBefPmcfrp5xMIPIKpnC7FsnZh2/lAuAoC2wIhjkHreE5pXZAL3IyJs6pNUxqHQspXgBBK\nnYOptm5CyjzAGwv9dmNZTVEqC62bYqbk05HyVbS2YkS3tv2XD/yAlGtRai+QgKmiXA+cXsPnioGX\nkXI+ShUh5akodS7GoPEO8AhSXoZSj2EI9D1Ix3tGEpA6EZV8JTjb7rtK7/tI772o0FZki/NRbW6E\npE4Q9cKqq2H3h2AJCPsQQy9En3E3NI6t47fpyOl3ovZuQ46ZgLr0RmjeEv5YhHXPFaj1K0k/bwTp\nd07A0TidnCsexv/pbDJ6taL3Y2fgSHaz4MLXKFqzk2Ov7UGfc9rwwcR57Fyex4U3NMTh0rzzeD6d\n2ggG91G8/pGgbQNAa1bvgi4e2KbdnHnOudz38KOkpKRQHQ52XNvBQG1h8P9U/B3tnWsbT8UM3Ugk\nwt13381LL70E7hQje7EkYEPbw+Dsa2DLavjsOSjaizy8B7Jta3RhIXr9RqyCPaA07hYNkU4HaAEa\n7HAU/04/OjgG6ACuFdDxGzi7oGxAn2EO2TYVBvopMDr2/F3MRIsCkhrCugGkuH9j0aL5tGy5701s\nbefuuNwrPh1f0wzD/uSqFhcXl1ZMa7tmxCumBzvSyrZt0tPT6zNYa0Y9Wa3HPxu2bTN69GgmTJjA\nCSecUGn5oQwn//e/b+Ddd7cSDN5dYck2jBNhKZa1E9suwGhRUzF5hCdgCGICpi2qO/Y8odxrCZjp\n/7kI8Spa34DRdIYwsTHxhxfwIYQXKUuAEpTKR2tzYRGiIVJmYdvNMaamJkB1FQcbKZ8DWsZaq1as\n4K0FfkbK7TE9aSeUGoC5ajUEvsJcxR4ABpb7nAK+QspPUGobUh6OUufH9kPFi8kmjGErAiKCdHcx\nVdSkM0CUq1CoMBTeiwy8htIRRLsb0S0mgisjtlzB5ieQ259GqTC0PxW56ydU8U5En1PQKY2Qf3yJ\nCnkRE29Cj7sCUhvArz9gPfBv1JaNZEw8g/RbLsRKT2H3lY/g+/g7Mnpm0euxM0ls0YBfL3iVvYs2\nMuiizhx7fTc+vXEh2d9t48QxaQw+2cMzN+UR9Ue4+kJ4Y7pkzx7F0Hbw/VooMp1UyUxK4P3Pv2LQ\noNpzcmubMv2n4lDOehxI/B0JAdW1v1XKaKGra+rg9/sZNmwYy1evM3IYFYWEJGjWDiY+BJtXwfsP\nI1s2x/PcozgGHoHasQv/qHGwZStdpl5Jk3OOLv1N5c/5neVnP4LtC6LDURNNkYm5h40IsFTV99zx\nyioY4hrFnPo8QF4nrN0d6dp1F3Pnfl+JwNWmc44T9EgkUqsutS5EMRKJlG6vriaqgx1pFSfPiYmJ\n9ZFWNaOerNbjn4+CggJOPPFEXnvtNdq2bVtp+aGaevT5fPTs2Y/du/+Naf1ZE+IE9ntgM1JmIoQC\nomhtl7rry1z2Uczx6MQQVAtzqJnXhHAipRNwopQTrRMwOa6pGGe+hZmeH43JOq0r/AjxPEL0Q6lT\ngfmxJgK5aK2wrL7Ydj9Mj/CqiMf3mJLK7UAz4GWEWI0hyONi3auq6l+vgJdi8VR7QHQBViMaPoxO\n/ndZC9RoDuRPgtB3CE8rdLs7oOmZIGMXJBWF7NsROa+BMxF95H3Q9TywXIbA/ng9rHrV7OOgH3nU\n8ahTx4LlwPHCA6ic7TS8eiwNrh+HTPaQc/Xj+D+YQYNuzej92JmkdW/Gr+NfZ/cPq+g1qg0jH+jN\nD0+vZNFra+nZ38OE29J4/s581v0R4PoJsHQFzJ4LyTGus9cPaQ4ojsIpI07g5dfeJjm57h2C4gTK\n5XLV6WL5T0G8clZvFDOoqv3tgUou+emnnzjzrLMIRCWEvSbDNb0JTLgfln4PP7yH4+jBJDx5P1b7\nNoRefpvI7feR0qcd3V+/loRWjQEI7yli+TlPUrxwL8p3AfvkOCd+AZ1n7zuJ8iXmXrh/7P8fUSa3\n9wPhtrBlIomJ73DRRcfy3/8+UmnsNcld4vssHA7XKdIqThSrkg7E5QJutxu3271fJqqDFWkVTzRI\nSkrC6/WSlJREQkLCQZ8l/D+KerJaj/8b+OOPP7jyyiv5/PPPK2mT4lOPwEGvQP3888+cccZFBAJv\nYYhibYgixIVonQZcWsP7FIakFmOc/q8DbTGSgLriTwxhnYipfNY+NpMOsBTYionGygAGxNIM2lK7\n3nYP8Gzs8xopR6HUWIyMoaq/wzbgAYRYAGTGKsjnAynADIR1ITjbolNuQngfR4f+QDY6HtX2Nmgw\nqKwRQNQLq69F7PkYUrLQg/8DHU43JFcpWPwE4vcnwOlCj30EjjwHtq2Et66HjQtMvmXUJmlwLzwn\nHUlw0QpCPy4iuXVDjnjmHDIHtOW3y95ix2dL6Xh0M0Y9fpflheAAACAASURBVATZ3+9i1n1LSM8U\n3DK5IV+8XsyPn3pxWDCoD/z0G4Qi4HGAlDC0PbRKh+krE3nkiWcYO3ZsHf4mlXEo5S4HEv9XjWL/\ny2xNVaQ0/u/BTi4Jh8M89thjPPLoY2hlG9KalAanTYSfPoad2bjGn4v73pvB5SRw1iWoBQtp/8AF\ntLz6VIRlobVm29NfsOGO91GB0ZhGHjEkfgFN5oBbm9NVB8qI6mzMxE84viOAwk6wcwLgIyHhOV55\n5RlGjap8Pqup2BDfn8FgEMuySEqqqnHIvuuqiijGq6ppaWml29gfE9WBjrTSWlNUVFTa0ap8pNX/\nJdnPIUQ9Wa3HgcUll1zC119/TePGjVm+fPkBXfe7777L119/zYsvvljlXfihqkBdeeW1fPBBDsHg\nHXX8xFZgPHAJ0KOW98axDXgCM0Xevs5jk3ImsAqlrqZyqoAPWI7pRFOAUiUIkYSUHbDtNGAeJllg\nSC1bKQI+j3WwKsCyDse2OwBfIuX4WKJBxXPLZ0g5FaW2YFkjsO3rMG1mK77vVeBqECFwNYL+30Ny\nuZisUC6s/Bfkf4dsfDjqyJiZSogKJNUZI6nnmhaqW5cjp45H7cpGXnYdasI1sHwxPHw7bF6LwykR\naKLeIMKSoBUqrPA0cJHZJpW8DYUESkwOZXKaJBRUqAikpUEoaMjp2JGw6E9Yvwn+eyrMXO9hcySL\n19+Z/j/nph5KucuBxP+vRrGKetLy1dKKXcYOVftbKNM5u91uHnvsMR566GFwe8wPNOCFBDdYDtx3\nXIf7qglEf5xP6NJJJDRJpce7N5Hcsw0AJb9v5I9THyGS1xIVPIuylI4AuB6F1vlmwkRgGEExhqiG\nMJ2Vs4FtacgIpc1KHA43S5YsoEOHDpX2ZU065/KRVnXRpfr/H3vnHR5V1XXx3zmTmXRC70WKdBBB\nQESp0hUBQTqCSlFAEaR8iryCDZWqIogUERWQjijYEF6xIIgNJFRROqGlTj/n++POhEkyCQkkkOGd\n9TzzEOaWOXPnlnX23mvtlJQ0pQPe2tCwsLA0z4aciqhy09LKarWmklnf/acfYxCpCJLVIHIX3333\nHVFRUQwYMCDXyarWmtGjR1O+fHmGDh2aYbk3ApXXXo9JSUnUrn0HcXFPk12PUyFWA/PQegoZ7Zky\n22Yr8Blaj8R/Ct4f3Ei5BMCT1v8DIf5GiHiUSkHKYsCtKFURwwHANyX9F7AMeII0ERXAyOttRMpd\nKBWHlNVQqi3QhMttUo8hxASEuMvjgpACTEWILWgNQjyF1o9h5A594QImI0wL0NoNUePBVAuZ8gSK\nFKg5F6LrIv4air70I7JCC9SdL0Cphni+KPwyE/HrGxASYpDUpr0NknruX8Q7/dBHdiF7DkI9NRGK\nFINvNxPy/OPgtFJi9liie7QhZcvPxA2ahMRFnQntUGj2Tf8a26lLNOpbmWJVovj+vQMknU5m9BvF\niCooeO3xOBrVgaE9FI9PElQpLHjqbsXYTeHc92AfXnr1jVx7+ASq0j4QhWJw2RM0NDQ0Q11p+vbM\n+aX9rb8sU0JCAoMHD2bj51+CdhuirDAL2OyI0qWQtWqgftmNSEyg7PBOVHqxP6YwC+5kG/sGv0Xc\n+h2oFImUFoxyI4EKuQQlXMal78bQRmqMaqFTwHEgrjtG97yCQAxS7qZ06V/ZseM7ChYsmGHcWXVC\nuxpLKzCIonfC5K/uNaciKq/l1LVYWnnra32jtF7OFRRZZYogWQ0i93H06FHuv//+XCerYERqOnbs\nyPjx47nrroxE8XpFcjZv3syDD/ZEiMJIWQ6tK6JUBYxWhmUxwg6+hFkj5Ui0TkTrp7L5KRop5wIX\nPUb5/pCEEbk9CZxFykS0TkbrFEBhMlVAqSpoXRHDVupK9YO7MURTT2P4qG5Gyh9R6jRS3uIhqHeT\neQereIQYgdYmjO44jVDqGaADGX1bLwAjQX6OMJVCRz4PYd1B+KS6458E2wLQTkSx2uhOy6CIT6R1\n10zE7tchxHQ5kmoKgaSLMPdh2Ps1pnYP4B73EpStAH8fxDSyD/rIfoo9P5iCT/VGJSRzqtsYbL/t\n47aJHak5ujWHPviJ38atpkztgvRfdBeHvjvD2tE7qH1HGM++U5RXH4/jz5+SefNZ+Ol3+HAdTGoj\ncGgTb/8UxtvzFtGpU6crHOucI79aLGWF61mmc7XILHWvtUYIQUhISL4ipVkhK4HbTz/9RNv2HXBr\nM7iSwRwOTitEFoDQcKQ9Ae1yYSlRkLCyJQivUpKkP4+Q9Mc/QANwN8MIodqAz6HgcWMeHYVxa3EA\nViCpGMQ/k2FsoaGf0aCBZNOm9X7rSrPKjl2tpZXT6SQ8PDxTgpsTEdW1Wlp5t/f1efWK7CwWS0Bl\nTa4zgmQ1iNxHXpJVgNOnT3P//fezYsUKSpYsmWH59YrkDB48nE8+2Y7LVQ/4BynPY9hFJWPcsQth\nMpVF60oeIhuO0U60K4Z6XnO5taq/vzUGGX0bg2gWAs4hZTLgbdfqQohopCyC1kVRqjBGNCMew7x/\nMGk7VV0JCRiWUicxalhLoHVbjE5ZWXXwMupspfzFM65ovA0D4LZ06+4FMQL4GRnaBBXxPFiaXa5H\nBXDsQiYPQzn+gpJ9wRUPlzYji9dF3T0VTu9C7H4NQiS6lyeSagoBhw0WDIVdq5GN7kY99xpUrQWJ\nCYinH4btX1OofyeKvPQEskgMZ5+eTuKiNZRrX5uGs7vjtjvZ1uVdUv6No9fcO6nWqhTv3v8NZ/df\nYOLc4oRHCiYPPEPtKvDKKMXD4yTKpnmnm2ba9ghs0VVZ/OEnlClTJgfHPPsIdKX9jRSKpVfepyel\n/upJgYBsJXulOme73U7Hjh356Zc94EyC0CiIKAxd34B/d8N3bxn0oE5TsCZgSjiLunAO7bwF7IMx\n7jE2pJyGKrAfimqPcwCgTFC4M+y6M8PngpuIiKX06dOc2bOnZ1zqqXO+kqWV3W6/Yjre66sKZNqt\nyouciKiuxdLK6/DhWzurlMJkMmE2m/PtBCgfIEhWg8h95DVZBfjhhx+YOHEia9asyfAQuV6eiUlJ\nSdx2WyNOn+5LWusmMFLg+zDsn44i5TmE8Bry2zFyZxLjGvReh2n/vnzjEmjt8JjvV0HrwhjEtTAG\nKczshr0F2Ak85VnfH5RnnDuR8pTHoqoCSoUBR4CXgRpZbLsFKdeh1AmPRVVvjJpXM/AqhmT4PaA3\n8DnSNB6lDiEjeqIiJkBIurat9u3IlOEox0Fk2SGosuMh1OMm4EqBX+8Cayy47dDgfnhqBVjCjVKA\nj8cjtr2HqFQV9cIMqH+n8f4r/4dc/i6RjWpT7K2xhNaoRMLqbzg/4hUs0WaaLuxHsaaV+XnkCo4s\n+YFGvSrTdVp9vl94kM2Tf6VpuyjGzS7MS0POsuvbZN4YK7DZNJNmQb87JO1uVTy+PpxBg4cz4bnn\n87zdaKAq7a+XUMxX5JQ+Wno1yvtAbSWb3XFPnjyZ16fNBmU3SGt0ceg4GXYsgqM/wYAJ0H+8UVaz\n8EX4+E2w98EogXJ67O8OerrQFYSiZ2HQPKMz3Plifj4xhYiI+bz22rM88sgjGZZeqT7b6xDgcrmy\ntLTSWnPp0iWAbJHQnIiovBFTr0DqSvA6FaQfi3cCFWwKcEUEyWoQuY/rQVYB5s6dyx9//MG0adP8\n1iJdD8/EH374gc6de2O1ziJ77gAg5SwMEdTT2f4cIb4HvvbUr2afgAuxAojzGP97I1oJwPdIeQCl\nLgBmpKyLUnUwUv/eiN3nwDcYhNWXVJ4CFiHEHrQOQYieaN2FjLWoAJuBySCigRRE1FPo8JFgKp52\nNfs3yJQnUY6jyHLDUWXHGgIrL86uQh59xohaN5oMlw4ij65AOa1we0fE3i+hcGH0CzOhWRsjSrtq\nCaapEwiJiaDE3P8j8t7GOI6e4PSDY3EcPEqDVx+g6rBmnN6ynx8HLiY8UjJw6d0UKBnGu52+IfFM\nIi++XwJLqOC53qepVFqz4EXF0EmS2IOKJb3gv/9YWPZnJAuWfEyzZs2y/btcKwKVQOWmUCynynvv\n60aP+3oiJ2VRO3fupMdDDxF39qxBWguVgwa94cf5YNIwcRE0bgt7f4YJ3SA+HuE0I2UEbvcZDD7h\nEU81PAv1EpDvF0GotFZ9Wnut+mD9+jXce++9GcbicDiw2WxZWlrZ7XaATGu47XY7drudsLCwbJPQ\nq7G0ulJJghdeT9WCBQsipUwlqmazOaCu4RuEIFkNIvdxvciq1ppHH32UJk2a0Ldv3wzLr9cDfcyY\n8SxZ8idW65hsbmFFiOGe7lZZdX/yhUbKD4E4lHo8B6NTCDEPrc1AFFKeQakkpCyPUvUwFBElyeRe\ngGGFtQWYAsQi5RcodRaT6R7c7p5AQ/xHdi8BbyDEdrSOBGFHhBRDF1wPIT7KeOtGpHUMynUSUW4U\nuuzTYC58efmFb5BHHkfZzyIaT0LXfgJCPGT6789hywBwW0FoRInS0L0/ukoNQqY9h75wluKvjyJm\n0P1orTn96BSSV39JpZ4Nqf9aF6RFsq3rfOJ2HOb+F26n5agafDrpV/775l469I5h1OuFeGlIHNs/\nS+SlpwSVy2kGjRc0LCeY0lYx4tMICldswLsLl1KsmL8IUt4iUJX2DocDu91OZGRktsadE+V9bttB\n+SJQBW5XM+7333+f4SNGGjWtBUoalnCJJ+D2FjBhHhQoDG+Mgm/Wg70VYEGIQ2i9G2PSWhX6/gH7\nLXDSDWYNTjOcuwMcXs/mk0REfMymTeu54470gs6sy7m854TVas0gYPIuj4+PJzIyErPZnCMSmhMR\nVXajsd5SAIvFkrpvACEEFosloM6nG4QgWQ0id9G7d2+2bdvG+fPnKV68OFOmTGHQoEF59nk2m422\nbdsydepU6tWrl2H59XigW61W6tW7k+PHu3Jl2ycvDgH/h2FndUs2t7EjxAy0rgR0zmSdZAzvVKPl\nqtZJHrGVxIjI9iVt9DQrKOAXYDWGoCIawyu2E5kLrPYgxDS0jkXKO1FqDNAS0CAeBjZDzJtANNI6\nAeU6h6gwDl1mJIT4RKbjdyIPP4pKOYJoMBZ922iweGxeLuxDft0HdekQovMkdOsnjUjqFzNg88vg\ndoLdTnS7u4js2gJltRP/8ntElY3hroX9KFK/PHumf8WeFzdSuUkJ+rzbGGuCkwVdvkHb7bzyYQlM\nJhjX/RSlCimWTdP8521Y+yU0LA91SktW/mFi/LMvMOLJp27ogyZQlfb+xp1ZJ6cbbQfli0AWuF1N\nC9zExETatGnDn3/tBxlidJIzW+DhZ6HvM/DzV/DCo2BrCa4+wA/ALKAJFCgFdZZDGx/KsLIIHOwC\nDm/jkr+Ijl7L1q1fUb162pKgKwnzvOeL1WrNII6y2Ww4nc401lDZ9VX1ZuWklNk6XjabDbvdTnR0\ntN9njFfs5a3XTk5OTv0twsLCAmqieQMRJKtBBD6OHj1Kjx49WLNmDUWKZDTDvx4P9F27dtG+fVes\n1hkYtaRXhmFntRatx3Jllb4Xp4E5GGS1DEa96VFMposolYzWtlSHAre7DOBtu2p0qoL2aJ2xbe1l\nKGA3QmxD61MYEZN70NoB/BfD+7Wpn21WI+VSlDqLlP1RaiT+/WGfAJYDNij3NFR8EUw+Rt/JscgD\nA1BJe5F1H0c1eBbCPMfTkQBf9oHjW5BNB6C6vATRHtHXuhdgy0xk/aaoiXPg30OwYi5ix5cIlxNl\ncxBRuhCFapQi6e8zxB8+T+1OZblzQGX2bj7OL8uOULaimUHjC/H9pmS2rEnCbIZGdSW/7FEkJEFM\nOLgVyNBw5syZT7du3bL5m+UdAkFpnx5eMmqz2QAjuuQVOeVHOyhfXK96+NxGbgjzNm/ezKBHhpAQ\nfwHCI8HlhGq3Q7FicHizUSpgLwrnWoPjUyjtgiEpGXc0vxqcHJL6XyF2UbjwVn74YStly5bN0bh9\nHQK8taDeWtX06fmcKPlz09LKbrenRnW9vq9JSUlERUUFlEjyBiNIVoO4OfDVV18xY8YMVqxY4dcS\n5Xo8YAYOfIyVK5djELwohCiAEAWBQihVyNPFytsetQAQjRCvYwioBmE4CFgxxFkpaf6WMgUhkoEk\n3O6TGDVfCilLAOVQyktMi5GxGYAX/wJLMKKrvmk3BfyKENuAk2htRspmKNUEo4uV9z7xFYZTwGSg\nvWdsMzw+qmaEeBqtHyZj7a4CZiPl2yjtAjkOIdah9R9QZTqUegzsJxD7+6MTdiBr9EM1nAyRHmGV\nUrB9DOxfiKzSBNX7TShZzVgW+y3y/YfRUqOnLIC72xnvTx+PWPE2Ud3bETNzPEII4vqOxf7V94SX\nLUxYkSjcFxNxnI9HuxRRMWaEFNgS7SiXptQtYbjcipOH7XRsBS88A8+/Ec65+Fv58KO1fl0obhTy\ng9I+Pbz1eJnZQXmJqMvlSiUi2W0veqORH493dqCUyhVngzNnzjB69BjWrVsLoWao4oQePiusAdwm\nCHEbxifpsbgA/NMA4z5lAkIQYh9Fi1rZtu1rKlRI615yJUGh99zyeql6xVe+UVUvckJCcyKiyiwa\n6yXO6UVVEPRUzSGCZDWImwevvfYaFy5cYNKkSRluAtdDQe1wOLjjjqYcPlwRqAScw/ASvQQkIKUN\nIRxoffllGBN6barMCBHieZmBELQ2o5QZI4UfiZGKL+Ax+v/HI9LKST3uHoynyeMYZHMrQpzwENS7\nUeouz9gzu4n+CMzzrPMPUtbx+Ki2J6OPqguYgpDvA+Fo04tg6nPZR9W1CqGHoUOiwXUGWbkzqvEr\nEFPp8i72LkD8/CxEFUL3nwfVWxrvJ51HzHsQfXQnYshz6IFjwBIKf+7E9MyDCOmiyNLXCGvWEMfB\no1zsNBSRkkSjZU9Q9J7qxL66gYMvr6XRI7Xo8HoTflt+gI1PbuXenkV4anZppg37l+1rLrBwOtSr\nBV0ejaBJ0y5MnzEnXyrwb1RL1vR2UDlV3l+vRh65jUAVuOXmuJVS1G1fl7/b/J1x4UoJbg29/NCF\n+VGYzlQAvGIr78tOyZIR/PjjVooWTWuTd6VxK6VwOp04HA6UUhQoUCDT75cTX9WciKj8EWFvyj8q\nKip1naCo6qrg94EUPIJBBCTGjh1Lz5492bhxI/fff3+aZVJKIiMjU7uk5IWi12KxsGLFB9xzz71Y\nrXcBddMsVyqzLX8BFgNPoHURsp4rGtC6PrAAIZag9aPZHOEp4B8MW6m5GC4ALVBqIFAJpbKa5dsw\nUv07UMoNHEWITii1hIz3ERswHiFWgSiBDpkHsgsIn2OukkCtQisrSE+EIyQSzJ6SgJPbkd8OQtkv\noB+aBncNMKxzlII1z8G2OYg7W6HfikWXKgcOB2J0D/jvRqLHDKLAxGGIUAsXn51J8ptLqPhwM2q9\n0Qtlc7L1jolYj57m4fWdqNi8DB92+4yjW//lucW3cHuLaIY0iEWn2Nm1CY78C3d3Def551/m0ceG\nkF/hjeh4Mwi5fX7nRHlvsViyrbz3HXcgKe1NJlPAjjs8PDxXxi2lpEzFMvyNH7JqUob28hugtc/7\na8xwbhBud92M26CJi1tPixZt2bJlM8WLX3YM8R23P/2Bt3GDw+FIPR+zGndUVBSJiYmYTKYsSWNI\nSAiRkZEkJiZeUUQlhCA6Opr4+PjU68HhcBATc7m+37fUJYhrR5CsBhGQkFKycOFC2rVrR9WqValW\nrVqa5SaTibCwsNQbXl6kYGrUqMHzz0/gpZcWk5Iymsw9UH3RACkPAEtQalQ2tzGhdV/gLQx7qPZ+\n1jkB7EbKf9H6Elq7MZkq4na3xuiHuB+lWmOUD2SGXzwp+3+RsqKnk1YLjNrZp5CyL0otxrDFSgCe\nArEJKW9FmZaBbJvW7F/ZwDUC9CfIqNtRpbZBxB1gOwzHekFsJShcGeIPQ7sx0GE8hHoI7J4vkEsf\nQ1tC0G+tRd3peQp+uRrTS0Mw31KKwr+swlyjMs7D/3ChwxBEciJ3bxpL0Xuqc2zFj/wxbCFVmpeh\n+5f9STqbwrSK71O4sGbJHzU5cdhG3yp/cm9TWDxL89aiEN5aHMnHy1b57ZaW3+BNp1/L+Z0+de/7\nt6/9U0hISGrHnWu9jnJj3DcCISEhhIaGBty4zWYzSqlcGXeozCQymcJl3egWjPmsBi64wOHP4g5A\n4HQ+wPHjG2nevC3ffrs5TbmN2WzG7XanZhD8NXbwEtXk5OQs61JzQkItFktqBiArX1cwnkHR0dEk\nJiamlp15ibU3Yx00/889BMsAgghoxMbGMnDgQNavX++3bimvFb1ut5tWrTrw228lcLk6ZHMrJ0K8\n5DH875WDTzsBLMAoGivAZXIa7yGnlXC7q2GInUqRlggvAw5i+Kj6pt0uAMsR4k+0diHE/Wh9P0YX\nLV8kIOUQlCoKojTobciQhig5BUzpXBGUC9zjEHoxIqwKqvQMiPJZR9ng30FwaS2ERYGyIdqMQrd5\nGpQbMbcb+thviCcmofuNAosFLl1AjrwfffB3Cr8xjsjB3RFScvG5WSTPfp+KA5pR642eyNAQdnSZ\nxblte+n2Tgtu71eN7bN/56uJP9BlaHGGTS3Fwv+cZPWs07w2UTCop2bQ6HAO/VuOxe9/QpUqVQLq\n4ZKd8zuzTk43UnkfiEp7+N8e96Ytmxg3fxxHGhxJfa/iLxWJsEaw9+69GTeYL+BkJEJIpIzB7Q4D\nCmKIUotj3KPKYDZ/S/Hif/D1159RokSJNOenL+nzPUd9S0tSUlIIDQ29Yl3qlZT8Xnh1D0qpbBH8\n5OTk1C5b3sitUoqQkJDrWqZzEyFYsxrEzYk1a9bw0UcfsWTJEr+m0rnRsjKr1OiJEydo0aItyckj\ngPLZ3ONZDD/TzmRsUerFBeAYRko/DikTUeoiRn2owGSqgttdFYOcluRKUVohFgOn0folYAcm09e4\n3WeQ8naU6gY0JvNky28YrWCPAA4wL4aQgWlXUQrcUxD6LbCUQJeeCdHpoq2nX0Kcm44oWB3VYC4U\nqgenvkL+8TQq4RCEmBC31kK/uQ6Ke6LAi15Hzn+RiFaNiZk7iZBSxXEe/oeLHYdCUgINlw2nWLPq\nnN9xiJ1dplO4bAR9V7anQOkIFrffwKlfT/PCsorUaxHN6FYHOXUgiU+XQIli0OWRCGrWbcebb85P\nfcAEkmrXe357Mwn+6knzo/I+kJX2/8vj3rRlE/NWzcPmthFmCmNY92EAGUgsn2A49rkKGd2yAGiC\nyaSB8yh1Hq3jMez3DOFVeHg427d/RcWKFVPPUTCItpTSb+cn70TMW+qQVY259xhkx1c1u5ZW3jav\nFoslg1VWUFR11QiS1SBuTmitmThxIhEREYwaNSpTwVV2BCnZMSVP/+AXQrBs2TKGD38eu/0ejJuv\n9yXx3owzvv8bsB1oAMQjRDxSWlHKhtY2jDasBZCyMFoXQalCQCGE2IYQoZ6GAdmth3IBu4ANAAhR\nAOiB1u3J3H7La1O1CqUuIGUvlHoEI7q7CizzwNTPWNU5C8GrYIpAl54OMV3TktRLa5GnRqKlQDeY\nA2Xuv7z81FfIXwahJBBZFC4eQpSrhO7yCKbVcyHhHIUXvUTEfYbg6uLzs0meuZiKA+6h1hu9CIkM\n47eRS/h30be0frYhLSbU58RvcSzttIGylcy8tOoW4i+4eObeg1S/RbF6geLPfdBnRDhjxkziieEj\nUy2V8ntr08yU9263GyDTTk758aF5vTrP5TYC1SEgL8edhsTKMDo06sAbL0/n9JkLHrJqiErhXgy/\nae/EWmEQ1otIuZsCBb5g48Y13H777dket6+l1ZXEUTnxVfWKqEJDQzOdwCYnJwOk1jS73W4iIyOD\nnqrXhiBZDeLmhdvtpnPnzjzxxBO0bNkyw/L0LRQzUzWnj0JlNzWqtaZJk3v4889YpCyCEJrLyv+0\nfxvXnPF/pRwYZQF10LoIRpqskOcVjv/r1oWUbwPVUKpHJusAJAL/Rcp9KHUeIQqgdQMMM38LWs/B\nf9vYJGAOQnwHhKP1UKA7hkOBF5+DmIAwtUSwCyU0lH4dCvVOK66y7kUe74Oy/Y2oOxldZTiYPMTE\nfgHxQzf0+V2Ieyeh734aTGawW2HOHRD/N7jshNWrQcSgrpjr1SDh0Wch8XI0NfmfOH5q8yrCYaP/\nmg6UrV+cr6bs4LvXdtFnbCkefr4E696NY/7YYzz1mGTKWMWbiySvzYlk4aJlGc4VrxL5RgtpMlPe\nK49yL/05CqSe34GkPA4q7a8vctNJIjs1z0IIPvjgA8aM8e34FwE0AZphtHb2PX47iIh4j6VLF9C+\n/eXa/CuNWymFy+VK9TjN6trNDgn1wtuNyl/U1useEBMTk9pSNSkpicjIyICKuudDBMlqEDc3zp8/\nT4cOHfjggw8oX758qm1JVFQUbrcbp9OZarPj6/+YW6nRCxcuUK9eQ86fvx/jJpwdOBFiOlqXBB7M\nwafFI8Q8oB1a+9aMHge2IeU/KBXvabXaEKPUwNsmVCHlVLQGrd/BsMgCI2/3JrAPKWuj1BMYDxR/\nEYIlCPEOWica3W6q/gThNS8vdl1C/NsHnbQVWeURVK0pEOoTwf3jP3BoJrJyS9QDcyDGYxB+fCdy\nWXdDWPXcx1CsHKyaifh6ESQnoB0uSrW/jeIdb8N+PpEj0z+jfp9q3DezKUppFrVex8Uj53llTSXq\nNI1kYre/+fWbSyyfC62awrAJYez+qzTLV3zKLbfc4v8XuY6tTf2Vl+TEDupGjTs3EajjTj8BDhTk\ndNw5aYGb1cT+wIEDDBjwKH/+udvzjvHZUhpe1EqVBmoAhQgPX8xrr73Ao48+ku1xK6VwOBw4nU5i\nYmKyvI9nRULTw5+llZfwhoWFpUZ7vRNMf+UKQeQIQbIaxM0JrTXHjh1j3759fPnll3z++edER0dz\n6NAhSpYsydatW1Nvqi6XCyFEGuVmbmLbtm08+GA/36vCHQAAIABJREFUrNYnuUwCr4RzwAygA5Cx\njWzmOAp8jKHYP4oQp9DajslUG7e7AVAbI4rhDwopX0VridY9kHIFSp1Gyvs9LgC3+t0G5iPE+2gt\nMWpu+4EYAOJzKDsLCj0CJ5+Gi4uQxZuibn8TClS9vIuz25E7+6GFG/3gQqja1njf5YLVA+GvtciH\nxqD6TjRaPV48i/y/NuiLJ7EsfAdht+NcswE2bkRoF9rhRpolMWWjSDqVhC3RRYtuhSl5i5nvVl/g\nxD9OWt8jKBgj+X2v4Lbb2zB33hIiIyMzfj0f5HYntJzYQV1Lz/tAbcl6NT3t8wMcDgd2uz0gx22z\n2dJMELKbbbrWif2pU6cYMWIUmzdv9LxzC9AZk+kQWsei1DGMaKukffuWrFy5LHWMWU1svNeY13/1\nSnWpOfFVdTgcpKSkUKBAAaSU2Gw2HA5H6mcEPVVzFUGyGsTNhR9//JEnn3yS2NhYoqOjqVGjBjVq\n1CAlJSW1jrVEiRJpbmrXo95s/PhnWbToW1JSBpB5ij49/sBoTToEyNhG1kAKcAA4jJTngCSUSgJA\niNpo3RaoQvYc6U4A6zBauNo9n/s4RhlCeihgFkIsAyLQ+mUMFwPfz1kPoh+YJCKsKLrRAijhk2J3\nJCB+7IGO245sOR7VbDyEeI7/wW+Qq/uhCxUzoqkVaxvvf7YA8d5ozO3uxTz7DUTBGFw7duLu2Y/I\n6qWp8cn/YS5ekINPzuPsgs8p07Q80eULciE2jjO7jhNTLIwKt0VhS3IRu/0S/fr3Zd7cd7P1gL1a\nQUpuRaGuFoHYkhWuraf9jUagOQR4z0e73Y7b7UZKmaq8z+1sU1aIj4/noYd6sn37d553BgJ9gDAM\nUekhQkNX0LhxST7+eBGFChUCjAmZ0+n0O0HwXn82mw2TyXTFSWl6EpoVrFZr6oQqISEhDcn1Xt8W\niyUgzoF8jiBZDeLmQlxcHIcOHaJGjRoULHiZZGmtGTlyJNWqVePRRzOa6Od1Jx2Hw0GjRvdw+HB1\njDam2YOU64A/UWokhhPAfuAfTKZLKJWM1jaEKISUZXG7y2BYv5QEvgb2ApMwal0zQwKwASn3olQC\nUjZCqZZIuQqtk9B6JeDri+gCpiLEGqAoWr8CdCNjWcBapGkUyp0M5iKgT0H9GVDpUUNE9dfriNhX\nEBUaobq8C4Ureg6UDbG8B/rwFsTAyegHnwaTCVKSkBM7oP/+ndC5swnpYjR9sD8/Bfe897jl+d6U\nG9cdrRR7200k+bcDPLCuD2XvuYVd07fz06Sv6fdqNTqMLM/uTXHMHXiAGW+8yUM9Hsr2bwFZT2xy\nu+Y5NxHIAqDccO643siPDgHZbYHrLTfxZppuBNGyWq20bNmSpCQXJ078S1hYVZKSGqDUHcCthIbO\np1ChHaxbt5w6depccWLj/d4pKSmEhYVd8VzyktAr+ap6f2eHw4HZbM7QqSo0NDSgyljyMYJkNYj/\nHTgcDtq3b8/zzz9P48aNMyzP6zq5AwcOcNddzbFau2FEIB0YEUxH6t9COJDS7nnfhtZWlPoHo5ZL\nIGUJoJynlqsURs2pf3ItxFLgElo/hyHM8sIBfIXRjeocUlZDqXsxWs6E+Wz/MlofB1Z5PudlhNgI\nlEXrV4FOZLyHfI80PYZSJxGRk9Chw0GEgW0FwjEcoiog3JcMEtvtPajp02nsj1WIT4chyldFTVgK\npSt7drkBMWMgIbfXwbzgHWTJEqgLF3Hd1wXOnKb2uucp0Lg6KQdPsKflOGJKR/DAhj6EF4/k854r\nOPblAcatrU+dVkXY/PYx1r18guUfreLOO+/M0e/nhcvlIjk5ObWuzd8DP7/YQfniRrVkvVYEgiOD\nP9yoCcK1tsDNbxOE5ORkvv/+ezZv/obNm7dw6tRxLJb6JCVdICTkAO++O4devXqlsWzzN0HIqaWV\nb6vUrK5fh8OR6mDhjdoGPVVzHUGyGsT/Fk6ePMkDDzzAihUr0nRH8cJut+N0OvOsvu/ZZ59j9ux5\nSBmOEIZlldaXX0YnKIvn31AM8hgCbAXuwahFzS4UUs4FojE6Y/2ClFsMIimKo3Ub4G4gJot9TAX+\nAqSH1L6K0T8x/bHZj5T9UPovRMRT6NDxIH32qy5BUndw/BdMAlmvN6rjNMOWypaAWNoZffIXeHw6\ndBxsRF9dLsSUB9G/fk3Y1CmYHhmAEALXpi9xPTaMwi3qUPX90YTERHJqyVccGTGH2wbfwT2vt8GR\n4mRlk/mYHClM/OIOilUIZ+noQ+z7wsm61Z9RsWLFLI9c+gd++iiUN00aGhqa2r43M5FTfkKgCoAC\nVWmfl+P2rXn2R0ozmzhlB/l5YnP69Gm2bt3Kxo1fs2XLFuLjz/Dyy68watRTKKVITk7O1Posp5ZW\niYmJhISEEBHhv87f10XAZrOlEVcFPVVzFUGyGsT/Hr777jteeOEF1qxZk+FGnNfpO6013bv35ttv\nL2C3Z7e7FcDfwAfAACBronUZl4CfgZ8w0vRhCHEvWjcn6xarYBDbFR5hQxHPvjYCrdKtdxoh+qH5\nARneDxU2BaTPJEApsD4PjreQBZuiKs4B7UAe6oOyHoS6PRD71iJqNkaNWQjFyhjb7fke+dKDyDIl\nsCxdgKxUEaUUzmEjca/bwK0zh1LysXZordnffxoXNnxPhyXduLVbLeL+OMWaexdTrWEBnl5h9CB/\nq/c+zEllWf7hqtQ6N7i2KFRQAHR98b/qEHC9hHjpkV8s27KC1prY2FhMJhNVqxqizStNELyWVt4O\nU1mdS173mMxKB3xFVd51IyIiAm5SFQAIktUg8ieOHTvGgAEDOHv2LEIIhgwZwpNPPplr+3/77bfZ\nv38/U6dO9VvflJfG5JcuXaJevYbExbXEsGXJHoT4AfgWrUeR1t/Ui4vALwhxCCEuoZQVKcuiVEVg\nJ1K2RKmBZC7wsgPLkfJ7lLIhRFe07opRs7oCWAi8AzyM4bv6CIjPkGHtUGGvg6lKut1tRNqHoaUZ\nXWU+FGpzeZntOOy5G9xxoFyIAZPQD4yAiGiYOQS+/Ziw8aMxjR6JMJlQx07g6vQAJhzU3vAfImtW\nwHEunj/vGYPJaaXr5/0pXLUoez/4la3DN9B5dCV6/KcSF0/Zef3+PTSu05rZM94mJCQkWw/87ESh\nAlW4BIEnAPIiUJ0NsjNBuNFCPH+4WScIXocAl8t1xbpUr6VVVFRUmuCGt1OVr4erw+FILUMIpPMz\nABAkq0HkT5w+fZrTp09Tr149kpKSaNCgAevWraNGjeyTu6yglGLgwIG0atWKhx7KKLLJ67Tjjh07\n6NSpG1brY/hX2/uDRspPgNMewdUlDHJ6BLiI1lakLIfW1dG6MkabV+/YzyHEbIToitFG1Rd/I8QS\ntD6ElOVQqg/QHKO7jC+2Ay8BjUDsQlrqocJnQcjtaVdz/Yu0dke59iEqTEaXGgnSZ19//x+ceRtZ\nuSuqySw4uQ35ywRU4nEoEIO0CEJXfYSpruEA4Fz6Ma6x/0fJns2o9OYwTOGhXPhqN/t7vkzFNpVp\nu6gL5kgLXw/bQOyHu3lqaV0ady3JkV/jef3+PQweOJzhT4zwS0ivNQrlrW0zm80BJ1zKbwKg7OBm\nmCCEh4f7Td/fSFKaFQJ9ghAZGZmppZXdbrR9vVKWwel0kpSUlKZ0wLfrlXefQVFVniFIVoO4emit\nadasGc8991xqZ5GVK1eyaNEiNm3alKuf1aVLF0aOHEnr1q1zbZ8pKSm0bduWGTNmULt27QzL8zqq\n8MorU5k5cxkpKf3x3yLVBcQBZzz/XsAgqCcxiKTLQy6rAenJqT8cA+YhxMNofS/wOVJ+gVLnkbIN\nSnXHsLnyhyRgJgZhBRFyKzpmOwifCK9yQfKj4FyFLN4dVeENsBS/vDxxF/JgD8NPtdUHUKbF5WU/\nTYA/Z0GBwpByEfPttyGGPoJevhL1/Q9Uf380xbo1BeDwhEWcemsdzV9vz21PNMTtdLOq2UKS/4lj\n0pcNqVAnmp2fnmHeIweYOe0tHuz2YJ4+8PNzfV9WCOTWpvlJAJQZ0peX+LbAzU2P0rxGoFuIedud\nZuYQYLVaMZvNmdalemG327FarRQoUCA1mOHbaCAoqspTBMlqENeGvXv30qNHD3799VecTif169fn\niy++uKKAJSc4evQozZs3Z+/evanWILmFI0eO0KtXL9auXZumltGLvIwquN1uWrduzy+/nEEpE1Im\nI4Qdre0YLVcdgBkhoj0dXWJwu2MwrtvtGOn4nEaav8KwtQpDiCi07gW0BzI7rueA14HfkLIuSo0B\naiBN3dBCoaO/AFMlsM5H2J9FhJVDVVkA0Q0u70K54EA/uPgp4rZR6PrPQ4iHZCT8g9zcDq2S0MM+\ngSp3QcolWDIY/vocUlKIubMGpUfeT8FWtxHb7UXsh47RZWM/SjUqy6W/L7DqnvcoVcHChA23E1XY\nzOezj7Hx9VN8smwNDRs2zOHxuToEhUvXF/lpgpBZPamvO4QvIfUKgAItEh8IE4T08GYQvFZc/gir\n2+3GarUSHh5+xd8kJSUFp9OJUiqNo4DWGiFE0FM17xAkq0FcO8aPH09kZCRJSUnExMTw3HPP5dq+\nk5KSaNGiBRMnTqRLly65tl9fbNq0iTlz5rBs2bIMRCOv06VHjx6lXr0GuFwl0boqUACjy5X338wI\nxI8YDgFPc7llqj+4MEoFdgJnMK7tW4DDwGQMhwG/I/O0fN2HydQct/tpoJbPcgViOOitCHMJtL4I\nlWdDsb6Gkt+Lc+sRfw+G6LLoVkuhsM8+dr8Kv72CvLM3qudMCPVEaT97FTa9jOg9At32IfhoNuad\nm3GePQdKUb13XSo/UB3ldLN1+Aaa9y3DI29WA+D9pw5x6FvFutWfUaFChSyOS+4jKFy6vrieE4Ss\n3CEAv+n7zNwhAnmCkJXSPr/iSkTb19IqfV2qv3UTEhJQShETE4OUMpj+vz4IktUgrh0pKSncfvvt\nhIWFsWvXrlyLdDidTu677z46dOjAqFGjcmWf/qC15pVXXiElJYVnn302wwMmr30ev/nmG3r2fBir\n9RGy344VYA1CHEfr0aT1UbUC3yHlnyh1DiGigEZoXQ/DSUACPwDLgBcB3yYFfyLlbJQ6ipSdUWoE\n/t0HDiPl0yi1B2QIsuQAVMU3QXqOj+sSIvYBdNJuxJ1T0bUeB+G5kaecRm5qj0o5AUM+hloe4ZUt\nCTGzDTruALyxEhp7nAc+mYuY9QzRQx9CliuJffN21K7fcCdbcdndFCsfQakqUdgS3JQqUJ1lS1cS\nE5OVHVfeIVCFS3lt2ZZX8Nci9FpwrR6l2UUwEn99caV7uPc39qb5M/tN3G438fHxmEym1NKBYPr/\nuiBIVoPIHfznP/8hOjqaZ555Jlf2p7Xm4YcfpkiRIsycOTNX9pkVlFL06NGD3r1707FjxwzL89rG\nZdKkF5g7dz0pKb3I2A0qc0j5LhCFUg8C25DyEEpdRMrSaO0lqCUy2fq/wErgVcCBlHNR6ozhl6qG\nYHTCSo8zCPEUWu9Gyj4o9SJwCRnSFh1aCF1jHZzfgDjxH0Tpe1DN5kOkj03Wnndg5wTkbfeh+r0D\nER5xWexWxPweiOq3oaYug8LFQCnE2B6w4wuKLZ9OeMfmKKU432UEzu0/c+fGcURUKMKpdb/w1zMf\n0eTOJny6bv0NfWgEcro0UIVLV1Oqk1M7qJx4lGYXwUj89UV2LK2cTmdq5yp/383ruxoaGppqaeUt\n6Qik3zAAESSrQeQOJk+eTFRUFGPGjMmV/W3fvp1mzZpRt27d1JvAq6++mirkygvEx8fTrl073n33\nXW699dYMy/Py4eJ2u2nVqh2//RaOy9UsizUVhsDqEHACKS+h1EVAYTLVwO1uCNQlexFaK/AmhvBK\nIsTjaD0I/+4E8cBoYDtSdkKpqUCltOMSrUD8ZNxW2iyHij5lG7ZLiM0d0PGxMGgx1PdZ9tEI+GEx\nYuRL6L6jjDKCc6cxPXo3MlRR7PN3MVcqh0pIIu7Ohwhx27jrq2eJKF+UhD3H2N1pOiMfGcb4Z8bm\niwdGIHdcClSinVld4o3yKM0ushIA5WcEqsdwVkTbG1W32+0opYiOjk7z3RwOBykpKamiKm90vGDB\ngsGoat7D70kWOLH9IG5a3H333an1YNcLMTExLFy4kMcee4z169dnEHNZLJbU2qbcTvOaTCZWrPiQ\n+vUbEx9fBiP1fhqjtvQ4JlM8WiejVApgRsriQGmUqgVEAGtQ6jag6RU+SQE/IuW3KHUKKSugVGNg\nJ1rXJSNRtQETgC+Q8i6U+gml6qRbJwlEb+BnCG2LcG9H/DEDVfR2iK4ABz5C/DACUbUpevwBiPbU\n2CacRU5vgXYmot//Dl2jvvH+918g/+8hIjo1o+CCF5HhYTj2HOB8q4cp0rgyDZaPICQyjLgte/ij\n1zvMem06vXr2vJrDnieQUhIZGZna+jFQ0rxCCCIiIkhKSkpNcwYCvCQ1KSkJq9Wa2t/enx2UNyqW\nX5T3YWFhpKSkYLPZAspCLDQ0FKVUntwL8xJmszm19jY90fb+bTabsdvtqZk0IUTqhMj3u0opr9gF\nK4i8RfDIB3FVCJQbVlaoVasWo0ePZuTIkSxcuDDD7DssLIzk5GTsdnuuR59KlizJRx+9T+fO3VHK\nhdHi1CClbndVjHR+cSCCjDw+FK0/whBbZbThgiPApwjxt2fdNkALlPJaS30NPI5hT9UJQ5j1EkKs\nRIjqKPUlSjXxs9/JCDkTEVofFfMrmKuhVQpc7AbLa0Hh6pBwAN3/HXRjH/HVzysQHw6BZp3Qz78L\nkZ5I8IxxiJVvU2j6OCKH9kQIQfKKz7n42HPc+mQHqr3YHSElxz74jkNjl/PJBx/TrFlWkegbA5PJ\nlHquBFK61Osb6RUV5jei7a+e1JeUOp1OzGYzFoslX9tBeeE7QbDb7QHlEBCoRNtisWRKtL3R9rCw\nMKxWa+p3s9lsmEymNOp/777y8/l1syNYBhDE/zS01owfP56iRYsyYsSIDMvz2jbnmWfGsXjxp9hs\nj+LffzUz7AC+xIiElgUSgA0eoVUyUjZFqdZANfxnVb4D3gXaI8Q2oARazwbu9bP+F0jTYDQaXehd\nCE9X55u0EOKfArNERBdBD1oE1Vsa7VfffQj2boaJc+G+/sb6NhumoS3g5CGKbZxLaEMjentx7Bsk\nz/2I+ouGUuahJmitOfTiOs4v+oGNq3OvSURe4WY0VL8eyKznvdY6S4/SQBUu5ScrrpzA69VrsVgC\nimhfyeXF1yEgLCwMm82WRngVFFVddwRrVoMIwh9cLhf33Xcfo0aN8hu5y8uHolKK++7ryo8/2nA4\nclqjuxI4iJQFUSoOKauhVFvgDiCrh0kCsBj4GeMS7wCsIeM94jhCdkfrPYiYSeioUSB86jJdJ5GX\nOqOch6D6XCjeEw6NhTPzEVWawNn9UCAKPWs9lPc0IDi4B9MTrbFUr0CR1bMxFS2EUooLbR/D+fte\n7vpiAgXrV0Q5XewdspjQP87x6cq1lCzpTwCWvxConaIg7+spvTWC2fUozcoOyheBKlwKVKLtFS7d\nbERba51a4xoaGkpkZGTq+0BQVHV9ESSrQQSRGeLi4ujYsSMff/wxZcqUybA8L0UGFy9epEGDOzlz\n5i4MwVRm+Bf4HSmPoXU8WtsAC+AGpgEZx50W+xHiA7T+22P63xcIQYhnEWIISr2OcZ9wAUNAfIKM\n7IIqMA1M6chi/AuQPB1Tic64q7wJliKXlx2YACdmgBDIVg+gnnwVylWGVfMRM54mZmQ/Crz0JMJk\nwnXuAucb9yQ0ykSTzeMJK1UIZ0IKvz/4FpVkYZYtXkrBgtltUXvjEcidonKDaGdmB+XrUeqvBe61\nXFOBaiF2oyPaV4tAJdq+YsiQkBC/EycvvA4BWmssFktAfc+bAEGyGkQQWeHnn39m7NixrF27NkON\nal7b/fz++++0bt0Bq3UARr2qC4gF9iLlaZRKAMBkugW3uzKGKKs0Rq3rHCASpSZjtGb1hQI2I+Xn\nHpur+1CqB2mJ7T8IMRIh2qJUc4ScCCFl0AXfg9BGaXfn2IO81BVFCtT6AAr7tMR1nEX+3gblOAWd\nVkCBWxDfPII+vQPKV0acPEzR5dOJuK8lAPadf3K+/aOUbFOHeu8PxRRmwXr8PLs7TadT45ZMe/V1\nnE5nQNWBQuD6U+aEaF8vj9LsjjsY0b6+CASi7S+a73K5Ukmpv2i+N8LqdDpTBVVmszmgfpubAEGy\nGkQQV8LChQv58ccfmT17tt92fcnJyZjN5lyp2Up/I1269EOeeWYiSoWgVCJCRCJlZdzuShidqIri\n/zp2IeVMoBJKjcXwbk0CliDELiAMrftipPsz64m9AXgLsELBWRA18rKxPxj1p5ceA+sKZPnHURWn\ngMlnXycWIA6PQVTqiGo1D0I9Rv3x/yBW34N2xiOEi9CqtxA17hHclxJJeGYq1Sd2pcr4zgghiP/9\nH3bfN53RQ0cy5unRCCEC1sD+ZvGnzO92UF7cDBHtsLCwgDrH80uNdk4nTm63m6SkJJRSFCtWLMO+\nlFI4HA6klBQsWDCgfpObBEGyGkQQV4LWmscff5y6desycODADMu9qaScRM0yu5GmF5BIKenSpTvb\nt/+B2z2UnHW4SkGImcBtwAW0PoSUNVGqH9CQzJsPfIWUC1AqERiOkJ+BvIgu+jWYqxqrWL9BJvRH\nWwqha30E0fUub+5KQfzZAZ34G7RdBLc+eHnZ3g/gvyOQTXqj+sw2CO/a/8D38yAlhZja5ag9vR9F\nmtfg3Ja9/NlvHm9Nm0mP7j3SHLtANbAPJH9K34mT0+nE5XIhpcxgB5U+fZ+fEOgR7UAVLvnzvM2r\nz8tMjOc7cUp/rvrDokWLWLx4MZs3b8ZisXDkyBFiY2NTXydOnGDWrFnccccdefqdgvCLIFkNIojs\nwG63065dO6ZMmeL3ZuWt2UofNcssAuUrIPGnavaFw+GgefM27NtXGKezdfqP9gMF/I4QO9H6DODA\nsLR6AyifxXafI+VilEpBiFGeyKs3hToKxJdQ+GOEdQ7a/l9E5cnosqNA+pCAuI2I/Q8jitdDtfsQ\nokp5DwR83gOOfQmPLYaG3Y33bSnIqXejrXHop19BfPYx5r9+QtnthFksrFm2kqZNM3rHBvLDPL8R\n7cxETulJqTdlGmiR4cyuzfyOoENA2n3mdjRfa43D4eDw4cPs27ePffv28d1333Hs2DHKli1L5cqV\nqVmzJrVq1aJmzZqUL18+X07I/kcQJKtBBJFdHD9+nK5du7Jq1ao0qSJvysmbAvMW6l+rqtkXp0+f\npmHDply40Bao5WeNJOAHpNyHUucRIgwh6qNUXSAMId4CHkHrXn623YCUH6CUHSGeRuvegD8P2V7A\nTjAXgEY/Q3jFy4uUC/Y+BBe+RDSbhq4z9LKnavzfyLWt0BER6Kc2QInKxvsn9iLeaI2oURs1exUU\nKAhKYZn1HAU++4jl7y+mSRN/3q6ej7yKiHZ+wI0i2tmN5mc2ccqPRDu7CKSIti8CXbiUU6KdFSm9\n2mi+99588OBB9u3bR2xsLPv37+fMmTNYLBaqVKmSSkorVarEwIEDad26NS+++OK1HoYgcg9BshpE\nENmFUoply5bxzjvv0KZNG/bv38+hQ4dYvXp1qgm5d6YfHh6e6wKSX375hXbtOmO1PoIhuPoX+B4p\nj6FUPFKWRan6QB3Pcl8cAeYgxEi07ux5bzVSfoRSbmAM8BD+7a02IuUUtJZo/SQi5HVEoUaomh+D\nuSDE70Du7YqOKoHutBIKVrm86d7F8N8nkU37o3rPBLNn/9s/gI+GI/uPQI16GaQEm5XwCQO49cIJ\nPv1kOUWLFr3iMQlGzfzvO32E1EtKsxvNzwyB3JLVZrMFHQKuI7Ii2tmN5qcX42UF77m5f/9+9u3b\nx/79+4mNjeXixYuEhoZStWrVNJHSkiVL+j2eZ8+e5c4772Ty5Mn0798/V49JEFeNIFkNIojMcPbs\nWebPn8++ffv466+/2L9/P0WLFiU6OpoqVarQsmVLatSoQePGjdN0NslLUccHHyxl5MhxuN0KrR2Y\nTLVxu+sBNclcKOXFPuA9oDVS/uzpgjUWeBDD7io9fkfK0Sh1GiFeQuthGM4CCciQFijTaSjYAs6v\nRzaegLrj/y6XBCgFn3WF49/C4Pfhjm6Xd7toCPz8Mbz+AbT1vH/uDBHDH+DeW29h8bx3ckSE/hej\nZnnlUZodBHJ6OhCJNgS2Q4DVaiUsLCxNZN9LSv1NnrJDShMSEtLUk8bGxpKYmEhERATVq1enZs2a\nqcS0aNGiOT5mf/31F99++y3Dhw+/lq8fRO4hSFaDCCIznDlzhpkzZ1KjRg1q1qxJ9erViY6ORilF\n//796dChA926dcuwXV6LOh58sCdff70bl2s8GW2pMsMBhNiM1kcwLuH7gOmZbH8GIUag9e9IORyl\nJgIx6dbZauxD2hHV+6DbLALpIVyXDhtp/6gC6FEboJinXMCWgny9GTrpNHrhF3Crp5zh0F+ED+3E\n8P59eOG5Z3P8YLmZ09P5yQ7KF4Gcnk5OTg46BOQysiox8Y7V602a3Wi+1pqLFy+mSd3HxsaSkpJC\ndHR06n3ZS0qDKv2bGkGyGkQQV4Pk5GTatGnDm2++Sc2aNTMsz0ubIpfLRadOXdm5E+z27lmseQ74\nFCkPoJTd0261GXAWWATMwCCtXtiAZzDcAO5DKX+CrARPB6vvEdHPoUPuQib3Rhcsje74Cfz7DWwf\ng2z2MKrXDAjxEIIT+xDTWiKq1kS9tcaoTwX4/ivCx/Zl9tRX6Nunz1Ufk9y2ELue8EbNwsPD/abv\nc6pqvl5wOBzYbLaAK8EIOgRcPbJTYuJ7fnrPi/j4eJYvX87gwYP9lgTExcURGxubmr4/cOAANpuN\nQoUKpSGlNWvWJDo6OkhK//cQJKtBBHG1OHijMfT5AAAgAElEQVTwIH379mXdunV+OyrlpedgfHw8\njRvfw4kTDT0E1AsrhuH/byh1CZOpDm53C4wuWL4P5p+AhRiEtSMwHSGWIEQNlJoD1PfzqTMQcgoi\ntBEqaj6E3GK8rVwQ3w0cX4DQ8MTytGn/Hz6CpcOQfZ9APf0KeB5W4pP5RL05iVUffsDdd999zcck\nENLTWQlIAEJCQvKFR2l2Eajp6UD1vL0e53helJhYrVY6dOhAkyZNaNOmTSopPXToEA6Hg2LFiqWS\n0lq1alG9evWAqy0OIk8RJKtBBHEt2LhxI++99x4ffvih34hBXnbROXLkCHfd1YLExN7AeaTcjlKn\nkbIcSrUEGgGRWezhR2ABQhQAItB6DgZxTX9f2IM0dUPpSxDzHoQ9kHaxbRMiaQDaUhyh46BQcfTg\nJVCxASweBjs+hKnvQ3tPFFgpzNPHU3TLWjavXUOVKlXILeSX9HROBSRAwPZXD9ROUf+Ltc6+yEkb\n3JyUmCilOHbsWJp60r///puQkBB+/fVXmjdvzkMPPUStWrWoWrVqvixrCCLfIUhWgwjiWqC1ZsqU\nKSilGDduXIabbl7XyG3fvp127Tpj2FO1QeumGJ6qWSEJ+AghfkNrATgRYoZHQOULB/AwiA3IqGGo\niCkgfcivckF8D3B+haj8Krr0cOPucGAwnF8OBUsAdlj4BVStbWxjTSF8fD+qJZxlw4plFClSJFeO\ngy+uJwlJLxq5FlWzNz19o4l2TpEf0tNXg0Cudc6JQ0Be1D17J2NHjx5NQ0r/+ecftNaULVs2TT1p\n5cqVsVgs7N27l1atWrF+/fosbemCCCIdgmQ1iJsfNpvt/9u797Ao6/Tx4+9nThw9tyoOpBCGUmqo\n4LqlZIZKJWpm6lfNTIzsKrR1Vcy+3/K7mVnmVrq6uq2YWp4yz0CiBd/dWmH1l5t7tVTmtoEHtFVT\nYBCZeX5/6IwDM+AgM8OM3K/r4tLheWbmwzD63PP5fO77JjEx0RbEjBgxgkWLFrnt8c1mM48++ihP\nPfUUSUlJTo97Mgh5770/kZGxEJPpvwHH7QjXfYeibERV/32tk9XjXF3u/3/AqyjKAlR11rVzP0DR\nzABdF9SWa0F/d82HuvwpyqXxEBSB2n0TBNvNjp7Ph3+OurrrwFKF8syLqJNnQtlFgp8dzpDu0axZ\nucJjgY01CFFV1W1LiY2tUeoq2QfqXbdShQBnW0yc7Xt2tqe0LqqqUl1d7dDNqaSkBEVR6Ny5c42g\nNCoq6oZbV7KyskhNTeWrr75yqTydEEiwKpqLiooKgoODqa6u5r777mPJkiVu2Sdpdf78eYYOHcqa\nNWuIiopyOG6dCfHUbN///u9Cli3bQkVFBjUL+lu4mjCVi8VyAY1mKBbLKMBY6xG+RlFeAp5C0fwF\ni+U7aLUUAqeAYndBs1TDxYlweTdK1Cuo4b8GxS4AP/YCnFqN0v9V1F4z4cd9aL54FsuVCxiCgpj5\n1JP8z4vzvDLj2dAgpCnLQdnzlf7qDSX7QL3D/j16+fJl2/fd2c3Jmn1/8uRJtFotUVFRNWqUdu7c\nuVEfvI8cOUKvXr386v0tmpQEq6J5qaioIDExkffff99pFn9jfPXVV0yfPp0dO3YQEuK4V9RkMnms\nKLmqqjz55DT27v0Ok+l5riZaXV3qh0BUdSyQRN21WM8BC4DjoGkBtx0Fba3GApc/R1M2BtVwG2rs\nFgjpdv1Y1X/Q/GMQlur/wCO7oH2f68e+24Th/9KYO2smGRlz3fdD30BdQUjtZdHaSU7Olu+9UQ7K\nfnyyD9S7fHELhiv7njUaDVeuXEGv17u099PaHOHbb7+1JTl98803nDlzBr1eX6ObU2xsLOHh4X71\nwcOdZs+ezZ49ezAYDNxxxx1kZmbSqlXtEn6Qk5PDzJkzMZvNpKamMneu9/6Pa0YkWBXNg8VioXfv\n3nz//fdMnz6dN954wyPPs3HjRnbv3s3q1asd/pP39JLjlStXGDJkOIcOfXttFtV+qb+uC87Za/tV\n/4FGMwCLZQIabQbo78bSajtoQq8W+L/4JFzehtJlPmrEnOvF/wHO7kL5bjJKxGAsg9eAoeXV71uq\nMRRk0OrER+zctpFevXq5/Weuj6qqttk+g8FQ4+LflDVKXR27J5tLeIontmB4S1PNDDe2m5PFYiE9\nPZ2HH36Y5ORk22PW1c0pMDDQoZtThw4dmm1QWpfc3FwGDx6MRqMhIyMDgNdff73GOWazmZiYGPbv\n34/RaCQ+Pp6NGzfSvXv3phjyrUyCVdG8/PzzzwwdOpTXX3+d+++/3+2Pr6oqs2bNIjw8nGeeqZ2w\n5Pklx3PnznHPPb/kwoXemM3p9Zx5BkV5C1X9Go3mfiyWdMC677QCjXYMqkaPGroETfnTqPpQ1Nit\nEGq3d9VigW+mwE/bIPFt6D4VrBdR008EfzqOHp1Utn641iOJVFb1lYOyBp8Wi4XAwECfqVHqCtkH\n6n2e3IJRV+Z97W5ODS2cf/HiRXbt2sWLL75ISkoKJ0+edGs3JwHbt29n27ZtbNiwocb3//rXv7Jg\nwQJycnKA68GsNbgVbuP0Tes//ysK0UCtWrXi4Ycf5tChQx4JVhVFYfHixTz88MP06NGDe++9t8Zx\njUZDcHCwbZnX3UuObdu2paAgn3vvfYCzZ/disTxc64zT12ZS/4miPICqvobFUnuPbTAW82YwPwAX\nRqB2GIMasxY0dsF1ZQmao4NQtSrq2L9BW7uZhLNfEpT7KFMmjOK1377itkCr9gyU/d/tl0V1Op2t\nW471wmwymaiursZgMPjNxVqr1RIUFERFRYVf7QNVFIXg4GDKysrQarV+sQ/UKiAgALPZjMlkuukK\nAa4m4xkMhgYFpefOnbMlODnr5jRy5Eg++eQT8vPziYqK8pv3uT9Ys2YN48ePd/j+iRMniIiIsN0O\nDw+noKDAm0Nr1iRYFbeUn376CZ1OR+vWrTGZTOTm5vLyyy977Pn0ej3r16/nkUceYdOmTYSFhdU4\nrtPpCAgIsAUh7r6ohIWFkZu7hwEDHuTnn1sCA4AT14LUb9BohmA2v4HF0tnJvS1cbcO6CY0mDosl\nDPXsTmi3Hdo/fvWUU+vg+PPQdQzqwGWgu76vUvlmA0EHX2DlsqU89tjomxq/q8ui1tfRlYt9YGAg\n5eXlXL582a9m+/R6PWaz2VZX018CEI1GQ0hICOXl5R75UOYp9oF2VVVVvRUr6prNr52Mp9PpXN73\n7Go3p4kTJzrt5jRnzhymTp3Kvn37/Gr7SFNJSkri9OnTDt9/7bXXGD58OAALFy7EYDDwX0467PnL\nv8dblQSr4pZy6tQpJk+ebLu4TJo0icGDB3v0OTt06MCyZctITU3l448/drjoGQyGRs/g1OeOO+4g\nK2s7SUmPYDJtRlV/QFGSUdWlmM21W6habUdR3gJCUdVNWCzXynCZN0HRVJSyw1BRhHrhUxi8BkvX\nMdfvar6CoWA2bUt3szN3L3fffbfTZ7DniRmouvj7bJ/FYvHYe8VTtFqt7UOCv80Mh4SEUFZWhqIo\n6HQ6twelFouFU6dO2YLSb7/9lmPHjnHlypUa3ZwGDhzYoG5OixYtYtSoUWRnZzNixIgbnt/c5ebm\n1nt87dq1ZGVlceDAAafHjUYjxcXFttvFxcWEh4e7dYyibrJnVQg3WbVqFV9++SVvvfWWw8XGG/3s\nP/zwQ55+ejqq+iZQe0uA1d/RaDKwWP4DLASeAmrPhP0JlBeAKhhzEDrEXz9UcYbgT8cSd7uezR9k\n0qZNmxr3tN+b58kapa7wlQ5XDeWvhffBP0pxOSucb18hQqvVuq2b0/HjxzGbzXTq1KlGi9E777yT\ngICARr9GZrPZr97bvionJ4dZs2aRn59fZz3Y6upqYmJiOHDgAJ06dSIhIUESrDxDEqyE8CRVVUlN\nTaVfv35MnDjR4bg14cqTSTQ5OTlMnJiGyfQeYF+uqxRF+fW1SgDPYbFkAC1q3bsMRfM4quULMMxH\nYS+qpgge+hiMiVB6iKD9o3l68uMsePklFEVp0hqlrvB0zVtP8bd6oFa+VIqrod2czGYzly5dQqPR\n0LZt2zof82a6OfnTe8/dtm7dyiuvvEJRURF/+9vf6N27t9PzunTpQsuWLW2rIYWFhV4bY9euXamq\nqrL93vv378+KFSs4efIk06ZNY+/evQBkZ2fbSldNnTqVefPmeW2MzYgEq0J4WmVlJUOGDGHRokXE\nxcU5HLfO9nlyqXTbtm2kpf0Gk2ktcDswH9iPRpOMxbIYiHByrz+gKP+DouuDxfAn0Fzb43p5IVhe\nQ4keReDJHJb/7g0eeughAIcZ0qYMSuvjyZq3niQzw64/X30VIhpSOH/ZsmXs2bOHXbt2odFo3NrN\nqbkqKipCo9GQlpbGW2+9VWewGhkZyeHDh+v8oCCaDakGIISnBQYGsn79eh577DE+/vhjhzJO9glX\nnloqHT16NCZTJenpk6iqMqMod2Cx7Mdi6ePk7H+h0YzGop5ADfgjqm709ZJUAIbpGKoPoD/5Cdl7\nthMdHU1QUBA6nc5vLsz+mnDl6eQ8T7HuGS4vL7ft73QHV4NSZxUi6ntM+25OP//8MyaTiYSEBMLC\nwoiMjCQ2Npb4+HgmT57c6G5OzVG3bt1ufNI1N5g8E82YBKtCuFnnzp1ZtGgR06ZNY8uWLQ4Xa08n\nXAFMnDiBI0eOsHr1eszmdUDXWmdYgBeAdaAfD/oloNTq2FL9CUHKVCZMGsnri7YSFBRUo5i6vwVP\nZWVltiQuf2EwGLBYLLYWwv7ymmu1WlvZtoauIniiQkR93ZwMBoOtm1NiYiITJ07kscceY/z48Uyf\nPr2xL4VwkaIoPPjgg2i1WtLS0pg2bVpTD0n4ENkGIISHvPnmm5w5c4ZXXnnFacKVp5ZK7S/2mZnv\nM3/+m5hMOUDMtTPy0WieRFWCUAPWg/aXtR6gnABmExKwm3Xv/4FBgwbVOOwPSTTO+GKbTVf4c+H9\n+lqyNrabkzPu6uZ07Ngx7rvvPjZu3Ojw/heOXCkLNWjQoHq3AZw6dYqwsDDOnj1LUlISy5YtY8CA\nAR4dt/BJsmdVCG+yWCyMHz+eUaNGkZKS4nC8sV2LXL3Yf/DBRubOfQ2TaTuK8jKq+n8ogf+NqpsF\nSq3kHXMBwcokkpL6suL3S2jdurXT5/WVJJqGqqqqorKy0q/KK4H/J1ypqoper6+xjN+YChHWbk72\n+0mLiorc2s3ps88+o6SkhEmTJjXmJRDX3ChYtbdgwQJCQ0OZNWuWF0YmfIzsWRXCmzQaDe+99x5D\nhw7lzjvvdNi75WrXosbWKJ06dQoGg55nnrkfRdsdNeAfqJrIWk9yBZ3lVQK1f2Dlird49NFH6/y5\nahdT97dldesWDH9aVvd0NzR3qK9sGWALWN3dzSk2NpYxY8Zw11130bp1a7f9TmVG1f3qmhyrqKjA\nbDbTokULysvL2bdvn0ebuQj/IzOrQnhYUVERTz75JDt27KBly5YOx63L6kFBQTUCU/uLfe2s+5up\nUbpq1Wrmv/Q6JnbUXPo3FxGsmcQ9PVuzbt0fHLpw1cWfl9VlZvjmWMtBuVI43z7zXlVVvv/+e44f\nP87QoUOdPq6zbk6XL1+u0c0pNjaW7t27O3Rzas5cLQ2Vk5NjK7uUmprK3LlzvTK+7du3k56ezk8/\n/USrVq2Ii4sjOzu7Rlmo48eP2z4gV1dXM2HCBCkL1XzJNgAhmsr27dvZsGEDmZmZlJaW8s9//pPo\n6Gg6dOhgK0oOeLxGaU5ODpMmPUOF+iFoH0Bj/j0BygJe/e1/k5aW2uDnsU+48rdl9fLycgICAvxq\nZhiuluIym80e3TNcX1AKON1TeqP36ZdffklKSgqZmZkoimILSq3dnNq3b1+jcH5MTIxfzX43FVdK\nQ5nNZmJiYti/fz9Go5H4+HgpaC98lWwDEMJbrN1svv76a9tXQUEB4eHhGAwGYmJimD9/PmFhYej1\nehRFoby8HIPB4NHgadiwYezY8QGjHv0vLGo0XSKvsPHDA3TtWrtagGv8uZ+9fXklf5oZDgwMpKKi\ngsrKykbPDDekcL5er290N6f4+HgmTJhAamoqCQkJDBs2zG3dnJorV0pDFRYWEh0dTZcuXQAYN24c\nO3fulGBV+A0JVoXwgDvvvJPKykrbsmVCQgKTJk1i6dKlPP300zzwwAMO9wkJCfFK8HTvvfeSu28n\nf/7zX3jmmbRG18EMCAjAbDa7JXjyJuueYX/sZ9/QPcP2NUqdBaX2M6T2e0pdeUxXujmNGDGC6Oho\n9Ho9L7/8Mp9++imLFy/2u1ltf3XixAkiIq43AwkPD6egoKAJRyREw0iwKoQHHD161Gng1qNHD5KT\nk7njjjvo3LlzjWNardY2axYSEuLR4KlXr1706tXLLY+lKIot6PO3hCt/nRm2L7xvLYQPDSucf6Nu\nTlaqqlJdXX3Dbk533303Y8eOvWE3p1deeYWjR48yY8YMVq5c6fbX5lbkSmmo+vjL+1qIukiwKoQH\n1DXD2K5dO1atWsW0adPYuXOnw3n+nq3uj8vq/jgzbM010Ov1thqsdRXOv9luTtbs+5MnT6LT6YiK\niiI2NpaEhASefPJJbr/99pv6PWs0GtavX09RUdFN/ezNUW5ubqPubzQaKS4utt0uLi4mPDy8scMS\nwmskwUqIJrB+/Xpyc3NZsWKFwwyqPxeBb+ps9ZtlbdLgawlXrtTStZ4THBzsclBq383JGpSeOXOG\ngIAAWzcna+F8o9HoV79Ldzp37hxjx47l3//+N126dGHLli1Oaw936dKFli1botVq0ev1FBYWen2s\ngwYNYsmSJfTp49hWubq6mpiYGA4cOECnTp1ISEiQBCvhq6QagBC+QlVV0tPT6dq1K6mpqQ7H/bUI\nPHgnW90TGtukoTGclSyzD0qdlS6zvraqqlJYWMiWLVt48803bYGlu7o5NWdz5szhtttuY86cOSxe\nvJjz58/z+uuvO5wXGRnJ4cOHadu2rdfH6EppKIDs7Gxb6aqpU6dKaSjhqyRYFeJmmM1m+vbtS3h4\nOLt373bb41ZVVZGcnMz8+fP55S9/6XC8urratpfSn5bV/bmOqadLcbna4KGh3ZxOnz7NI488woAB\nAwgKCnJ7N6fmqlu3buTn59OhQwdOnz7N/fff73T7QmRkJIcOHaJdu3ZNMEohbikSrApxM5YuXcrh\nw4e5dOkSu3btcutjnzp1ipSUFDZv3kzHjh0djldVVXH58mWnvdV9mXVmODAw0KeW1V1hbdLQmJlh\nZzOktRs82AekjenmZDKZaNGiBV27dmXdunUsWLCAyZMnu7WbU3PVpk0bzp8/D1x9/du2bWu7bS8q\nKopWrVqh1WpJS0tj2rRp3h6qELcKqbMqREOVlJSQlZXF/PnzWbp0qdsfPywsjN/97nekpqby8ccf\nOwR2BoPBNsPqbwlX3irF5W6uJlw1pJuTTqdzucGDq92cJk2a5NDNafTo0YwdO5bhw4fTpk0bt74u\nt6q6Mu0XLlxY43Z9v7vPP/+csLAwzp49S1JSEt26dWPAgAEeGa8QzZHMrApRjzFjxvDiiy9y8eJF\nlixZ4tZtAPaWL19OUVERixcvdrggWvce6vV6AgICPPL8nmKdGfZ0KS53syZcWZs0OFu+t+/mVHu2\n1NXC+adOnapRDsod3Zx+//vfs2/fPnbu3OmW16I569atG3l5eXTs2JFTp04xaNCgG1YxWLBgAaGh\nocyaNctLoxTiliIzq0I0xJ49e2jfvj1xcXHk5eV59LmeffZZpkyZwubNmxk3blyNY/ZF4K2zdP7C\nn0px1e7mpNFoqKyspLKyskY3J/vC+Y3p5mQ2m+nUqZMtKB06dKhbujk9++yzTJ48+abvL65LSUnh\n/fffZ+7cubz//vuMHDnS4ZyKigrMZjMtWrSgvLycffv28fLLLzfBaIW4dcnMqhB1ePHFF1m/fj06\nnY7KykouXrzI6NGjWbdunUeez2QyMWTIEN5880169uzpcNy6HcAfy0L5UikuZ4Xz6+rmZLFYuHz5\nMgaD4YZbAlzt5nTXXXfZujn5cvDuSTk5ObbM9NTUVObOnetwTnp6OtnZ2QQHB7N27Vri4uK8Ps5z\n587x+OOP8+OPP9YoXWWfaX/8+HEeffRR4Oq/0QkTJkimvRA3TxKshLhZ+fn5Ht0GYPWvf/2LsWPH\nsn37dqd7Di9fvkxVVZXfJlx5sxSXq92c7P909prm5uayYMECcnNzCQwMrLObk0ajsXVzsgalkZGR\nLtU+bU7MZjMxMTHs378fo9FIfHy8Q83PrKwsli9fTlZWFgUFBcyYMYODBw824aiFEF4i2wCEaAxv\nBByRkZH89re/JS0tjY0bNzokJtkvqwcFBflNEGSfcGUNDN3FlcL51u0TAQEBLmfeW7s5/fzzz7Rq\n1YqkpCQCAwPd2s2pOSosLCQ6OpouXboAMG7cOHbu3FkjWN21a5dtK0O/fv24cOECpaWldOjQoSmG\nLIRoYhKsCuGCxMREEhMTvfJcQ4YM4fDhwyxatIj58+fXCKwURSEoKIiysjKqqqr8KuFKq9USGBho\n28rQ0EDb1aBUr9c7FM6v7zFd6eY0Y8YM5s2bx5QpU3j++ecb8zI0eydOnCAiIsJ2Ozw8nIKCghue\nU1JSIsGqEM2UBKtC+BhFUcjIyGDMmDHs3buXRx55xOF4cHCwrSyUPyZc1VeKy9XC+dYkJ1eDUle6\nOQ0dOpQXXnjBaTennj170r9/f3r06MH999/vzpelWXH1Q0rtLWr+sooghHA//7nKCdGMaDQa1qxZ\nw7Bhw4iJiaFr1641jmu1WoKCgvwy4SowMJDy8nIqKyvR6/VuD0ovXrxYYz9pUVERZWVlNbo5DR8+\nnIyMjAZ1c4qKimLDhg3s2bNHgtVGMBqNFBcX224XFxcTHh5e7zklJSUYjUavjVEI4VskwUoIH/b1\n118zdepUdu7cSWhoqMNxd3Rb8rS6kpzsg9LaSU6N7eZkLQdl/ZJuTr6jurqamJgYDhw4QKdOnUhI\nSKg3wergwYPMnDlTEqyEaB6kGoAQ/mjr1q1s2bKFzMxMhxlUVVWpqKhAo9HUW1rJ0xrSzcn6p9ls\n5syZM5hMJqKjo+t8XFe6OVm//K1KgifcqCxUXl4eI0aMICoqCrja9eqll17y6hizs7NtY5w6dSrz\n5s1j1apVAKSlpQHw3HPPkZOTQ0hICJmZmfTu3durYxRCNAkJVoXwR6qqMm/ePFq1asWMGTOcHi8r\nKyMgIMChXasnxlLXnlL7wvmudnPavHkzCxcuJC8vD5PJ5PZuTs2NK2Wh8vLyWLp0Kbt27WrCkbqu\nuLiYxMREDh8+TJs2bTh//jx9+vQhLy+P22+/vamHJ4RwLyldJYQ/UhSFV199lZSUFOLi4hg4cKDD\ncfuEK3eUUHI1KLXv5uTKvlln3Zw6depEv3796N+/v9u7OTU3rpSFAsfkJV8WERHB9OnTycjIYNWq\nVWRkZJCWliaBqhDNiASrQvgBnU7HunXrSE5O5oMPPnBISLGWhSovL29QwpWrhfN1Ol29hfOdPaaz\nbk5AjW5OI0eOJCIiguTkZHr06CFtKhvJlbJQiqLwxRdf0KtXL4xGI0uWLCE2NtbbQ22QF154gT59\n+vD222/zxRdfsGLFiqYekhDCiyRYFcJP3HbbbaxYsYLU1FR27Njh0LrUvmFA7WXyhgSlBoPB5aDU\nlW5OPXr0YNy4cfV2c9q6dSvx8fHExcWRkpLinhesGXJlFrp3794UFxcTHBxMdnY2I0eO5Ntvv/XC\n6G6eTqfjjTfeIDk5mdzcXGnAIEQzI8GqEH4kPj6eKVOmMHv2bN59912H4CQgIIDy8nIqKipsSUzu\n6uZ07NixGoXzT58+jVardUs3p44dO/LRRx9x8eLFBr8m4jpXykK1aNHC9vfk5GSeffZZzp07R9u2\nbb02zpuRnZ1Np06dOHr0KIMHD27q4QghvEgSrITwM6qqMm3aNIxGI2FhYRQVFaHVapkzZ44tKLVY\nLOh0Ord0czp79ix6vZ6uXbvakpxiY2MxGo1+Vd+1sZ566in27t1L+/btOXr0qNNz0tPTyc7OJjg4\nmLVr1xIXF+fVMbpSFqq0tJT27dujKAqFhYU8/vjj/PDDD14dZ0MdOXKEiRMnkp2dzX333UdBQQEd\nO3Zs6mEJIdxPEqyE8EfHjx8nPz+fr7/+2vZVWlpKixYt6Nu3L7169aJ3794EBwfbgtLq6mq2b9/O\n3Xff7TS5xlk3pwsXLtTo5jRs2DB+/etf06FDB0lyAlur1SeeeMLp8aysLI4dO8Z3331HQUEB06dP\n93ptUJ1Ox/Llyxk6dKitLFT37t1rlIX66KOPWLlyJTqdjuDgYDZt2uTVMTaUqqpMnz6dd955h4iI\nCGbPns1vfvMbNmzY0NRDE0J4icysCuHjtm7dyu7du2vUE42MjOT06dOMHDmSrVu30r59e4f7vffe\neyxbtox33323RrJT7W5O1tnSdu3aSVB6Az/88APDhw93OrP6zDPPMGjQIMaOHQtAt27dyM/Pl372\njbR69Wo+++wzNm7cCFytKBEfH8/bb7/NgAEDmnh0Qgg3kzqrQtxq8vPzefXVV1m9ejXHjh1z6OZk\nMpm4dOkSs2fPti3fSzenm1dfsDp8+HDmzZvHr371KwAefPBBFi9eTJ8+fbw9TCGE8FeyDUCIW01i\nYiIffPAB48ePZ8CAAcTGxjJp0iRbN6eqqioGDhzI+fPnuffee5t6uLe82h/+5UOBEEI0ngSrQvi5\n1atX13ksICCAbdu2kZCQQP/+/R0aCgj3qZ2JX1JSgtFobMIRCSHEraH5pPIK4QO6dOlCz549iYuL\nIyEhwSvPGR4ezieffELfvn298nzNVUpKCuvWrQPg4MGDtG7dWvarCiGEG8jMqhBepCgKeXl5Xq9p\n2aNHD68+X0PdqCxUXl4eI0aMICoqCpHsmu8AAAPsSURBVIDRo0fz0ksveXWM48ePJz8/n59++omI\niAgWLFjAlStXgKtZ9g899BBZWVlER0cTEhJCZmamV8cnhBC3KkmwEsKLIiMjOXToEO3atWvqofiU\nP//5z4SGhvLEE0/UGawuXbqUXbt2NcHohBBCeInTjf6yDUAIL1IUhQcffJC+ffvyxz/+samH4zMG\nDBhAmzZt6j3nBh+shRBC3KJkG4AQXvT5558TFhbG2bNnSUpKolu3blIr0gWKovDFF1/Qq1cvjEYj\nS5YsITY2tqmHJYQQwgtkZlUILwoLCwPgF7/4BaNGjaKwsLCJR+QfevfuTXFxMX//+995/vnnGTly\nZFMPSQghhJdIsCqEl1RUVHDp0iUAysvL2bdvn88nPvmKFi1aEBwcDEBycjJXrlzh3LlzTTwqIYQQ\n3iDbAITwktLSUkaNGgVAdXU1EyZMYMiQIU08Kv9QWlpK+/btURSFwsJCVFX1ekUFIYQQTUOCVSG8\nJDIykiNHjnj9eYuLi3niiSc4c+YMiqLw9NNPk56e7nBeeno62dnZBAcHs3btWuLi4rw2xhuVhfro\no49YuXIlOp2O4OBgNm3a5LWxCSGEaFpSukqIW9zp06c5ffo099xzD2VlZfTp04cdO3bQvXt32zlZ\nWVksX76crKwsCgoKmDFjBgcPHmzCUQshhGiGpHSVEM1Rx44dueeeewAIDQ2le/funDx5ssY5u3bt\nYvLkyQD069ePCxcuUFpa6vWxCiGEELVJsCpEM/LDDz/w5Zdf0q9fvxrfP3HiBBEREbbb4eHhlJSU\neHt4QgghhAMJVoVoJsrKynjsscd45513CA0NdThee0uQojhdjRFCCCG8SoJVIZqBK1euMHr0aCZO\nnOi0RqnRaKS4uNh2u6SkBKPR6M0hCiGEEE5JsCrELU5VVaZOnUpsbCwzZ850ek5KSgrr1q0D4ODB\ng7Ru3ZoOHTp4c5hCCCGEU1INQIhb3F/+8hcGDhxIz549bUv7r732Gj/++CNwtTQUwHPPPUdOTg4h\nISFkZmbSu3fvJhuzEEKIZsnp/jMJVoUQQgghhC+Q0lVCCCGEEMK/SLAqhBBCCCF8lgSrQgghhBDC\nZ0mwKoQQQgghfJYEq0IIIYQQwmdJsCqEEEIIIXyWBKtCCCGEEMJnSbAqhBBCCCF8lgSrQgghhBDC\nZ0mwKoQQQgghfJYEq0IIIYQQwmdJsCqEEEIIIXyWBKtCCCGEEMJnSbAqhBBCCCF8lu4GxxWvjEII\nIYQQQggnZGZVCCGEEEL4LAlWhRBCCCGEz5JgVQghhBBC+CwJVoUQQgghhM+SYFUIIYQQQvgsCVaF\nEEIIIYTP+v/YLseLtZ7EnQAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x, y = meshgrid(np.linspace(-1.9,1.75,25), np.linspace(-0.5,4.5,25))\n",
"z = rosen([x,y])\n",
"fig = figure(figsize=(12,5.5))\n",
"ax = fig.gca(projection=\"3d\"); ax.azim = 70; ax.elev = 75\n",
"ax.set_xlabel(\"X\"); ax.set_ylabel(\"Y\"); ax.set_zlim((0,1000))\n",
"p = ax.plot_surface(x,y,z,rstride=1, cstride=1, cmap=cm.jet)\n",
"intermed = ax.plot(xi[:,0], xi[:,1], rosen(xi.T), \"g-o\")\n",
"rosen_min = ax.plot([1],[1],[0],\"ro\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Powell 算法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 [Powell 算法](https://en.wikipedia.org/wiki/Powell%27s_method)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(31L, 2L)\n",
"Solved Powell's method with 855 function evaluations.\n"
]
}
],
"source": [
"xi = [x0]\n",
"result = minimize(rosen, x0, method=\"powell\", callback=xi.append)\n",
"xi = np.asarray(xi)\n",
"print xi.shape\n",
"print \"Solved Powell's method with {} function evaluations.\".format(result.nfev)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x, y = meshgrid(np.linspace(-2.3,1.75,25), np.linspace(-0.5,4.5,25))\n",
"z = rosen([x,y])\n",
"fig = figure(figsize=(12,5.5))\n",
"ax = fig.gca(projection=\"3d\"); ax.azim = 70; ax.elev = 75\n",
"ax.set_xlabel(\"X\"); ax.set_ylabel(\"Y\"); ax.set_zlim((0,1000))\n",
"p = ax.plot_surface(x,y,z,rstride=1, cstride=1, cmap=cm.jet)\n",
"intermed = ax.plot(xi[:,0], xi[:,1], rosen(xi.T), \"g-o\")\n",
"rosen_min = ax.plot([1],[1],[0],\"ro\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 04-scipy/04.06-integration-in-python.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 积分"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 符号积分"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"积分与求导的关系:\n",
"\n",
"$$\\frac{d}{dx} F(x) = f(x)\n",
"\\Rightarrow F(x) = \\int f(x) dx$$\n",
"\n",
"符号运算可以用 `sympy` 模块完成。\n",
"\n",
"先导入 `init_printing` 模块方便其显示:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sympy import init_printing\n",
"init_printing()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from sympy import symbols, integrate\n",
"import sympy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"产生 x 和 y 两个符号变量,并进行运算:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAFYAAAAlCAYAAADY4B6YAAAABHNCSVQICAgIfAhkiAAAA4FJREFU\naIHt2UuIHFUUxvFfEskYoxFfmBiNY4JEGYzGiEqiaNABSVw4IrNQcZOVulBIFAV3IkRRwfiAgIsy\nii9ERfCBJMYEUUQFdaGoEB8Iig9E1BAFExenm+kuu0xN1e2Zsak/NN236ta5H7fOveec2zQ0/J+Y\nlcDGgQQ2Gnrw7HQLmInMrvn8cnyeQsigUXdi1+PlFEIaunlG/ZczkNSZlCPwB/Yn0jJQ1JnYUWxP\nJaRhgq04ZrpFzFTqeOzR+DmVkEGj6sSuxIcphQwah1R8LlWadR5W40iswZ3YncBuSqZU43MJbByO\nzR3tcezF4gS2UzGlGo8VgasuK0SqtqzVXiDOHcYT2E7FlGq8FlcmsDNLLLP2QdCIEL0yge1UTKnG\nTBQHqXkc9/XBbkpKa+yVFSzBnIL+c3AYfqumq5AN+A6batpZoXpAPhi1NB6K94X792INNlbTVcjl\nQnR7/OEatrKazxcxaY15j90oIt4lBf1Tn2ZdhONbNhfiMixKaD8FtTWehLOwDW8U9HmhpK1VeAD3\n43lRpd2Ou/GEiLJLxZZyIPdZMBnROTLlPXYYD4oJuzp370ZxDpJU43XYh3m56ydiS4nnl+JhE6sh\nE4fhq8VWsl/67aRNpvzEPoK5uAkf5+69i6frCOkVvHZgSExCJ+vwagmbm3CbiePE+fgFb+Mb4cVZ\nBa0puQBv4S+xtDv/BZmPs7GrHwN/qrvigCfFxn0wTsm1v8VdKUSVIFPOYxcK51mMvzHWcW9ULPeR\nOkKKUpPtugPYXOHd+0rY/LLj93IhfmcldcU8hjN7XF+Cc4Un5tmAD1q/v299j+N3vNLR70L8hE+S\nKM1xhXiTR7Xao7ihgp3r8afIfdssK+ibgszk0q3X8GLu2psi4Nai6Nhwp1gOa1vt9brfahHzcA/O\naLVHRWDY2zHeLZWU9oeT8VlHe0jk8LVPr4om9ldRKFzaag/jqxL21omJG8FpOFV4bJs7xDKeKXwt\nUsE2m0UcqR24/qv824GrxOR8UdLeLrEcV4nIer5Ia7aKfe8lvFNRaz+4GY/iIbGqzhFO9VE/B10r\ntoN7cXE/B0pIpnpJO1sEtW2pxBQxJN7iD/p3sJGaLSKVKsNTuguDMbGqTk8tqhevS/NvwUzkR1HS\nwgnYg2tSGS86HmyzCO/5d8k3COzBcaLyGsOtylWWDQ0NDQ3TzD+oDaLToDx6/gAAAABJRU5ErkJg\ngg==\n",
"text/latex": [
"$$\\sqrt{x^{2} + y^{2}}$$"
],
"text/plain": [
" _________\n",
" ╱ 2 2 \n",
"╲╱ x + y "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x, y = symbols('x y')\n",
"sympy.sqrt(x ** 2 + y ** 2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于生成的符号变量 `z`,我们将其中的 `x` 利用 `subs` 方法替换为 `3`:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAEoAAAAlCAYAAADlcn/+AAAABHNCSVQICAgIfAhkiAAAA49JREFU\naIHt2WuoVFUUwPFfXvEmlqI9vGbqTYmIwDKiKIuSuiDZh4y4HzJKECIqSJDyY0RBEtkHiyCImAx6\nEdWH3mgvougFWVBkIAUFYS+kMrHMPqwzdGY65845c851Jps/XIZ99tlrr1mz9tprrcuAAXVyRA0y\nDtYg43/BU71W4FAwpeL6U7CzDkX6naqGWoUX6lDkcOdJ1Y39n6DKlzwav+GvmnTpa6oYagzb6lLk\ncOZBHNNrJQ4VVTxqDn6sS5F+p1tDLcPHdSrS70ztcl0dacE5OA+zsBx34K2KMvuOpyuuPwqbUuNx\n7MX8inL7imNFIK/CUpFWLEnGM0XNOF5R7qTRzdFbiVcq7vspzsWuZLwg+fyyotyiLMZt2IcDmIGN\n+K7OTRoi2ayTR7G5Zpl5nIQfcEXq2dXYoaTjLMRQztyQ+rsF63C36i2fpYp90efwk9Ybf7rwrrVF\nNzsSH4obKYvl2FBUWAEuE4Zq7j1aQVajwPpp+APvZ8x9gefzFrbnURvEzXNxzvt1dgsuxNxE3oiI\nffNqkp3HHOF1+zLm9uDsIkIW4AxsxWs57zxbQM4o7hMGuKpt7kZRHy7GL+KmS//NLKJoDg2dPWpI\nFPJZHvVNokPhOHWNsPj0tucnYkuB9Q8IF78Zn7TNvYcniipSkoZiR/dhEczTMXFEpCsHcXzWoqwS\nZjuGRTxKcyle6qDE+Xgb+8VRSnc/Z+BMvNlBxmSzUQTz65LxVNzkn5LsQBlhn2vNnOExEXAnYkQY\neX6y4erU3Jj4xU4ro0gJGopfBrNFHnUv7sQicYn9Luf2zTuP27QG9GnC+7KCYJpmwjaOX/Fiau4C\n4fKfdZDRiUdwesbzhSIY78+YW4ePUuOfcXvbO3PxjpL/VbpceMTsZDyGG0qsf1nkK2newDNllChJ\nQ/fpxXHCQNfnvZDXZnk9WbgiGa/S6h2dWCTykibDIjfrh+7AeuwWl1OTa/GtMHYmeYbaI87sJcl4\nFF+VUOZrkbM02STiW68DOdG52Is/k/Ey3CLCRW5omShn2I4rcbLyxep6PIT7E6XOEsbfUVLOZLBZ\n9MDuEjXrLBFq3u1W4Apx/O7BRRUUmyKC/NYKMorQUK0E6pph4Q27lauqH9eaaK4WN9Gp9amWyRaR\nnvSEV5XvZn4vShg4QfSc1tSpVC/Ia6c0mYcP/LsUmYhd4rpdKbzpVp0z+gEDBgwYUIG/Aayknkb9\n3TKcAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$\\sqrt{y^{2} + 9}$$"
],
"text/plain": [
" ________\n",
" ╱ 2 \n",
"╲╱ y + 9 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z = sympy.sqrt(x ** 2 + y ** 2)\n",
"z.subs(x, 3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"再替换 `y`:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAASCAYAAACNdSR1AAAABHNCSVQICAgIfAhkiAAAAMxJREFU\nKJHN0TFLQmEUBuDHFIKGFhVcmvwFDW35T/wHQXOLo3/AsSVozTlwCwcbGhoaxHLJTVAIAo0cbLjf\nhevHTW5bL5zh/d5zXt7vHP6AcsQn+MAyaOe4xhMW8fA2qm9cpGIlap5hgDrecIPxb7Ee9mU+2CfG\nKEX8EfeoYoMmrvCaNzzFSYa3MUejSKwyVugVjfoeamd1Q8kfWjnutdjhE885zl+Sy+7gTrKFLE4l\nl+zEzWfo4yjwEm4xwmH6kEULl1jjGC/ohij/BT8UwSaNbxctpgAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$5$$"
],
"text/plain": [
"5"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z.subs(x, 3).subs(y, 4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"还可以从 `sympy.abc` 中导入现成的符号变量:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAADgAAAAXCAYAAABefIz9AAAABHNCSVQICAgIfAhkiAAAAwFJREFU\nWIXt1luIV1UUBvCf5jRTpqNEmdeGSaickHoIqYx8CZoIwiAhUCh96KVMnHqIsIjCSzREQw9JEIE+\n2IUukJQPGjVRQSlRURFCklFZ2kOF0lDaw9qH/57tmWb+MzqCzAebc9Z31t57rX1Z3+Esx6RxnGsJ\nrkc7bsAT+GAc5z+tuACbM3sFjmLumQnn1GMxjuOyZE/HCZHoWYFJ4ohWV6JLJHjNGYuowDL8jvWn\naLxt6B3GpwUdQ3zrwFZswWuYhlmYOdqA7hIrvnW0A2RYg6f8f4Gbgsdwfs23DuzD7GT3oA+TsWmI\nPiPCwjTxWHCbSBDaDL1DPeLeljgXe7E64+7ED+l9Np7OO0xuIrj9+KcJ/xI3iWO0E5fgFo1dyDFN\nyMkXNd8eSH22Z1w75osj/bOo2AuaCawVl2Mprm6mY4ZO/CmOed6m1/jegQdr+DYcFvqZozeN1Zrs\nFXioLojl4m48jMfxXGpXYVca5KXC/8s06QbcjI14Fh/hutpUh0ef2O0Sd6cYugr+E/yR2Z14q+x8\nJfYU3EqDE/qssOFCsTM7Ne5WFeSBmiBHgtednAQR9DG8m7Xd+Bf9mV+7WHg07uBiXCzOf4U38Vdm\n5+8VjqTWiRcz/itciouGy6YGU/F3wZ0jdvUNcXer1ptyeC/zPSqKERoJ9osEfxQadT/Ow30jDOpz\ncXwqDGTBNovfnKxnc8XOfFzw3en5asbNxK+VUSX4k/jT2CFEvQ8Hhf6NBOWKjwXfYl7BzUrPrzNu\niigo/bIjKSrqN5VRJXitEN57k8MCvCyEvdX44h3cWHCVPP2Scd3i1G0ofJeKmoBGgl0G79ZBIabH\nMWNs8TaNvULrWjKuEvJch3vwAt4v+i8Ri4TBQr8OczJ7Hr7DoWS3qP+TqeNbimezeAarMvuIkJ4r\nkr1anKy1Rb9bRSEaKHgr8UgaeCOeFBo4X1SvT0URGRByMhW3i9Wu+A/Fyr8ifsxP4Hs8Osoku7Eo\nsxfhbTwvakRb4T8H94xyrglMYAKnCf8B3eKPw+iETXAAAAAASUVORK5CYII=\n",
"text/latex": [
"$$\\sin^{2}{\\left (\\theta \\right )}$$"
],
"text/plain": [
" 2 \n",
"sin (θ)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sympy.abc import theta\n",
"y = sympy.sin(theta) ** 2\n",
"y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对 y 进行积分:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n9yxvAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$\\frac{\\theta}{2} - \\frac{1}{2} \\sin{\\left (\\theta \\right )} \\cos{\\left (\\theta \\right )}$$"
],
"text/plain": [
"θ sin(θ)⋅cos(θ)\n",
"─ - ─────────────\n",
"2 2 "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Y = integrate(y)\n",
"Y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"计算 $Y(\\pi) - Y(0)$:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nlqIAAAAASUVORK5CYII=\n",
"text/latex": [
"$$1.5707963267949$$"
],
"text/plain": [
"1.57079632679490"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"np.set_printoptions(precision=3)\n",
"\n",
"Y.subs(theta, np.pi) - Y.subs(theta, 0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"计算 $\\int_0^\\pi y d\\theta$ :"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAACEAAAAZCAYAAAC/zUevAAAABHNCSVQICAgIfAhkiAAAAc5JREFU\nSInt1k2IjlEUB/DfMOWzMQtponzUu5gtZVZYCCVlYTaMmrKwsdDEUlamLJSyYEXKR5RCDRELUT6i\nkFnZDQtJioWJmfKxOM+bd67rfXg9Q03+9dS5/+fcc//3nOee5zJFseVfC+jG5d+dNK1iEX04l3A9\nuIhrGMYJLKp43Ql4jFkN4xW4gc5iPBd38AZLJ0NAD04n3FXUEm45vuL8ZIg4go0J9wEvsSDh3+Ft\n1QKm4xnaE34YY1iW8K8xmgvUIVL0UaQr93zB6szc9Tia4eegK+EWFrFu1Ym68jacwhOcFGf9EUYw\ngGMYxyfcyyzWh+MZftSPO95dbGZf6txvYj0viBTDUCZ4I2biabGRMtTEdzJY5tiJS4U9Gw9K/Htx\n8BcEzMBDHE5f5JrVdtwv7G58Lgm+DWdLfNpEma9jT4kvIrUrC3sTnjfxnSd2V4ZB7E+4/rqRZmIN\nlojOR5yYxaLuOfSKltwMO8SHeCDhV9WN9FzvxU3fS/CqELAOVzILbMXOJgLW4pAow5kGvl0c0yxG\nsKFh3IEX2Jzx7cLtJgKIzviznpNmpiUMYFcVgf4EdzG/ikCt3idqeK+in1CrInKXl7+OIXFB+Y+p\nh284OVxxrb4HkAAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$\\frac{\\pi}{2}$$"
],
"text/plain": [
"π\n",
"─\n",
"2"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"integrate(y, (theta, 0, sympy.pi))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"显示的是字符表达式,查看具体数值可以使用 `evalf()` 方法,或者传入 `numpy.pi`,而不是 `sympy.pi` :"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nlqIAAAAASUVORK5CYII=\n",
"text/latex": [
"$$1.5707963267949$$"
],
"text/plain": [
"1.57079632679490"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"integrate(y, (theta, 0, sympy.pi)).evalf()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAJMAAAASCAYAAABfCexoAAAABHNCSVQICAgIfAhkiAAABchJREFU\naIHt2WuMXVUVB/DfQEsZWoHwHAkNLS3iI1FKKkVAYkRISEggTeQRG0C+CBgCRh5KBIsFITXRiGCx\nEBiF8LAEmkAT1AhaPwA18hAioZKYajHIEFCgUrTt+GHt4+x7Zp/be+7cfiHzT07u3Wuvs9ZZ+6y9\nHvswjWkMCEMN9L3wFD7ZQtbLWIEnsAWL8Q1cgpcSz6m4Dc/jPbyPHZmM3+PW9P9I3IhNGMcBuAL/\nyPjbyDsc38ZWbMdsXIXXCrZ8BMszme+l8TsZz7H4SpobFmv23fQsOY5J6zCMQ7EB1+LVPvTuKntz\nXI6ZYu1z9CXv0+mhxneitI7x2vUffLXG8/UCX36dmvj2wWYsy+69Gi9ijz7kzccbWJrdu0y8lBm1\nZ/w4/orj0ngEfxEvtcIiPIo9M9oqvI2jMtrR+CX2TeM5WI/XMa8PvbvC3hyHiUCwvEZvLe9jWIdR\nEZXaOtMmrMbDWJnk1bEKc4Xn75bRj8ct2fgGseD5g+6H/+KiPuStxZs1nmGxy87PaDNEhL0so83F\nGC7NaD8Q63NWRjst0W7OaOuwUCcWJb77+9A7aHvrWJ2ebXmN3q88hEO1dabf9MBzS4E2B4+JNFFh\nIx4p8L6Ax1vK20M44YYC78siwlS4QETUfQu8Oc7Fv3ByRjtbrNlNGe1dEW0Oqt3/ltjpbfUO2t4c\nS03YsDyj9yvv/xi1a5yphFVYko0/lHTfWuD9hXiJbeSNJHnrC7wbRASs8Cv8aSfym7AS2/CpjPaC\nqGvm13hfE+lkEHqnYm+FObgj/a87U8/yuuXPtpiFa7C/8OQFovDc2OWe47E7ns5oh6Xftwv8W7B3\n0vV+j/LG8G+d9U2FQ3CgWIftOEEs0Ik4RSzyPFyHZ7vYMR/n4WKdBfixYnPkReohONjE5huagt6p\n2Lsto3/T5IJ7KvI6MKp9ZHpF5PMKy0TnNdLlnj+YvGuPS7qvK/DfneYObiEP7hRpJe9eR0QnNC7S\n0AHp/0u4MOP7nOimPlGQe5roYP8oGoTdCjx13CQctyq0+9FbYSr2VjhKOFOFUs3URt4kjGrvTPWF\n3F149M0FXjhJObQvUTaIKFrHxY7oVR6xezaKVp7YSdfjmSRvf+Gg46KoHK7dv1n32mCGSFVPCedo\nwkJRR12f0frVO1V7iXf2U50dcmnte5LXy07qFTtq4+0iRJ7ewH+xWPw6xrromJ1+3ynMNcmrZC4R\nu+n7YrFuF8+8VXQqbybeV8QZTo7Notie1SB/m4hQS8Q5UAmzcK/omL6V0fvVO1V7CecYFcV/N/Qq\nr4hR7SLTevyuQN+clNUxU+zQGwpzs9ND/rAw97johNrI64a/4dfZ+HVlO34r1uPDafxRkw909048\nO0TNk2NIONJ3Gp6jV70VBmHvCH5U4GnKCjuTN7DItMjkBSRC/qYC/RjhNG8U5raIonNuYW4hnmsp\nrwkHihPpNRmtKU1VBf+YcJpnRYhfkPFsT79DIsXnWCFqomsz2rkt9eYYhL1fEJtibXatS3Nnp/FS\nzSitXxGjukemI3Tm9zUm8nCF6nDumsL956W5iwpzxA5+VWfBtyDdUz9V70XeZWL3H5rRLheRM+9S\nzhF1Xm7bEP6Jn6fxnqJb/bM4SK2wOD1D3lnBl5Uj0uqWenMMyt465ilHpp7kNUWmimGvwtyJ4rBq\nbUZbiZ9k/EP4Gp5Mc3VU1X9Trl4ldl7+OeUSUXDe3oe8OeJlVe3rIvGd70ydafgB0drnDvtF4TxX\npvFWfE80FnnKvVSknvwFfz7xHo57sut+cWTQRm+OQdlbx8zab9/yDhKHgi+a+NYzJj7cfinjO1K0\n/D+u3f9ZEaF+JhxtheZdcIbYdYsbzYqWdZ34dHEHHlJOfb3IGxYv9S48KDqvzzTw7ici8xpR59yn\nM51VOD/N3Z3kPSA+1OZ4S/N3tBV96mWw9hKp+wn83URn+WTS04+8aUxjGtOYxjQ+aPgf1hMJbOhz\nlqIAAAAASUVORK5CYII=\n",
"text/latex": [
"$$1.5707963267949$$"
],
"text/plain": [
"1.57079632679490"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"integrate(y, (theta, 0, np.pi))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"根据牛顿莱布尼兹公式,这两个数值应该相等。\n",
"\n",
"产生不定积分对象:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$$\\int \\sin^{2}{\\left (\\theta \\right )}\\, d\\theta$$"
],
"text/plain": [
"⌠ \n",
"⎮ 2 \n",
"⎮ sin (θ) dθ\n",
"⌡ "
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Y_indef = sympy.Integral(y)\n",
"Y_indef"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"print type(Y_indef)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"定积分:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nHA6HIwn+B7jjVvTlLJflAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$\\int_{0}^{\\pi} \\sin^{2}{\\left (\\theta \\right )}\\, d\\theta$$"
],
"text/plain": [
"π \n",
"⌠ \n",
"⎮ 2 \n",
"⎮ sin (θ) dθ\n",
"⌡ \n",
"0 "
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Y_def = sympy.Integral(y, (theta, 0, sympy.pi))\n",
"Y_def"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"产生函数 $Y(x) = \\int_0^x sin^2(\\theta) d\\theta$,并将其向量化:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"Y_raw = lambda x: integrate(y, (theta, 0, x))\n",
"Y = np.vectorize(Y_raw)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"\n",
"x = np.linspace(0, 2 * np.pi)\n",
"p = plt.plot(x, Y(x))\n",
"t = plt.title(r'$Y(x) = \\int_0^x sin^2(\\theta) d\\theta$')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 数值积分"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"数值积分:\n",
"\n",
"$$F(x) = \\lim_{n \\rightarrow \\infty} \\sum_{i=0}^{n-1} f(x_i)(x_{i+1}-x_i) \n",
"\\Rightarrow F(x) = \\int_{x_0}^{x_n} f(x) dx$$\n",
"\n",
"导入贝塞尔函数:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from scipy.special import jv"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def f(x):\n",
" return jv(2.5, x)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEACAYAAABfxaZOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmczXX///HHy1K2EqlMsu+T0W9sKWFs0UxX8lOWyKip\nK1kGaZkuhK6ISiHL2AalqMs6XBVizkiLRk0MMxiFLFGSNNbB+/vHDM3FDDPnzJz3WV73283t9vmc\n8zmf99O51cv7vD+fz/stxhiUUkr5h0K2AyillHIfLfpKKeVHtOgrpZQf0aKvlFJ+RIu+Ukr5ES36\nSinlR1wu+iLSQUS2i0iqiLyUzfshIvKniCRm/hnmaptKKaWcU8SVD4tIYWAy0BY4ACSISKwxJuWy\nQ+ONMQ+50pZSSinXudrTbwLsMsbsMcakAwuBjtkcJy62o5RSKh+4WvQrAPuy7O/PfC0rA9wrIptF\n5BMRCXSxTaWUUk5yaXiHjIJ+Ld8DFY0xJ0XkAWAZUMvFdpVSSjnB1aJ/AKiYZb8iGb39S4wxf2XZ\n/lREpopIWWPM0azHiYhOAqSUUk4wxuR6CN3V4Z1NQE0RqSIi1wFdgdisB4jIbSIimdtNALm84F9k\njNE/xjBixAjrGTzlj34X+l3od3H1P3nlUk/fGHNORPoDq4DCwGxjTIqIPJP5/nTgEeBZETkHnAS6\nudKmUkop57k6vIMx5lPg08tem55lewowxdV2lFJKuU6fyPVAISEhtiN4DP0u/qbfxd/0u3CeODMm\nVBBExHhKFqWU8hYignHjhVyllFJeRIu+Ukr5ES36SinlR1y+e0ep3Dhx4gQHDhzg4MGDVKlShSpV\nqtiOpJRf0qKv8tWZM2f48MMP2bBhAwcOHGD//v0cOHCAU6dOcccddxAQEEBqaiolSpSgdevWtG7d\nmlatWhEQEGA7ulJ+Qe/eUfni6NGjREdH8+6773LXXXfRqVMnKlasSIUKFbjjjjsoW7YsmQ9mY4wh\nJSWFdevWsW7dOhwOBwEBAbRp04bnnntOfwUolQd5vXtHi75yye7du5kwYQLvv/8+Dz30EEOGDCEo\nKChP5zh//jybN29myZIlREdH869//YvIyEiKFNEfokpdixZ95Ra7du1i6NChrF27lqeeeooBAwZQ\nocLls2rnXWpqKn369OHYsWPMmDGDhg0b5kNapXyX3qevCtySJUu49957CQ4OZvfu3YwdOzZfCj5A\nzZo1+fzzz4mMjCQ0NJQhQ4aQlpaWL+dWSmnRV3mQnp7O888/z3PPPcd///tfoqKiuOGGG/K9HREh\nPDycrVu38ttvv1GvXj0++eSTfG9HKX+kwzsqVw4ePEjXrl254YYbeP/997n55pvd1vaaNWt48skn\nGTZsGM8884zb2lXKG+jwjsp369ato1GjRnTo0IGVK1e6teADtGvXDofDwejRo4mOjnZr20r5Gr09\nQuXowoULjB07lnfffZf58+fTpk0ba1mqV69OXFwcrVu3BqBPnz7WsijlzbToq2wZY4iMjCQhIYFN\nmzbl24VaV1SvXp1169bRunVrjDE8++yztiMp5XVcHt4RkQ4isl1EUkXkpasc11hEzonI/3e1TVWw\njDG8+OKLbNy4kdWrV3tEwb/oYuEfO3Ys06ZNsx1HKa/jUk9fRAoDk4G2ZCySniAiscaYlGyOGwd8\nBuT6goOyY9SoUaxevZq4uDhKly5tO84VLg71tGrVCmMMffv2tR1JKa/h6vBOE2CXMWYPgIgsBDoC\nKZcdNwBYBDR2sT1VwMaNG8dHH31EfHw8ZcuWtR0nR9WqVbtU+EVEh3qUyiVXi34FYF+W/f3A3VkP\nEJEKZPxD0JqMoq/3ZXqoSZMmMWPGDNavX8+tt95qO841XSz89957L/Xq1aN58+a2Iynl8Vwt+rkp\n4BOAKGOMkYwZt3Ic3hk5cuSl7ZCQEF0H041mzpzJ+PHjiY+P96gx/GupVq0aMTExPPbYYyQmJlKu\nXDnbkZQqUA6HA4fD4fTnXXo4S0SaAiONMR0y918GLhhjxmU55if+LvTlgJPA08aY2MvOpQ9nWTJ/\n/nyioqKIi4ujZs2atuM45cUXXyQ5OZnY2FgKFdLHT5T/cOuEayJSBNgBtAEOAt8C3S+/kJvl+DnA\nCmPMkmze06JvQVxcHN27d2fdunUEBgbajuO09PR0WrRoQefOnXn++edtx1HKbfJa9F0a3jHGnBOR\n/sAqoDAw2xiTIiLPZL4/3ZXzq4L1888/89hjjzF//nyvLvgARYsWZeHChTRp0oT77ruPpk2b2o6k\nlEfSuXf81OnTp2nevDldunThhRdesB0n3yxbtoxBgwaRmJhImTJlbMdRqsDpfPrqmowxREREcOLE\nCRYuXHhpRStfMXDgQH7++WeWLFnic383pS6nE66pa4qOjiYhIYGYmBifLIpvvPEG+/btY/Lkybaj\nKOVxtKfvZ7766is6derEl19+SY0aNWzHKTA//vgjTZs25bPPPtPVt5RP056+ytEvv/xCly5dmDNn\njk8XfMiYqmHSpEn06tWL9PR023GU8hha9P3E2bNneeSRR3jmmWcIDQ21HcctunXrRsWKFZk0aZLt\nKEp5DB3e8RP9+/dn3759LF261K8eXkpNTeWee+5h8+bNXvWksVK5pcM76gqxsbF88sknvPfee35V\n8CFjofU+ffowZMgQ21GU8gja0/dxhw4dIjg4mEWLFtGsWTPbcaw4efIkd955J7NmzbK6+pdSBUF7\n+uqSi/fjR0RE+G3BByhRogQTJkygf//+nD171nYcpazSou/DoqOj+fXXXxkxYoTtKNY99NBDVKtW\njXfeecd2FKWs0uEdH7Vjxw7uu+8+NmzYQO3atW3H8Qg//vgjd999N4mJiVSsWNF2HKXyhQ7vKNLT\n0+nRowevvvqqFvwsqlevTv/+/Rk8eLDtKEpZoz19HzRs2DASExNZuXKlT06z4IpTp05Rr149pk6d\nSvv27W3HUcplOuGan9uwYQOPPvooP/zwA7fddpvtOB7pv//9L4MHDyYpKYnrr7/edhylXKLDO37s\n+PHj9OrVi+nTp2vBv4qwsDDq1q3LhAkTbEdRyu20p+9DIiIiKFy4MDNmzLAdxeNt376d5s2bk5qa\nyk033WQ7jlJOc3tPX0Q6iMh2EUkVkZeyeb+jiGwWkUQR+U5EWrvaprrSqlWrWLt2LePHj7cdxSvU\nqVOHsLAw3n77bdtRlHIrV9fILUzGGrltgQNAApetkSsiJY0xJzK3g4ClxpgrpnjUnr7zjh8/TlBQ\nEDNnzuT++++3Hcdr7N69m0aNGrFjxw7KlStnO45STnF3T78JsMsYs8cYkw4sBDpmPeBiwc9UCjji\nYpvqMlFRUbRt21YLfh5VrVqVrl27Mm7cONtRlHIblxZGByoA+7Ls7wfuvvwgEXkYeB0IALQy5aP4\n+HhiY2PZunWr7SheaejQoQQFBTF48GBuv/1223GUKnCuFv1cjccYY5YBy0SkOfA+kO0TQyNHjry0\nHRISQkhIiIvxfNvJkyeJiIhg6tSpejHSSRUqVOCJJ55gzJgxuryi8goOhwOHw+H0510d028KjDTG\ndMjcfxm4YIzJ8feyiPwINDHG/H7Z6zqmn0fPP/88Bw4cYMGCBbajeLXffvuNOnXq8N1331GlShXb\ncZTKE7c+nCUiRci4kNsGOAh8y5UXcqsDPxljjIg0AP5jjKmezbm06OfBxo0b6dixI0lJSdxyyy22\n43i9YcOGcfDgQWJiYmxHUSpP8lr0XRreMcacE5H+wCqgMDDbGJMiIs9kvj8d6Az0EpF0IA3o5kqb\nCs6cOcOTTz7JxIkTteDnk+eff56aNWuyc+dOatWqZTuOUgVGH87yQsOHDycpKYmlS5fq3Dr5aMyY\nMSQlJelwmfIqOveOj9u8eTPt2rXjhx9+0LtN8llaWho1atRg9erV1K9f33YcpXJF597xYefOnSMi\nIoKxY8dqwS8ApUqV4qWXXuKVV16xHUWpAqNF34tMmjSJ0qVL88QTT9iO4rOeffZZNm3aREJCgu0o\nShUIHd7xErt376Zx48Z888031KhxxSwWKh9NmjQJh8PBkiVLbEdR6pp0TN8HGWN44IEHCAkJISoq\nynYcn3fixAmqVq3KF198oSuPKY+nY/o+6MMPP+TQoUMMGTLEdhS/ULJkSfr168ebb75pO4pS+U57\n+h7uyJEj1KtXjxUrVtC4cWPbcfzG77//Ts2aNUlKSqJChQq24yiVIx3e8THh4eGULVuWd955x3YU\nvzNo0CCKFi2qPX7l0bTo+5A1a9bw1FNPsW3bNkqVKmU7jt/5+eefCQ4OZteuXZQpU8Z2HKWypWP6\nPuLkyZP06dOHadOmacG3pFKlSoSFhTFt2jTbUZTKN9rT91Avvvgi+/bt0ykBLNu6dStt27Zl9+7d\nFC9e3HYcpa6gwzs+IDExkfbt25OUlMRtt91mO47f+8c//kFoaCjPPvus7ShKXUGLvpc7d+4cTZo0\nITIykt69e9uOo4ANGzYQHh7Ojh07KFLE1XWHlMpfOqbv5caPH0+5cuUIDw+3HUVluu+++wgICGDx\n4sW2oyjlMu3pe5DU1FTuueceEhISqFq1qu04KosVK1bwyiuv8P333+t01sqjaE/fS124cIGnn36a\noUOHasH3QGFhYZw9e5Y1a9bYjqKUS1wu+iLSQUS2i0iqiLyUzfs9RGSziGwRkS9FRCcqz8asWbM4\ndeoUkZGRtqOobBQqVIiXXnqJceNyXP5ZKa/g6hq5hclYI7ctcABI4Mo1cu8Bko0xf4pIBzIWUm+a\nzbn8dnjn4MGD3HXXXaxbt46goCDbcVQO0tPTqV69OkuXLqVhw4a24ygFuH94pwmwyxizxxiTDiwE\nOmY9wBjztTHmz8zdjcAdLrbpU4wx9OvXj2effVYLvocrWrQo/fv3Z+LEibajKOU0V+8/qwDsy7K/\nH7j7KsdHAJ+42KZPWbx4MTt27GDhwoW2o6hceOqpp6hevTq//PILAQEBtuMolWeuFv1cj8eISCvg\nSaBZTseMHDny0nZISAghISEuRPN8R48eJTIykkWLFnH99dfbjqNyoWzZsnTr1o3o6GhGjRplO47y\nQw6HA4fDwYULF1i5cmWeP+/qmH5TMsboO2TuvwxcMMaMu+y4+sASoIMxZlcO5/K7Mf0nn3ySkiVL\n8u6779qOovIgJSWFkJAQ9u7dS7FixWzHUX5q8ODBpKSksGrVKreO6W8CaopIFRG5DugKxGY9QEQq\nkVHwe+ZU8P3R6tWrWbt2LWPGjLEdReVR3bp1CQ4O1iE5Zc3777/PihUrnJqby+WHs0TkAWACUBiY\nbYx5XUSeATDGTBeRWUAn4OfMj6QbY5pkcx6/6ekfO3aMoKAg5syZQ9u2bW3HUU747LPPiIqKIjEx\nUR/WUm713Xff0aFDB+Li4qhXr57OveMNevfuTcmSJZkyZYrtKMpJFy5cIDAwkOnTp9OyZUvbcZSf\n+PXXX2ncuDFvv/02nTt3BvJ+y6bOHuVmsbGxbNiwgR9++MF2FOWCQoUKMXDgQCZMmKBFX7lFeno6\njz76KI8//vilgu8M7em70e+//05QUBAfffQRzZs3tx1HuejEiRNUrlyZb7/9lmrVqtmOo3xcZGQk\nP/74I7GxsRQuXPjS6zr3jgfr168f3bp104LvI0qWLMmTTz7J5MmTbUdRPm7u3Ll89tlnfPDBB/9T\n8J2hPX03+fjjj3nllVdITEzUFZh8yMV1dPfs2cMNN9xgO47yQQkJCYSGhhIfH09gYOAV72tP3wMd\nPnyYyMhI5s2bpwXfx1SqVInWrVszd+5c21GUD0pLS6Nr165Mnz4924LvDO3pFzBjDJ06dSIwMFDv\nyfdRX375Jb1792bHjh0UKqT9KJV/+vXrx8mTJ5kzZ06Ox+jdOx5m/vz5/PTTT3z00Ue2o6gCcu+9\n91K6dGk++eQTHnzwQdtxlI+Ii4tj+fLlJCUl5et5tVtSgPbu3cuQIUOYN2+ezq3jw0SEQYMGMWHC\nBNtRlI9IS0sjIiKC6dOnU6ZMmXw9tw7vFJD09HRatGhB586def75523HUQXs7NmzVK5cmbVr1+bb\n2KvyXwMGDOCvv/7K1bUifSLXQ0RFRbFlyxZWrlyp47x+4pVXXuHo0aN6C6dyicPhoGfPniQlJeWq\nl69F3wOsWrWKiIgIEhMTueWWW2zHUW5y4MABgoKC2LNnDzfeeKPtOMoLnThxgvr16zNhwgT+8Y9/\n5OozesumZQcPHqR379588MEHWvD9TIUKFWjbti3vvfee7SjKS7388ss0a9Ys1wXfGdrTz0fnz5+n\nXbt2tGzZkhEjRtiOoyyIj4+nT58+JCcn6+ybKk/i4+N57LHH2Lp1a54u3mpP36IxY8ZgjGHYsGG2\noyhLWrRoQZEiRVi3bp3tKMqLnDhxgoiICKKjo/P9bp3LaU8/n6xfv56uXbvy3Xffcfvtt9uOoyyK\njo5m1apVLF261HYU5SWGDBnC4cOHmT9/fp4/6/YLuSLSgb8XUZmVzVKJdYA5QDAw1BgzPofzeG3R\nP3LkCMHBwcycOZMOHTrYjqMsS0tLo3LlyiQmJlKpUiXbcZSHS05OpmXLlmzbto1bb701z5936/CO\niBQGJgMdgECgu4jUveyw34EBwFuutOWpzp8/T3h4ON27d9eCrwAoVaoUjz/+ONHR0bajKA9njGHg\nwIEMGzbMqYLvDFfH9JsAu4wxe4wx6cBCoGPWA4wxvxljNgHpLrblkaKiojh16hSjR4+2HUV5kL59\n+zJr1ixOnz5tO4ryYMuXL+fgwYP07dvXbW26WvQrAPuy7O/PfM0vzJo1i+XLl7No0SKKFi1qO47y\nILVq1SI4OJj//Oc/tqMoD3X69Gmee+45Jk6c6Nb64WrR985B+HwQFxfH0KFDWblyJWXLlrUdR3mg\nfv366dO5Kkfjx48nODiYtm3burVdV2fZPABUzLJfkYzevlNGjhx5aTskJISQkBBnT1Wgdu7cSbdu\n3ViwYAG1atWyHUd5qLCwMCIjI0lISKBx48a24ygPsm/fPt5++202bdqU5886HA4cDofTbbt0946I\nFAF2AG2Ag8C3QHdjTEo2x44E/vL2u3eOHj1K06ZNefHFF3nqqadsx1Ee7o033iA5OVkXWVH/o3v3\n7tSsWZNXX33V5XPZuGXzAf6+ZXO2MeZ1EXkGwBgzXUTKAwnAjcAF4C8g0BiTdtl5PL7onz17lg4d\nOtCgQQPeessnb0ZS+ezIkSPUqFGD1NRUnZZDARnP9PTs2ZPt27dTokQJl8+nE64VEGMM//znPzl0\n6BDLli1zeXFi5T+eeOIJateuTVRUlO0oyrJz587RsGFDhg4dSpcuXfLlnDoNQwF56623+Pbbb/nw\nww+14Ks86devH9OmTeP8+fO2oyjLZs6cSZkyZXj00UetZdCinwvvvPMO06ZNY+XKldxwww224ygv\n06hRIwICAli5cqXtKMqi33//nREjRjBp0iSrk/Fp0b+Gt956iylTpuBwOKhYseK1P6BUNvr168eU\nKVNsx1AW/fvf/+aRRx6hfv36VnPomP5VvPHGG8ycOZO4uDjuuOMO23GUFzt9+jSVKlViw4YNepuv\nH9q9ezeNGjUiOTmZ2267LV/PrWP6+eT1119n1qxZOBwOLfjKZcWKFSMiIoKpU6fajqIsGD58OJGR\nkfle8J2hPf1sjB49mvfee4+4uDidJlnlm71799KgQQP27t1LqVKlbMdRbpKYmEhoaCg7d+4skGuC\n2tN30auvvsr8+fNxOBxa8FW+qly5Ms2bN+eDDz6wHUW5UVRUFMOHD/eYm0C06Gc6d+4cL7zwAgsX\nLiQuLo6AgADbkZQPunhB11N+1aqC9fnnn/PTTz/x9NNP245yiRZ94PDhw9x///1s3ryZ9evXU758\neduRlI9q06YNZ86cYcOGDbajqAJ24cIFXnrpJcaMGeNRs/D6fdH/6quvaNSoEc2aNePTTz+lXLly\ntiMpH1aoUCG9fdNPfPTRRxQuXJhHHnnEdpT/4bcXco0xTJ48mddee42YmBjCwsLc1rbyb3/++SdV\nqlQhOTlZhxF91NmzZ6lTpw4xMTEFPluwXsjNhbS0NHr06EFMTAxff/21FnzlVqVLl6Zr167MnDnT\ndhRVQKZPn06dOnU8cnp4v+vpJyYm0rNnT+6++26mTJlC8eLFC7xNpS6XlJREhw4d2LNnj0eN9yrX\nHT9+nFq1arF69Wq3PH2rPf0c7N+/n969exMaGsqLL75ITEyMFnxlTVBQEDVq1GDZsmW2o6h89tZb\nb9G+fXvr0y3kxOeL/l9//cXw4cO56667qFChAjt27CA8PNx2LKX0gq4POnToEFOmTMmXxVEKis8W\n/XPnzjFjxgxq167N3r17SUxMZPTo0dx44422oykFQKdOndi5cydbt261HUXlk9GjRxMeHk7lypVt\nR8lRfqyc1YG/V86aZYwZl80xk4AHgJNAb2NMYjbH5MuY/m+//cZ//vMfpk6dSrly5Rg/fjwNGzZ0\n+bxKFYRRo0Zx6NAhpk2bZjuKctHFaTZSUlK49dZb3dauW1fOEpHCZKyR25aMRdITuGyNXBEJBfob\nY0JF5G5gojGmaTbncrroHz9+nKVLl7JgwQK++eYbQkNDCQ8P5/7777c6b7VS1/LLL79w55138tNP\nP3HTTTfZjqNcEBERQUBAAK+99ppb281r0S/iYntNgF3GmD2ZjS8EOgJZF0Z/CJgHYIzZKCI3icht\nxpjDzjZ64cIF9uzZw6ZNm/j4449Zs2YNISEh9O7dm8WLF1OyZEnn/0ZKuVFAQAChoaHMnj2bIUOG\n2I6jnLRz505iY2NJTU21HeWaXC36FYB9Wfb3A3fn4pg7gGyLvjGG06dPc+rUKU6ePMmJEydITU1l\n27ZtbNu2jeTkZFJSUihbtiz169enU6dOl5YgU8obDRw4kC5dujBo0CBditNLjRgxgsGDB3vFrzVX\ni35ux2Mu/+mR7eeKFy/OmTNnuP766ylevDjFixenRIkSVK9encDAQFq2bEnfvn0JDAzUC7LKZzRu\n3Jjy5cuzcuVKOnbsaDuOyqMtW7YQFxfnNQ/buVr0DwBZ1xCsSEZP/mrH3JH52hWee+45ihQpgogQ\nEhLikU+zKVUQIiMjmThxohZ9LzR8+HCioqLctkaCw+HA4XA4/XlXL+QWIeNCbhvgIPAtV7+Q2xSY\nkN8XcpXydmfPnqVq1ap89tlnBAUF2Y6jcmnjxo088sgjpKamUqxYMSsZ3PpErjHmHNAfWAUkAx8Z\nY1JE5BkReSbzmE+An0RkFzAd6OtKm0r5ouuuu45nn32Wd99913YUlQfDhg1j+PDh1gq+M/xu7h2l\nPNWvv/5K7dq12bVrFzfffLPtOOoaHA4HTz31FCkpKVbnT9K5d5TyUrfeeisdO3Zk1qxZtqOoazDG\nMHToUEaOHOl1E+Zp0VfKg0RGRjJlyhTOnTtnO4q6ik8//ZRjx47RvXt321HyTIu+Uh6kQYMGVK5c\nmeXLl9uOonJw4cIFhg0bxr///W+vfK5Ci75SHubi7ZvKMy1ZsoRChQrRqVMn21GcohdylfIw6enp\nVKtWjdjYWIKDg23HUVmcP3+eoKAg3n77bTp06GA7DqAXcpXyekWLFqVv3756+6YH+uCDD7j55ptp\n37697ShO056+Uh7oyJEj1KxZk507d3LLLbfYjqP4e7HzuXPn0qJFC9txLtGevlI+oFy5cnTu3Jno\n6GjbUVSmmJgYatas6VEF3xna01fKQyUnJ9O6dWv27NnjVU98+qJTp05Rs2ZNli5dSuPGjW3H+R/a\n01fKRwQGBtKoUSPee+8921H83rRp02jcuLHHFXxnaE9fKQ8WHx/P008/TUpKilfeE+4L/vrrL2rW\nrMnnn39OvXr1bMe5gvb0lfIhLVq0oEyZMsTGxtqO4rcmTpxImzZtPLLgO0N7+kp5uEWLFvH222/z\n1Vdf2Y7id/744w9q1arF119/TY0aNWzHyZb29JXyMZ06deLXX3/lyy+/tB3F77z55ps8/PDDHlvw\nnaE9faW8wNSpU1m9ejXLli2zHcVvHD58mMDAQBITE6lUqZLtODnKa09fi75SXuDkyZNUrVqV+Ph4\n6tSpYzuOXxg0aBDGGI+fB8ltRV9EygIfAZWBPUAXY8yxbI6LAcKAX40xOa4Dp0VfqasbNWoU+/fv\n95oFuL3Z3r17adCgAdu2baN8+fK241yVO4v+G8ARY8wbIvISUMYYE5XNcc2BNOA9LfpKOe/IkSPU\nqlWL5ORkjy9E3i48PJzKlSvz6quv2o5yTe4s+tuBlsaYwyJSHnAYY7L93SkiVYAVWvSVck2/fv24\n6aabGD16tO0oPmvLli20a9eO1NRUbrzxRttxrsmdRf8PY0yZzG0Bjl7cz+bYKmjRV8plP/74I02b\nNmX37t2UKlXKdhyfFBYWRvv27YmMjLQdJVfyWvSLXONka4DsfkcOzbpjjDEi4nLFHjly5KXtkJAQ\nQkJCXD2lUj6levXqtGrVitmzZzNw4EDbcXyOw+EgJSWFJUuW2I6SI4fDgcPhcPrzrg7vhBhjDolI\nABCnwztKFbyEhAQeffRRUlNTvW5Rbk9mjKFp06YMHDiQxx57zHacXHPnw1mxQHjmdjigNxAr5QaN\nGzematWqLFy40HYUn7J48WLOnj1Lt27dbEcpUK7esvkxUIkst2yKyO3ATGNMWOZxC4CWwM3Ar8Ar\nxpg52ZxPe/pK5VJcXBz//Oc/SUlJoUiRq47SqlxIT0/nzjvvZPLkydx///224+SJPpyllJ8ICQnh\niSeeIDw8/NoHq6uKjo5m0aJFrFmzhoz7UryHFn2l/ER8fDwRERGkpKTo2L4L0tLSqFWrFrGxsTRq\n1Mh2nDzTCdeU8hMtW7akcuXKvP/++7ajeLUJEybQokULryz4ztCevlJebMOGDfTq1YsdO3Zob98J\nv/32G3Xq1GHjxo1eO5Om9vSV8iP33XcfNWrUYO7cubajeKXXXnuN7t27e23Bd4b29JXycl9//TXd\nu3dn587fphsOAAANG0lEQVSdXHfddbbjeI3k5GRatGhBcnIyt956q+04TtOevlJ+5p577qFu3brE\nxMTYjuI1jDEMGjSIYcOGeXXBd4b29JXyAd9++y2PPPIIqampXH/99bbjeLzly5fz8ssvs3nzZq+/\nFqI9faX8UJMmTQgKCmLWrFm2o3i806dPM3jwYCZOnOj1Bd8Z2tNXykds2rSJhx9+mF27dlGsWDHb\ncTzWmDFjSEhIYOnSpbaj5At9OEspP/bQQw/Rrl07BgwYYDuKR9q/fz933XUXCQkJVKtWzXacfKFF\nXyk/lpiYSFhYGLt27aJEiRK243icHj16ULVqVV577TXbUfKNFn2l/FzXrl0JDAxkxIgRtqN4lA0b\nNtC9e3e2b99OyZIlbcfJN1r0lfJzFxf1/v7776lcubLtOB7h/PnzNG7cmBdeeIHu3bvbjpOv9O4d\npfxc5cqViYyM5IUXXrAdxWPMnj2bkiVL+vxc+bmhPX2lfNCpU6eoW7cuc+fO9ftlR//44w/q1q3L\np59+SnBwsO04+U6Hd5RSACxatIhXX32V77//3q8XWunbty8XLlwgOjradpQC4dbhHREpKyJrRGSn\niKwWkZuyOaaiiMSJyDYR2Soi3rHEvFJernPnzpQrV44ZM2bYjmJNXFwcK1asYOzYsbajeAyXevoi\n8gZwxBjzhoi8BJQxxkRddkx5oLwx5gcRKQV8BzxsjEm57Djt6SuVz5KSkmjTpg0pKSncfPPNtuO4\nVVpaGvXr1+fdd98lLCzMdpwC49bhHRHZDrQ0xhzOLO4OY0yda3xmGfCuMWbtZa9r0VeqAAwYMIDz\n588zdepU21Hcqn///qSlpfn8tNPuLvp/GGPKZG4LcPTifg7HVwHigTuNMWmXvadFX6kCcPToUerW\nrcvq1au56667bMdxC4fDQc+ePUlKSqJMmRxLkk/Ia9G/5tUdEVkDlM/mraFZd4wxRkRyrNqZQzuL\ngIGXF/yLRo4ceWk7JCTE7+86UCo/lC1bllGjRhEZGYnD4fC6hb/zKi0tjYiICKZPn+6TBd/hcOBw\nOJz+fH4M74QYYw6JSAAQl93wjogUBVYCnxpjJuRwLu3pK1VAzp8/T8OGDfnXv/5Fly5dbMcpUAMG\nDOD48ePMmzfPdhS3cPfwzhvA78aYcSISBdyUzYVcAeZlHjf4KufSoq9UAfriiy/o0aMHSUlJlC5d\n2nacAhEfH3/p7+iLvfzsuLvolwU+BioBe4AuxphjInI7MNMYEyYi9wHrgS3AxcZeNsZ8dtm5tOgr\nVcD69u3LsWPH+OCDD3xumOfEiRPUr1+fiRMn8uCDD9qO4zb6cJZSKkcnT56kcePGREVF8fjjj9uO\nk68iIyP5888//WZY5yIt+kqpq9qyZQtt2rThm2++oXr16rbj5It169bRq1cvvxrWuUgnXFNKXVX9\n+vUZNmwYjz32GOnp6bbjuGzPnj306NGDuXPn+l3Bd4b29JXyQ8YYwsLCCA4OZvTo0bbjOO3EiRM0\na9aM3r17M2jQINtxrNDhHaVUrhw+fJjg4GA+/PBDr3wmxhhD165dKVGiBHPmzPG5C9O5pcM7Sqlc\nue2224iJiaFXr14cPXrUdpw8e/3119m7dy/R0dF+W/CdoT19pfzcoEGD2LdvH4sWLfKa4rly5Uqe\neeYZEhISuP32223HsUp7+kqpPBk7diy7du1i1qxZtqPkSkpKCk8++SSLFi3y+4LvDP9dWUEpBUCx\nYsVYsGABrVq1okKFCoSGhtqOlKNjx47RsWNHxo0bxz333GM7jlfS4R2lFADffPMNDz30EAsWLKBN\nmza241zh/PnzPPjgg9SqVYuJEyfajuMx9O4dpZTTvvjiCzp37szixYtp3ry57TiXnD59mp49e5KW\nlsaKFSsoWrSo7UgeQ8f0lVJOa968OQsWLKBz58588803tuMAcPz4cR544AEKFSrE8uXLteC7SIu+\nUup/tGnThnnz5tGxY0e+//57q1kOHz5MSEgIgYGBLFiwgOuvv95qHl+gRV8pdYUHHniAGTNmEBoa\nSlJSkpUMP/30E82aNaNjx45MnjyZwoULW8nha/TuHaVUtjp27MiZM2do3749a9eupW7dum5r+4cf\nfiAsLIzhw4fTp08ft7XrD7Snr5TKUZcuXXjzzTdp3rw5kyZN4vz58wXepsPh4P7772fixIla8AuA\n3r2jlLqmHTt28PTTT5Oens7s2bMJDAzM9zaOHj3KmDFjmDdvHh9//DGtWrXK9zZ8kdvu3hGRsiKy\nRkR2ishqEbkpm2OKichGEflBRJJF5HVn21NK2VO7dm0cDgfh4eG0bNmSUaNGcfbs2Xw595kzZxg/\nfjy1a9fmr7/+YsuWLVrwC5ArwztRwBpjTC1gbeb+/zDGnAZaGWP+H1AfaJW5fKJSyssUKlSIPn36\nkJiYyHfffUeDBg1cuq3zwoULfPjhh9SpU4f4+HjWr1/P9OnTCQgIyMfU6nJOD++IyHagpTHmsIiU\nBxzGmDpXOb4EEA+EG2OSs3lfh3eU8hLGGD7++GMGDRpEw4YNCQkJoUWLFgQHB1/zPvojR46wceNG\nRowYQaFChXjzzTdp2bKlm5L7Hrc9kSsifxhjymRuC3D04v5lxxUCvgeqA9OMMS/mcD4t+kp5mWPH\njrFmzRrWr1/P+vXr2b17N02bNqVFixbcd999nDlzhpSUlP/5k56ezp133smAAQPo0qULhQrp/SSu\nyNeiLyJrgPLZvDUUmJe1yIvIUWNM2aucqzSwCogyxjiyed+MGDHi0n5ISIhXLuyglD87evQoX375\nJevXr2fDhg2UKFGCunXr/s+f8uXLe80Uzp7I4XDgcDgu7Y8aNcptPf3tQIgx5pCIBABxVxveyfzM\ncOCUMeatbN7Tnr5SSuWRO+feiQXCM7fDgWXZhCl38a4eESkOtAMSXWhTKaWUC1zp6ZcFPgYqAXuA\nLsaYYyJyOzDTGBMmIvWBuWT841IIeN8Y82YO59OevlJK5ZFOrayUUn5Ep1ZWSimVIy36SinlR7To\nK6WUH9Gir5RSfkSLvlJK+REt+kop5Ue06CullB/Roq+UUn5Ei75SSvkRLfpKKeVHtOgrpZQf0aKv\nlFJ+RIu+Ukr5ES36SinlR7ToK6WUH3G66ItIWRFZIyI7RWT1xRWycji2sIgkisgKZ9tTSinlOld6\n+lHAGmNMLWBt5n5OBgLJgK6SkgtZFz32d/pd/E2/i7/pd+E8V4r+Q8C8zO15wMPZHSQidwChwCwg\n16u7+DP9D/pv+l38Tb+Lv+l34TxXiv5txpjDmduHgdtyOO4d4AXgggttKaWUygdFrvamiKwBymfz\n1tCsO8YYIyJXDN2IyIPAr8aYRBEJcSWoUkop1zm9MLqIbAdCjDGHRCQAiDPG1LnsmDHA48A5oBhw\nI7DYGNMrm/PpeL9SSjkhLwuju1L03wB+N8aME5Eo4CZjTI4Xc0WkJfC8MeYfTjWolFLKZa6M6Y8F\n2onITqB15j4icruI/DeHz2hvXimlLHK6p6+UUsr7WH8iV0Q6iMh2EUkVkZds57FFRCqKSJyIbBOR\nrSISaTuTbfpQXwYRuUlEFolIiogki0hT25lsEZGXM/8fSRKRD0XketuZ3EVEYkTksIgkZXkt1w/J\nXmS16ItIYWAy0AEIBLqLSF2bmSxKBwYbY+4EmgL9/Pi7uEgf6sswEfjEGFMXqA+kWM5jhYhUAZ4G\nGhhjgoDCQDebmdxsDhm1Mqu8PCQL2O/pNwF2GWP2GGPSgYVAR8uZrDDGHDLG/JC5nUbG/9i3201l\njz7Ul0FESgPNjTExAMaYc8aYPy3HsuU4GZ2jEiJSBCgBHLAbyX2MMV8Af1z2cq4eks3KdtGvAOzL\nsr8/8zW/ltmjCQY22k1ilT7Ul6Eq8JuIzBGR70VkpoiUsB3KBmPMUWA88DNwEDhmjPncbirrcvuQ\n7CW2i76//2y/goiUAhYBAzN7/H4n60N9+HEvP1MRoAEw1RjTADhBLn7C+yIRqQ4MAqqQ8Su4lIj0\nsBrKg5iMu3KuWVNtF/0DQMUs+xXJ6O37JREpCiwG5htjltnOY9G9wEMishtYALQWkfcsZ7JlP7Df\nGJOQub+IjH8E/FEj4CtjzO/GmHPAEjL+W/Fnh0WkPEDmQ7K/XusDtov+JqCmiFQRkeuArkCs5UxW\niIgAs4FkY8wE23lsMsb8yxhT0RhTlYwLdeuye4rbHxhjDgH7RKRW5kttgW0WI9m0HWgqIsUz/39p\nS8aFfn8WC4RnbocD1+wsXnXunYJmjDknIv2BVWRciZ9tjPHLOxOAZkBPYIuIJGa+9rIx5jOLmTyF\nvw8DDgA+yOwY/Qg8YTmPFcaYzZm/+DaRca3ne2CG3VTuIyILgJZAORHZB7xCxkOxH4tIBLAH6HLN\n8+jDWUop5T9sD+8opZRyIy36SinlR7ToK6WUH9Gir5RSfkSLvlJK+REt+kop5Ue06CullB/Roq+U\nUn7k/wDY8//eOSbGSgAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.linspace(0, 10)\n",
"p = plt.plot(x, f(x), 'k-')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `quad` 函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Quadrature 积分的原理参见:\n",
"\n",
"http://en.wikipedia.org/wiki/Numerical_integration#Quadrature_rules_based_on_interpolating_functions\n",
"\n",
"quad 返回一个 (积分值,误差) 组成的元组:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from scipy.integrate import quad\n",
"interval = [0, 6.5]\n",
"value, max_err = quad(f, *interval)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"积分值:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.28474297234\n"
]
}
],
"source": [
"print value"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最大误差:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.34181853668e-09\n"
]
}
],
"source": [
"print max_err"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"积分区间图示,蓝色为正,红色为负:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"integral = 1.284742972\n",
"upper bound on error: 2.34e-09\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"print \"integral = {:.9f}\".format(value)\n",
"print \"upper bound on error: {:.2e}\".format(max_err)\n",
"x = np.linspace(0, 10, 100)\n",
"p = plt.plot(x, f(x), 'k-')\n",
"x = np.linspace(0, 6.5, 45)\n",
"p = plt.fill_between(x, f(x), where=f(x)>0, color=\"blue\")\n",
"p = plt.fill_between(x, f(x), where=f(x)<0, color=\"red\", interpolate=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 积分到无穷"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from numpy import inf\n",
"interval = [0., inf]\n",
"\n",
"def g(x):\n",
" return np.exp(-x ** 1/2)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"upper bound on error: 7.2e-11\n"
]
},
{
"data": {
"image/png": "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\nfz8JCQnk5eWxe/duunbtGnTpIiIxUdZAVdLCnlXEOOALzjqrL1999SVZWVlBFyRSaU2ePJk33niD\niRMnMnLkSLKysjj33HMBaN26NZMmTeLkk09mzpw5JCREfoVkZ2czffr0IMsWEQlUFZ5DVZxzbxAO\nt6Fjx85s37496HJEKq1x48bx61//GoD69evTokUL1q07cAeqRYsWccstt3DZZZexadMmAL777rvC\ncCUiUh1VkyG//fbieW2oW/cn1q5dTUpKSsD1iFQuq1atIjs7m48//phTTjml8Pibb77JN998w/bt\n2+ncuTODBg3inXfe4ZFHHqFNmza0bt2am2++OcDKRURiS3OoSpSP57WiUaNEVq/+ksTExKALEqk0\nnnjiCe666y527NiBWal/j4iIVDlah6pEKfj+F2zatJsTT8yhoKAg6IJEKo3c3Fx69uypMCUiUkbV\nMFABpOP7y/j660106XIyvu8HXZBIpfDhhx8WG+oTEZHSqaaBCqARvr+EZcvyOPXU04MuRiRwK1eu\nZMuWLXTp0iXoUkq0ZcsWxo8fz1//+tegSxERAap1oAJojnOfMn/+Qvr3HxR0MSKBmjt3LgAnnXRS\nwJWULDMzk+zsbA3Zi0ilUc0DFUA7nPuIWbNyGTbswqCLEQnM3LlzSUpKom3btkGXElMLFy4MugQR\nqQYUqADognOzmDx5MqNGXR50MSKBmDdvHu3atcPzqtavhXfeeafw+YQJE3j22WcZNmwYixYtCrAq\nEalqtBJfod449zYvvDCYOnXq8Ne/Phl0QSIVZteuXSxbtozhw4cHXUqplWbJl82bN9OoUSMA3n77\nbbp3706nTp3IzMxk1KhRClUiEjNV60/R4zYQeJW//e1vjBlzR9DFiFSYBQsW4Jyjffv2QZdSKlu3\nbmXq1KnMmTOH1atXH7HdlClTGDZsGAB5eXk8/fTTALRp04Y1a9ZURKkiUk2oh+oQFwITeeihy0lN\nTWXMmNuDLkik3H388ccAnHjiiQFXUtzrr7+OmbFw4UJycnJ45513mDBhAhkZGTz88MMlvn/r1q2k\npaUBcM0117B7924A5syZw5AhQ8q19uMxadIkXnzxRRYuXMiWLVto1qwZF1xwAXfccQe1a9cu8f3r\n1q3jpptu4t1338U5x4ABA3jsscdo2rRpBVQvUj2ph+qwRgF/4Y477uDBBx8KuhiRcjd//nwAOnbs\nGHAlByxfvpwzzjiDQYMGMXv2bM4777wyDUmuXr2aVq1aFe4nJCSQnp7O9u3befXVV3nyyZKH9Tdu\n3MiIESPwPI/Fixcf089xLB555BFq1KjBQw89xLRp0/jNb37DU089xcCBA0sc6szPz6dfv36sXLmS\n559/nhdeeIG8vDz69u1Lfn5+Bf0EItWPeqiO6BoA7rjjOnbu3MmDD/4h4HpEys+CBQuoUaNGhX7D\nz/d9nnjiCcLh8CGvtW7dmqFDhwKRuU/9+vUjJSWFQYNKv7zJm2++yZVXXlnsWDgc5v777+eFF16g\nfv36JZ6jcePG3HzzzUybNo3OnTuX+trHa+rUqdSrV69w/8wzzyQjI4Nf/vKX5Obm0rdv3yO+95ln\nnmH16tWsXLmyMFB27tyZ7Oxsnn76aW666aZyr1+kOlKgOqprgFQeeuiX7Nixg7/9TYsIStWzdetW\n1q5dS4cOHQiFQhV2Xc/zuPHGG4/4+pIlS0hKSuLdd9/l7LPPBuDdd99lwIABpTr/nj17qFmzZrFj\n//M//8Ott95Ko0aNeOmllxgxYkSJ55k9ezZnnXVWqa4ZK0XD1H77V7DfuHHjUd87ZcoUTj311GK9\ncy1atKB3795MnjxZgUqknGjIr0QjgX/x1FP/w4gRI4MuRiTmPvvsMwBycnICrqS4t99+m7fffptm\nzZqxZMkSXnzxRXr27Fmq9y5ZsoROnToVO/baa69x++2306lTJ+rXr8+LL75YqnPNnj2bPn36lLX8\nmHv//fcBSvziwNKlSw/7WXbo0IFly5aVS20ioh6qUjofmME//3k227fv4M03/x10QSIxs3/hy/IK\nVCtWrOCFF14gKyuLLVu20KBBA6666qoS3/f//t//O+ZrzpgxgxtuuKHYsYsvvpiLL764xPfOnz+f\niRMn0r59e3zfZ86cOdx3332Fr+/Zs4cnn3ySpKQk5s+fz9VXX81HH33EvHnzuO++++jQocMx130k\nGzZs4O6772bgwIF069btqG23bdtG3bp1DzmekZHBtm3bYl6biEQoUJVaP5yby9tvn84ZZ/Th/fdn\nVrkFEKV62t9DVR5zhD755BNuvvlm3nrrLWrVqsWqVavK/f57zjnC4fAxDV/Onz+fSy+9lLlz59Kg\nQQMmTJiA7/vFeruefPJJrr/+epKTkxk6dChPP/00EyZM4L777mP06NHFAlVBQQHXXHMN+/btK/Ha\nw4cPLxzaLGr37t2cf/75JCYmMnHixDL/TCJSMRSoyqQ7zi1kzpxT6NatBwsXfqxQJXFv8eLFmBld\nu3aN+bl/9atf0bt3b1566SV27dpFw4YN+dOf/hTz6xS1cOFCTj/92G54fsUVV3DVVVfRoEEDINLb\nU3S4zzlH7969SU5OBiK9b48++igJCQns2LHjkPMlJCTw97///ZhqgUhv2LnnnsuaNWt4//33ady4\ncYnvqVu37mF7orZu3UpGRsYx1yIiR2clfQXXzAYDjwEhYLxzbtxh2vQB/gzUALY45/ocpo2Dklc2\njg+r8bxOtGrVlKVLF5GYmBh0QSLHZN++fdSqVYu0tDS+++67mJ575cqVnHjiiWzatKkwoFRmCxYs\noEePHixfvpx27doBcM455zBkyBCuu+66Q9pv2LCBli1bsm3bNmrVqhXzevbt28fQoUP58MMPmTFj\nBj169CjV+/r378/evXv54IMPih3v06cPZsasWbNiXqtIVWRmOOestO2P2kNlZiHgL8AAYAMw38ym\nOOeWF2mTDvwVONs5t97MMo+t9HjSEt9fyVdfdaRVq7asXLmMlJSUoIsSKbMVK1ZQUFDAySefHPNz\nb9++HeCQMLV69WpatmwZ8+sdr1WrVpGWllYYpgoKCvjwww8ZN24cH374YWGvl+/7eJ7He++9x8kn\nn1wYpubMmUPv3r2LnXPfvn1ce+21ZR7y832fESNGkJuby9SpU0sdpgDOO+88br311mL/ndesWcPc\nuXMZN+6Qv4dFJFacc0fcgFOBaUX2bwduP6jNNcB9RztPtJ0DV8W2753nNXCZmY3ctm3bnEi8efXV\nV52ZuTFjxsT83Hv27HH169d3eXl5hccWLFjgxo0bF/NrxcKSJUtcvXr1Cvcfe+wxV6tWLeecc3/4\nwx+cc8699tprrmHDhs4554YNG+ZGjRrlnHNu165d7o9//GPMarn66qudmbm77rrLzZs3r9i2fv36\nwna5ubkuFAq5559/vvDYDz/84Nq0aeM6derkJk+e7CZPnuw6d+7sWrdu7X744YeY1ShS1UUi0tGz\nTdGtpDlUTYB1RfbXAwd/bzkbqGFms4A6wOPOuReOL+bFiwx8fxVbt3agefNWrFixrPBGrCLxYPny\nSGdzecyfSkpK4rXXXuP++++nV69e7N27lyZNmhzXt/fKU05ODjfffDP33XcfqampdO3alb59+/LH\n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\nTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"value, max_err = quad(g, *interval)\n",
"x = np.linspace(0, 10, 50)\n",
"fig = plt.figure(figsize=(10,3))\n",
"p = plt.plot(x, g(x), 'k-')\n",
"p = plt.fill_between(x, g(x))\n",
"plt.annotate(r\"$\\int_0^{\\infty}e^{-x^1/2}dx = $\" + \"{}\".format(value), (4, 0.6),\n",
" fontsize=16)\n",
"print \"upper bound on error: {:.1e}\".format(max_err)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 双重积分"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"假设我们要进行如下的积分:\n",
"\n",
"$$ I_n = \\int \\limits_0^{\\infty} \\int \\limits_1^{\\infty} \\frac{e^{-xt}}{t^n}dt dx = \\frac{1}{n}$$"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def h(x, t, n):\n",
" \"\"\"core function, takes x, t, n\"\"\"\n",
" return np.exp(-x * t) / (t ** n)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"一种方式是调用两次 `quad` 函数,不过这里 `quad` 的返回值不能向量化,所以使用了修饰符 `vectorize` 将其向量化:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from numpy import vectorize\n",
"@vectorize\n",
"def int_h_dx(t, n):\n",
" \"\"\"Time integrand of h(x).\"\"\"\n",
" return quad(h, 0, np.inf, args=(t, n))[0]"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"@vectorize\n",
"def I_n(n):\n",
" return quad(int_h_dx, 1, np.inf, args=(n))"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(array([ 1.97, 1. , 0.5 , 0.2 ]),\n",
" array([ 9.804e-13, 1.110e-14, 5.551e-15, 2.220e-15]))"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"I_n([0.5, 1.0, 2.0, 5])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"或者直接调用 `dblquad` 函数,并将积分参数传入,传入方式有多种,后传入的先进行积分:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from scipy.integrate import dblquad\n",
"@vectorize\n",
"def I(n):\n",
" \"\"\"Same as I_n, but using the built-in dblquad\"\"\"\n",
" x_lower = 0\n",
" x_upper = np.inf\n",
" return dblquad(h,\n",
" lambda t_lower: 1, lambda t_upper: np.inf,\n",
" x_lower, x_upper, args=(n,))"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(array([ 1.97, 1. , 0.5 , 0.2 ]),\n",
" array([ 9.804e-13, 1.110e-14, 5.551e-15, 2.220e-15]))"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"I_n([0.5, 1.0, 2.0, 5])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 采样点积分"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### trapz 方法 和 simps 方法"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy.integrate import trapz, simps"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`sin` 函数, `100` 个采样点和 `5` 个采样点:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"x_s = np.linspace(0, np.pi, 5)\n",
"y_s = np.sin(x_s)\n",
"x = np.linspace(0, np.pi, 100)\n",
"y = np.sin(x)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"p = plt.plot(x, y, 'k:')\n",
"p = plt.plot(x_s, y_s, 'k+-')\n",
"p = plt.fill_between(x_s, y_s, color=\"gray\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"采用 [trapezoidal 方法](https://en.wikipedia.org/wiki/Trapezoidal_rule) 和 [simpson 方法](https://en.wikipedia.org/wiki/Simpson%27s_rule) 对这些采样点进行积分(函数积分为 2):"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Trapezoidal Integration over 5 points : 1.896\n",
"Simpson Integration over 5 points : 2.005\n",
"Trapezoidal Integration over 100 points : 2.000\n"
]
}
],
"source": [
"result_s = trapz(y_s, x_s)\n",
"result_s_s = simps(y_s, x_s)\n",
"result = trapz(y, x)\n",
"print \"Trapezoidal Integration over 5 points : {:.3f}\".format(result_s)\n",
"print \"Simpson Integration over 5 points : {:.3f}\".format(result_s_s)\n",
"print \"Trapezoidal Integration over 100 points : {:.3f}\".format(result)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 使用 ufunc 进行积分"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`Numpy` 中有很多 `ufunc` 对象:"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"numpy.ufunc"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(np.add)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"accumulate(array, axis=0, dtype=None, out=None)\n",
"\n",
"Accumulate the result of applying the operator to all elements.\n",
"\n",
"For a one-dimensional array, accumulate produces results equivalent to::\n",
"\n",
" r = np.empty(len(A))\n",
" t = op.identity # op = the ufunc being applied to A's elements\n",
" for i in range(len(A)):\n",
" t = op(t, A[i])\n",
" r[i] = t\n",
" return r\n",
"\n",
"For example, add.accumulate() is equivalent to np.cumsum().\n",
"\n",
"For a multi-dimensional array, accumulate is applied along only one\n",
"axis (axis zero by default; see Examples below) so repeated use is\n",
"necessary if one wants to accumulate over multiple axes.\n",
"\n",
"Parameters\n",
"----------\n",
"array : array_like\n",
" The array to act on.\n",
"axis : int, optional\n",
" The axis along which to apply the accumulation; default is zero.\n",
"dtype : data-type code, optional\n",
" The data-type used to represent the intermediate results. Defaults\n",
" to the data-type of the output array if such is provided, or the\n",
" the data-type of the input array if no output array is provided.\n",
"out : ndarray, optional\n",
" A location into which the result is stored. If not provided a\n",
" freshly-allocated array is returned.\n",
"\n",
"Returns\n",
"-------\n",
"r : ndarray\n",
" The accumulated values. If `out` was supplied, `r` is a reference to\n",
" `out`.\n",
"\n",
"Examples\n",
"--------\n",
"1-D array examples:\n",
"\n",
">>> np.add.accumulate([2, 3, 5])\n",
"array([ 2, 5, 10])\n",
">>> np.multiply.accumulate([2, 3, 5])\n",
"array([ 2, 6, 30])\n",
"\n",
"2-D array examples:\n",
"\n",
">>> I = np.eye(2)\n",
">>> I\n",
"array([[ 1., 0.],\n",
" [ 0., 1.]])\n",
"\n",
"Accumulate along axis 0 (rows), down columns:\n",
"\n",
">>> np.add.accumulate(I, 0)\n",
"array([[ 1., 0.],\n",
" [ 1., 1.]])\n",
">>> np.add.accumulate(I) # no axis specified = axis zero\n",
"array([[ 1., 0.],\n",
" [ 1., 1.]])\n",
"\n",
"Accumulate along axis 1 (columns), through rows:\n",
"\n",
">>> np.add.accumulate(I, 1)\n",
"array([[ 1., 1.],\n",
" [ 0., 1.]])\n"
]
}
],
"source": [
"np.info(np.add.accumulate)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`np.add.accumulate` 相当于 `cumsum` :"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"result_np = np.add.accumulate(y) * (x[1] - x[0]) - (x[1] - x[0]) / 2"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"p = plt.plot(x, - np.cos(x) + np.cos(0), 'rx')\n",
"p = plt.plot(x, result_np)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 速度比较"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"计算积分:$$\\int_0^x sin \\theta d\\theta$$"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import sympy\n",
"from sympy.abc import x, theta\n",
"sympy_x = x"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"x = np.linspace(0, 20 * np.pi, 1e+4)\n",
"y = np.sin(x)\n",
"sympy_y = vectorize(lambda x: sympy.integrate(sympy.sin(theta), (theta, 0, x)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`numpy` 方法:"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The slowest run took 4.32 times longer than the fastest. This could mean that an intermediate result is being cached \n",
"10000 loops, best of 3: 56.2 µs per loop\n",
"-2.34138044756e-17\n"
]
}
],
"source": [
"%timeit np.add.accumulate(y) * (x[1] - x[0])\n",
"y0 = np.add.accumulate(y) * (x[1] - x[0])\n",
"print y0[-1] "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`quad` 方法:"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10000 loops, best of 3: 40.5 µs per loop\n",
"result = 3.43781337153e-15\n",
"number of evaluations 21\n"
]
}
],
"source": [
"%timeit quad(np.sin, 0, 20 * np.pi)\n",
"y2 = quad(np.sin, 0, 20 * np.pi, full_output=True)\n",
"print \"result = \", y2[0]\n",
"print \"number of evaluations\", y2[-1]['neval']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`trapz` 方法:"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10000 loops, best of 3: 105 µs per loop\n",
"-4.4408920985e-16\n"
]
}
],
"source": [
"%timeit trapz(y, x)\n",
"y1 = trapz(y, x)\n",
"print y1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`simps` 方法:"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1000 loops, best of 3: 801 µs per loop\n",
"3.28428554968e-16\n"
]
}
],
"source": [
"%timeit simps(y, x)\n",
"y3 = simps(y, x)\n",
"print y3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`sympy` 积分方法:"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 loops, best of 3: 6.86 ms per loop\n",
"0\n"
]
}
],
"source": [
"%timeit sympy_y(20 * np.pi)\n",
"y4 = sympy_y(20 * np.pi)\n",
"print y4"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 04-scipy/04.07-ODEs.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 解微分方程"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 积分求解"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 简单的例子"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\\frac{dy}{dt} = sin(t)$$"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def dy_dt(y, t):\n",
" return np.sin(t)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"积分求解:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from scipy.integrate import odeint\n",
"\n",
"t = np.linspace(0, 2*pi, 100)\n",
"\n",
"result = odeint(dy_dt, 0, t)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = figure(figsize=(12,4))\n",
"p = plot(t, result, \"rx\", label=r\"$\\int_{0}^{x}sin(t) dt $\")\n",
"p = plot(t, -cos(t) + cos(0), label=r\"$cos(0) - cos(t)$\")\n",
"p = plot(t, dy_dt(0, t), \"g-\", label=r\"$\\frac{dy}{dt}(t)$\")\n",
"l = legend(loc=\"upper right\")\n",
"xl = xlabel(\"t\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 高阶微分方程"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"抛物运动(竖直方向):\n",
"\n",
"$$\n",
"\\frac{d^2x}{dt^2} = g - \\frac{D}{m}\\frac{dx}{dt}\n",
"$$\n",
"\n",
"改写成如下形式:\n",
"\n",
"$$y = \\left[x, \\frac{dx}{dt}\\right] $$\n",
"\n",
"$$\\begin{aligned}\n",
"\\frac{dy_0}{dt} &= y_1 \\\\\\\n",
"\\frac{dy_1}{dt} &= -g - \\frac{D}{m} y_1 \\\\\\\n",
"\\end{aligned}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def dy_dt(y, t):\n",
" \"\"\"Governing equations for projectile motion with drag.\n",
" y[0] = position\n",
" y[1] = velocity\n",
" g = gravity (m/s2)\n",
" D = drag (1/s) = force/velocity\n",
" m = mass (kg)\n",
" \"\"\"\n",
" g = -9.8\n",
" D = 0.1\n",
" m = 0.15\n",
" dy1 = g - (D/m) * y[1]\n",
" dy0 = y[1] if y[0] >= 0 else 0.\n",
" return [dy0, dy1]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"position_0 = 0.\n",
"velocity_0 = 100\n",
"t = linspace(0, 12, 100)\n",
"y = odeint(dy_dt, [position_0, velocity_0], t)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEPCAYAAABY9lNGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xnc1XPex/HXp6vJSJlsLVpEJEmFVErT1cI0lixjiSnZ\nhrnjzsxtEG40DHfWbLedxCTZJsnadjEG0aJSUm5CqDClspbrc//xPXG5nOpc13XO+Z7l/Xw8zsM5\nv+t3fr/PUV2f890+X3N3REREKqsVOwAREclNShAiIpKUEoSIiCSlBCEiIkkpQYiISFJKECIiklTG\nE4SZ3Wtmy81sXoVj15jZW2Y2x8weN7NfVfjZBWa22MwWmtlBmY5PRESSy0YLYhTQr9Kx54E93b0D\nsAi4AMDM2gLHAW0T77nVzNTKERGJIOO/fN39n8DKSscmuXt54uV0oFni+eHAWHdf5+5LgHeAzpmO\nUUREfi4Xvp2fAjydeL4jsLTCz5YCTbMekYiIxE0QZnYR8J27P7iJ01QLREQkgtqxbmxmJwEHA30q\nHP4IaF7hdbPEscrvVdIQEakGd7dUz43SgjCzfsC5wOHu/k2FH00ABphZHTPbGdgNeC3ZNdy9YB+X\nXnpp9Bj0+fT5ivHzFfJnc6/69+qMtyDMbCzQE9jezD4ELiXMWqoDTDIzgFfcfYi7LzCzh4EFwHpg\niFfnU4mISI1lPEG4+/FJDt+7ifOvBK7MXEQiIpKKXJjFJJWUlpbGDiGj9PnyWyF/vkL+bNVh+diD\nY2bqeRIRqSIzw3N9kFpERHKfEoSIiCSlBCEiIkkpQYiISFJKECIikpQShIiIJKUEISIiSSlBiIhI\nUkoQIiKSlBKEiIgkpQQhIiJJKUGIiEhSShAiIpKUEoSIiCSlBCEiIkkpQYiISFJKECIiklTG96SW\n3FJeDh99BO++C599BitXhse334JZeNSuDdtsA9tuGx7NmkGLFrDFFrGjF5Fs0pajBez772HePHjl\nlfCYNSskhgYNYJddoGHDkAgaNIBf/hLcw2PdOli1Cv79b/j8c/jww5BUGjaE3XaDDh3Co2NHaNcu\nJBQRyX1V3XJUCaLAfPUVPP88/OMfMHEi7LADdOsG++8P++0Hu+4K9epV/brr18PSpfD22zBnTnjM\nmgUffwxdu8IBB0Dv3tClixKGSK5SgihSs2bBbbfBI4/AvvvCkUdC//6hayiTPvsMXn4Z/vlPmDwZ\n3n8f+vaF3/423H+77TJ7fxFJXc4lCDO7FzgEWOHueyWObQuMA3YClgDHuvuqxM8uAE4BvgeGuvvz\nSa6pBEEYT3jsMbj2Wli2DM44A049FRo1ihfTJ5/Ac8/Bk0+GhNG5M/zud3D00bD99vHiEpHcTBA9\ngLXA/RUSxNXAZ+5+tZmdD2zj7sPMrC3wILAf0BSYDLR29/JK1yzqBOEeuo8uvjh051x8MRx6KJSU\nxI7sp778Ep59NrRqnnkGevWCQYNCrBrwFsm+nEsQAGbWEniyQoJYCPR09+Vm1hgoc/c2idZDubtf\nlTjvWWC4u79a6XpFmyDmzYM//hFWr4bLL4fDDw8zj3Ld6tWhtXP//TB/PgweDKefHga9RSQ7qpog\nYq2DaOTuyxPPlwMbOkV2BJZWOG8poSVR9L7+Gi68EPr0Cb9c58yBI47Ij+QAsPXWcPLJMG1aGLOo\nVQu6dw/jFRMmhBlXIpJbos83cXc3s001B5L+bPjw4T88Ly0tpbS0NL2B5ZBXX4WBA6FTJ5g7Fxo3\njh1Rzey6K1x1FVx2WWhV/O1v8Oc/w9ChcMopUL9+7AhFCkNZWRllZWXVfn/MLqZSd19mZk2AaYku\npmEA7j4icd6zwKXuPr3S9Yqii8kdbrgBRoyAO+4ILYZC5B6S4MiRoYVxxhkhWTRsGDsykcKSL11M\nE4DBieeDgfEVjg8wszpmtjOwG/BahPiiW7kSjjoKxo6F6dMLNzlA6Cbbf394+OGQKD7/HNq0gf/8\nz7D2QkTiyHiCMLOxwMvA7mb2oZmdDIwADjSzRUDvxGvcfQHwMLAAeAYYUhRNhUqWLAm/MJs1g5de\ngpYtY0eUPa1ahfUcCxbAlltC+/YwZEhYzS0i2aWFcjlm9uwwDXTYsPANutitWAHXXQd33w2//30Y\nqM/3MRiRWPKli0mSmDQJfvMbuOkmJYcNGjYMA9pvvRXWebRtCxdcELrgRCSzlCByxNNPh2/Ijz8e\nVh7LTzVsGAax33gDPv0UWrcOLYtvv40dmUjhUoLIAZMnw0knhfIUBxwQO5rc1qJF6G564YXwaNMG\nHnwwzIQSkfTSGERkL74YWgyPPw49esSOJv+88AL85S+h5MgNN4RqsiKSnMYg8sjrr4cidg89pORQ\nXT17hmnAf/xjmBY8cKCmxoqkixJEJEuXhrUNd94ZymdI9dWqFcqPvP12mBLcsWNYXKjxCZGaUYKI\n4Msvw14JZ59d2Avgsq1evVC2Y/r0UO9pr71CNVkRqR6NQWRZeXkYc9hmG7jnnvwptpePnn46lOzo\n2DHMgGrePHZEInFpDCLHXXJJKCVx++1KDpl28MGhPHq7drD33mFjpXXrYkclkj/Ugsii558PO77N\nmhX2ipbsWbwYzjwzrMy+886w051IsVELIkctWxbWOjzwgJJDDLvtFrZCPffcsMnS0KGwZk3sqERy\nmxJEFpSXh602//AHKOBtK3KeWVitPn9+mCiw557w1FOxoxLJXepiyoIRI8KA6dSpYUGX5IYpU8K2\np127hkV2atlJoVMXU46ZNSvMoBkzRskh1/TpEwaxmzQJU2LHjVPJDpGK1ILIoHXrwmDon/8MJ54Y\nOxrZlOnTw3anu+8Ot96qkuJSmNSCyCHXXhuqkA4aFDsS2ZwuXUJrb489oEOH0OLLg+8gIhmlFkSG\nvP02dO8OM2YU145whWDmzFC6o3XrsF5Fe2NLoVALIgeUl8Npp8HFFys55KN99w2JvXXrsOXpo4/G\njkgkDrUgMuDOO2HUqLCfdElJ7GikJl59NYwfde4MN98cSqSI5Cu1ICJbtSq0HG69VcmhEHTtGvYJ\n32ab0JqYNCl2RCLZoxZEmp1zDqxeDXfdFTsSSbdJk8JMpyOPDPtkb7ll7IhEqqaqLQgliDRatAi6\ndQsrdRs1ih2NZMLKlTBkSNgbe8wY2Gef2BGJpE5dTBGdey6cd56SQyHbZhsYOzZ0I/brF1bJf/99\n7KhEMiNqC8LMLgAGAuXAPOBkYCtgHLATsAQ41t1XVXpfzrUgJk+GM86ABQtgiy1iRyPZ8MEHPy6A\nvP9+aNEibjwim5M3LQgzawn8AdjH3fcCSoABwDBgkru3BqYkXue08nL4r/+Ca65RcigmLVqEek79\n+kGnTqFUh0ghidnFtBpYB9Q1s9pAXeBjoD8wOnHOaCDnN+V85JEwYHnkkbEjkWwrKYFhw0Ixxosv\nhpNPhrVrY0clkh7REoS7/xu4DviAkBhWufskoJG7L0+cthzI6R7977+H4cPhssu0Q1wx69QplOqo\nVSsMXM+YETsikZqLVl/UzFoBfwJaAl8Aj5jZwIrnuLubWdLBhuHDh//wvLS0lNJIGy089BBstx0c\ndFCU20sOqVcv7DP+8MNhu9Pzzgtdj7U0FUQiKSsro6ysrNrvjzZIbWbHAQe6+2mJ14OArkBvoJe7\nLzOzJsA0d29T6b05MUi9fj20bRvq9fTuHTsaySXvvw8nnAD168Po0ZrZJrkhbwapgYVAVzPb0swM\n6AssAJ4EBifOGQyMjxTfZv3977DjjtCrV+xIJNfstBO88ELoetp7b63AlvwUe5rreYQkUA7MAk4D\n6gMPAy3I4Wmu69aFvQNGjYKePaOGIjlu2rRQ8v3EE+Gvf4Vf/CJ2RFKstJI6S+6/H+67L2wjKrI5\nK1aEEuKrV8ODD4YWhki25VMXU95yD5sBnX9+7EgkXzRsCE89FaZCd+4MTzwROyKRzVOCqIZJk0KS\n0MwlqYpateAvfwnJ4eyzw1a0330XOyqRjVOCqIZrrgn/0LXuQaqja9ewZuLdd+GAA+C992JHJJKc\nEkQVvfFGqLd0/PGxI5F8tu22MH58mArbpUt4LpJrNEhdRYMGQbt2Gn+Q9Jk+HY477sd9JurUiR2R\nFCrNYsqgDz+EDh1C10CDBlm/vRSwf/871HFatiysxNYsJ8kEzWLKoJtvDlMVlRwk3TZ0OR1zTJjl\n9NRTsSMSUQsiZd98A82bh03sW7XK6q2lyPzrXzBgAAwcCJdfDrWjVUyTQqMWRIY8+mio0qnkIJnW\nvXuY5TRzJhx4YOh2EolBCSJFt98Of/xj7CikWOywAzzzTCjjsu++8OKLsSOSYqQuphTMmxd2DVuy\nRHV0JPuefRZOOimUDj/3XK2/kepTF1MG3HEHnHaakoPE0a8fvPYaPPZYmAq7atXm3yOSDkoQm7F2\nbSiudtppsSORYtaiRehmatYslBCfMyd2RFIMlCA246GH4Ne/DjOYRGLaYgu45ZZQMrxv37ARkUgm\naQxiMzp1gr/9LTTzRXLFm2/C734XNqu68caQPEQ2R2MQaTRnTqjjr6qtkmvatYPXX4dPP4UePeCD\nD2JHJIVICWITHngg1F7SpvOSi7beOqzPOeaYUPBvypTYEUmhURfTRqxfHwYGp06FNm0yeiuRGps2\nLVSGPfvsUEhSU2Elmap2MW1yEb+ZNQSOAX4NtAQceB94EXjE3VdUP9TcNmVKmDGi5CD5oFev0OV0\n9NGhOuzo0aGFIVITG+08MbN7gIeBesDtwGDgZOAOoD7wsJndnY0gY9jQvSSSL5o1gxdegMaNQ8G/\nBQtiRyT5bqNdTGbW3t3nbvLNKZyTCZnuYlqzJkxrXbw4lDwQyTf33RdWXd92W2hViID2g0iL++6D\nf/xDG8tLfps1K0yFPfZYuOIKVYWVDExzNbPDzGy2ma00szWJx+qahZnb1L0khWCffcK4xKxZYR3P\nZ5/FjkjyTSoTOG8gjD9s5+71E4+0DH+ZWQMze9TM3jKzBWbWxcy2NbNJZrbIzJ43s6xuz/PBB2Hf\n6UMPzeZdRTJj++1Dsb9OncJj5szYEUk+SSVBLAXmu3t5Bu5/I/C0u+8BtAcWAsOASe7eGpiSeJ01\n48aFZvkvf5nNu4pkTkkJjBgB114bWhIq0SGp2uwYhJl1BS4DpgHfJQ67u19foxub/QqY7e67VDq+\nEOjp7svNrDFQ5u5tKp2TsTGILl1Cf23fvhm5vEhU8+eHirAHHQTXXw916sSOSLIpE6U2LgfWAr8k\nTHmtR5jmWlM7A5+a2Sgzm2Vmd5nZVkAjd1+eOGc50CgN90rJ++/Du++GTVpECtGee4bS4e+/D336\naLc62bRU5jU0cfcDM3TvfYCz3P11M7uBSt1J7u5mlrSpMHz48B+el5aWUlpaWuOAHnsMDj9c+z5I\nYWvQIMzQu+wy2G+/UK6jS5fYUUkmlJWVUVZWVu33p9LFdDUwxd2fq/Zdkl+3MfCKu++ceH0AcAGw\nC9DL3ZeZWRNgWra6mLp1g0suUeVWKR4TJoS9Tv7nf+DUU2NHI5mW9nUQZrYWqEsYf1iXOOzpmMlk\nZi8Cp7n7IjMbnrgPwOfufpWZDQMauPuwSu9Le4JYuhQ6dAhNbrUgpJgsXAhHHAG9e8MNN2hcopDl\n1UI5M+sA3A3UAf6PUMqjhFDiowWwBDjW3VdVel/aE8RNN8Hs2TBqVFovK5IXvvgCTjwRPv88dDk1\nbhw7IsmEtCUIM2vl7v+3mZtt9pxMyESC6NEDhg2DQw5J62VF8kZ5OVx+Odx9dxiP69w5dkSSbulM\nEOOArYAJwAzgE8CAJkAnoD+wxt0H1DToqkp3gvj447AByyefaGcukSeegD/8Aa66Ck4+OXY0kk5p\n7WIys12BAUB3YKfE4feBl4Cx7v5uDWKttnQniP/931Ai+f7703ZJkbz21lthXOI3v4HrrtO4XKHI\nqzGI6kp3gujdO2y0cvjhabukSN5btQp+/3v48kt45BFVNi4E2pO6ilatghkz4MBMrPQQyWMNGoRp\nsN27h/USs2bFjkiyregTxHPPwa9/DXXrbv5ckWJTUhJKz1xzTehuevDB2BFJNhV9hfiJE1W5VWRz\njjkGdt89jEvMnh2K/5WUxI5KMi2V/SCmpHIsH33/PTzzjKa2iqSiffsf95c4+GBYuTJ2RJJpm9qT\neksz2w7YIbFHw4ZHS6BptgLMpFdfDfv4Nm8eOxKR/LDddqFbtm3bMC4xf37siCSTNtXFdAZwNrAj\nUHGbkTXALZkMKlsmToTDDosdhUh+qV0bRo6EvfeG0tKwsE4zAAtTKrWYhrr7TVmKJyXpmubarh3c\nc48qWYpU12uvhQ22Tj8d/vu/wVKeQCkxZGQdhJl1A1pSocXh7tGWlaUjQbz3HnTtGlZP1yr6uVwi\n1ffJJ3DUUaG7dtQoqFcvdkSyMWlfB2FmfweuBQ4A9qvwyGtPPRUG2pQcRGqmSRMoK4P69cOaiffe\nix2RpEsq01z3BdpmbI/PSCZODPVmRKTmttgidNfefDPsvz+MHQu9esWOSmoqle/PbxIK9BWMtWvh\nX//S6mmRdDKDoUNhzBgYMABuuQUK62tl8dloC8LMnkw8rQcsMLPXgG8Tx9zd+2c6uEwpKwtT9Lau\n8ZZHIlJZnz7w8sthZtOcOaEYpjYhyk+b6mK6LmtRZNnkyWo9iGRSq1bwyiswaFBIGI89Bg0bxo5K\nqqooq7nuuSeMHg2dOqUxKBH5mfJyGD48/HsbPz6snZB4MrEn9Zokh78AXgfOibEnRE0SxEcfhZIB\nK1aoloxItjzyCAwZEsYljjsudjTFq6oJIpVZTDcCHwJjE68HAK2A2cC9QGkVY4xq8uSw/4OSg0j2\nHHMM7LZbKPY3d27Y2lRTzHNfKi2Iue7evtKxN9y9o5nNcfcOGY0weUzVbkEMHBjKe59+epqDEpHN\nWrECjj4att0WHnggrJ2Q7MnEhkFfmdlxZlYr8TgW+Cbxs7wawHDXALVITA0bhn+DDRuG9RLvRtm0\nWFKVSoL4PTAIWJF4nAgMNLMtgbMyGFvazZsXygDsvHPsSESKV506cMcd8B//Ad26wdSpsSOSjSmq\nWUzXXQfvvAO33ZaBoESkyqZOhRNOgEsuCQlDxf4yK22D1GZ2vrtfZWY3J/mxu/vQakX48/uUADOA\npe5+mJltC4wDdgKWAMe6+6p03GvSJI09iOSS3r1DVYP+/cPg9U03aVFdLtlUF9OCxH9nVnjMqPA8\nXc5O3GtDk2AYMMndWwNTEq9r7Ntvw19E1YcRyS0bFtV9/HEYH/z009gRyQYpdzGZ2Vbu/mVab27W\nDLgPuAL4r0QLYiHQ092Xm1ljoMzd21R6X5W7mKZNg2HDYPr0NAUvImlVXh72lBg7Fp54IqxXkvTK\nRLnvbma2AFiYeN3RzG6tQYwVjQTOBcorHGvk7ssTz5cDjdJxI81eEslttWrBlVfCFVeE8hzjx8eO\nSFJZKHcD0A94AsDd3zCznjW9sZkdCqxw99lmVprsHHd3M0vaVBg+fPgPz0tLSyktTXqJH7zwQljy\nLyK57YQTwqK6o46CN9+Eiy7S4HV1lZWVUVZWVu33p7JQ7jV372xms91978SxGi+QM7MrCdNn1wO/\nBLYGHidsRlTq7svMrAkwraZdTF9/DTvsAMuXw1Zb1SRqEcmWjz+GI48M09LvvRfq1o0dUf7LxEK5\nD8yse+LidczsL8Bb1Q1wA3e/0N2bu/vOhPIdU919EDABGJw4bTBQ44bm9Omw115KDiL5ZMcdQ2n+\n2rVD9YOlS2NHVHxSSRD/AZwJNAU+AvZOvE63DU2CEcCBZrYI6J14XSMvvBD+golIftlyy1CS45hj\noEsXTTLJtqJYKNenD5xzTtiDWkTy05NPwimnwMiRoaaaVF3ayn1XWiDnQMWLpm2hXHVUJUF89x1s\nt11onv7qVxkOTEQy6s03w6K6Y48Ns51Ulblq0jkGUXFh3OH8dJFcOhfKZdSMGWFGhJKDSP5r1w5e\new1efTWUDl+9OnZEhS2lLqaKM5hyQVVaECNGhNlLI0dmOCgRyZrvvoOhQ+Gll2DCBNhll9gR5YdM\nzGLKaxqgFik8deqEopsbKsLWYKq/bEJBJ4j16+Hll6FHj9iRiEi6mcGZZ8KYMWEb0zvvjB1R4dlU\nNde1/Dj1dMtKe1O7u2+d0cjS4I03oHlz2H772JGISKb06RO6mvr3D4PY118f1k5IzW20BeHu9dy9\nfuJRu8Lz+vmQHABefFHdSyLFYLfdQkXYRYvgt7+FlStjR1QYCrqL6cUXoWeNq0aJSD5o0AAmTgxV\nE7p0gbffjh1R/ivYhXLuof7S3Llhyb6IFI977oELLwyrsA86KHY0uUOzmBIWLw77Tys5iBSfU0+F\nRx+FwYPhxhvDF0apuoJNEK+8Al27xo5CRGLp0SPMYrz7bjjjjLB2QqqmoBPE/vvHjkJEYtp555Ak\nli0LG4Z99lnsiPKLEoSIFLT69eEf/wi/D7p0gfnzY0eUPwpykHrNGmjcOEx1q1Mni4GJSE574IFQ\n2XnUKDjkkNjRZJ8GqYHXX4eOHZUcROSnBg2CJ56A00+Ha6/V4PXmFGSCUPeSiGzM/vuH3xFjxoTZ\nTt9+Gzui3FWQCeLVVzWDSUQ2rkWLUJ5j1Sro2xdWrIgdUW4quAThHhKEWhAisilbbRXWSvTqFQav\n586NHVHuKbgE8c47YR/bpk1jRyIiua5WLbjsMrjyylD074knYkeUWwqu5qEWyIlIVR1/PLRqBUcd\nBQsXwnnnhXLixa7gWhDqXhKR6ujcOfz+ePjhUKLjm29iRxRfwSUIzWASkepq1gz++U/4+mvo3Tts\nV1zMCipBrF0b6sHvnTO7Z4tIvqlbF8aNC6U5OneGOXNiRxRPtARhZs3NbJqZzTezN81saOL4tmY2\nycwWmdnzZtYg1WvOmAHt28MWW2QubhEpfLVqwV//CldfHabBjh8fO6I4YrYg1gF/dvc9ga7AmWa2\nBzAMmOTurYEpidcpmTED9tsvI7GKSBE67jh4+mk46ywYMaL4Vl5HSxDuvszd30g8Xwu8BTQF+gOj\nE6eNBo5I9ZozZkCnTumOVESK2X77wfTpP+4vUUyD1zkxBmFmLYG9gelAI3ffMDS0HGiU6nVmzoR9\n9017eCJS5Jo2DVsYf/NNcQ1eR18HYWb1gMeAs919jVWYfOzubmZJG3XDhw//4XlpaSkdO5aybBm0\naZPhgEWkKNWtCw89FBbWdekSFtV16BA7qk0rKyujrKys2u+PWu7bzH4BTASecfcbEscWAqXuvszM\nmgDT3L1Npff9rNz31KlwySWhvoqISCaNGxfGJe66C45IuRM8vrwp922hqXAPsGBDckiYAAxOPB8M\npDR/QOMPIpItxTJ4HXMMojswEOhlZrMTj37ACOBAM1sE9E683iyNP4hINhXD4HXB7CjXqhVMnAh7\n7BEpKBEpSl99BSedBEuXhq1NG6U8rSb78qaLKZ1Wrgz13Fu3jh2JiBSbDYPXBx4YBq8LaeV1QSSI\nmTNDeY2SktiRiEgx2rDyesSIsPK6UMqGR5/mmg4afxCRXDBgAOyyS+GUDS+IFoRmMIlIrqhYNvyk\nk/J7z+uCSBBqQYhILmnWLKy8/uqrsFNdvu55nfcJ4vPP4bPPNEAtIrllq63CgrrevcPg9bx5sSOq\nurxPEBsGqGvl/ScRkUJTec/rJ5+MHVHV5P0g9cyZGn8Qkdx2/PE/Dl6//Tacc05+DF7n/ffumTNh\nn31iRyEismlduoTB6zFj4NRT82PwOu8TxJw50LFj7ChERDavefNQUHTVqrCw7tNPY0e0aXmdINau\nhY8+gt13jx2JiEhqttoq1G/q0SO0Kt58M3ZEG5fXCWLevFB7qXbej6SISDGpVQuuuCKsvu7dO1SG\nzUV5nSDmzMn9DTtERDZm0CAYPx5OOw1Gjsy9suFKECIiEXXrBq+8AqNGwemnw3ffxY7oR0oQIiKR\n7bQT/OtfYa/rgw4KC4BzQd4miPLyMAahBCEihaB+/bCfROfOYfD6rbdiR5THCeK992CbbcJDRKQQ\nlJTA1VfDRRdBz57w3HNx48nbBKHuJREpVCefDI89FrYyvfnmeIPXShAiIjmoRw94+WW4/XY480xY\nty77MShBiIjkqF12CTOcliyB3/42bK+cTUoQIiI5bOutQxXYvfaCrl1h8eLs3TtvE8Snn0KrVrGj\nEBHJvJKSsJDunHPggANg6tTs3DdvE0S7duF/mohIsTj9dHjoITjhBLjjjszfLycThJn1M7OFZrbY\nzM5Pdk779tmOSkQkvl69QkXYkSPhT3+C9eszd6+cSxBmVgLcAvQD2gLHm9kelc/T+IOIFKtddw17\nSyxYAIcdBl98kZn75FyCADoD77j7EndfBzwEHF75JCUIESlmDRqEKrC77hq2PLj0Uli2LL33yMVC\n2U2BDyu8Xgp0qXySuphEpNjVrh0W0g0ZAjfdFLY/6NsXdtghTddPz2XSKqU1g9dfP/yH56WlpZSW\nlmYoHBGR3LbHHnDbbXDllaF8+Ndfh+OLFpWxeHFZta9rnmMFyM2sKzDc3fslXl8AlLv7VRXO8VyL\nW0Qk15kZ7m6pnp+LYxAzgN3MrKWZ1QGOAyZEjklEpOjkXBeTu683s7OA54AS4B53z4HCtyIixSXn\nuphSoS4mEZGqK4QuJhERyQFKECIikpQShIiIJKUEISIiSSlBiIhIUkoQIiKSlBKEiIgkpQQhIiJJ\nKUGIiEhSShAiIpKUEoSIiCSlBCEiIkkpQYiISFJKECIikpQShIiIJKUEISIiSSlBiIhIUkoQIiKS\nlBKEiIgkpQQhIiJJKUGIiEhSShAiIpJUlARhZteY2VtmNsfMHjezX1X42QVmttjMFprZQTHiExGR\neC2I54E93b0DsAi4AMDM2gLHAW2BfsCtZlZ0rZyysrLYIWSUPl9+K+TPV8ifrTqi/PJ190nuXp54\nOR1olnh+ODDW3de5+xLgHaBzhBCjKvS/pPp8+a2QP18hf7bqyIVv56cATyee7wgsrfCzpUDTrEck\nIiLUztQ/zu36AAAFzElEQVSFzWwS0DjJjy509ycT51wEfOfuD27iUp6J+EREZNPMPc7vXzM7CfgD\n0Mfdv0kcGwbg7iMSr58FLnX36ZXeq6QhIlIN7m6pnhslQZhZP+A6oKe7f1bheFvgQcK4Q1NgMrCr\nx8piIiJFLGNdTJtxM1AHmGRmAK+4+xB3X2BmDwMLgPXAECUHEZE4onUxiYhIbsuFWUxVYmb9Eovo\nFpvZ+bHjSScza25m08xsvpm9aWZDY8eUbmZWYmazzezJ2LGkm5k1MLNHE4tAF5hZ19gxpVNiEet8\nM5tnZg+a2RaxY6oJM7vXzJab2bwKx7Y1s0lmtsjMnjezBjFjrImNfL6NLlJOJq8ShJmVALcQFtG1\nBY43sz3iRpVW64A/u/ueQFfgzAL7fABnE7oQC7HpeiPwtLvvAbQH3oocT9qYWUvCpJJ93H0voAQY\nEDOmNBhF+F1S0TBgkru3BqYkXuerZJ8v6SLljcmrBEEYvH7H3Ze4+zrgIcLiuoLg7svc/Y3E87WE\nXzA7xo0qfcysGXAwcDeQ8kyKfJD4JtbD3e8FcPf17v5F5LDSaTXhC0xdM6sN1AU+ihtSzbj7P4GV\nlQ73B0Ynno8GjshqUGmU7PNtYpFyUvmWIJoCH1Z4XbAL6RLf2PYm/CEWipHAuUD55k7MQzsDn5rZ\nKDObZWZ3mVnd2EGli7v/mzDz8APgY2CVu0+OG1VGNHL35Ynny4FGMYPJsIqLlJPKtwRRiN0SP2Nm\n9YBHgbMTLYm8Z2aHAivcfTYF1npIqA3sA9zq7vsAX5Lf3RM/YWatgD8BLQmt2npm9vuoQWVYYgZl\nQf7OSXGRct4liI+A5hVeN+enpTnynpn9AngM+Lu7j48dTxp1A/qb2XvAWKC3md0fOaZ0WgosdffX\nE68fJSSMQtEJeNndP3f39cDjhD/TQrPczBoDmFkTYEXkeNIusUj5YGCzCT7fEsQMYDcza2lmdQiV\nXydEjiltLCwKuQdY4O43xI4nndz9Qndv7u47EwY3p7r7ibHjShd3XwZ8aGatE4f6AvMjhpRuC4Gu\nZrZl4u9pX8Jkg0IzARiceD4YKKQvaRsWKZ8LHL6hgsWm5FWCSHxzOQt4jvCXc5y7F8xMEaA7MBDo\nlZgKOjvxB1qICrHp/p/AGDObQ5jFdGXkeNLG3ecA9xO+pM1NHL4zXkQ1Z2ZjgZeB3c3sQzM7GRgB\nHGhmi4Deidd5KcnnO4WwSLkeYZHybDO7dZPX0EI5ERFJJq9aECIikj1KECIikpQShIiIJKUEISIi\nSSlBiIhIUkoQIiKSlBKEFD0z267CupNPzGxp4vkaM7slQ/c8K7GidWM/729mF2fi3iKp0joIkQrM\n7FJgjbtfn8F7GDAL2C+x+HNj58xOnLMuU7GIbIpaECI/ZwBmVrphYyMzG25mo83sRTNbYmZHmdm1\nZjbXzJ5JlMDGzPY1szIzm2Fmz26o61NJd2DhhuRgZkMTG/HMSax+3VAo7hXgoGx8YJFklCBEUrcz\n0IuwZ8DfCRvLtAe+Bg5JFFq8Gfidu3cibNhyRZLrHEAoWbHB+UDHxCYuZ1Q4/hrw67R/CpEU1Y4d\ngEiecOAZd//ezN4Earn7c4mfzSOUwW4N7AlMDj1ElBD2TqisBfBShddzgQfNbDw/LQ73MT/fEUwk\na5QgRFL3HYC7l5tZxXGBcsK/JQPmu3sqZbAr7olxCKGlcBhwkZm1S+z6VYvCLGooeUJdTCKpSWWT\no7eBHcysK4S9PcysbZLz3gc27DlgQAt3LyNsMPQrQrVNgCaJc0WiUIIQ+Tmv8N9kz+Hn3+w9Mdvo\naOAqM3uDMAtp/yTXf4mwAQ+ElscDZjaXMLPpRndfnfhZZ+DFmnwQkZrQNFeRLKswzbWLu3+3kXNq\nJc7ptLGpsCKZphaESJYlprDexaa3fDwUeFTJQWJSC0JERJJSC0JERJJSghARkaSUIEREJCklCBER\nSUoJQkREklKCEBGRpP4fPzntqp99LaMAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"p = plot(t, y[:,0])\n",
"yl = ylabel(\"Height (m)\")\n",
"xl = xlabel(\"Time (s)\")"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Integration successful.\n",
"['hu', 'imxer', 'leniw', 'lenrw', 'message', 'mused', 'nfe', 'nje', 'nqu', 'nst', 'tcur', 'tolsf', 'tsw']\n",
"cumulative number of function evaluations at each calculated point: [ 45 49 51 53 55 59 61 61 63 65 67 67 69 71 73 73 75 77\n",
" 77 79 79 81 81 83 85 85 87 87 89 89 91 91 93 95 95 97\n",
" 97 99 99 101 101 103 103 105 107 107 109 109 111 111 113 113 115 115\n",
" 117 117 119 119 121 121 123 123 123 125 125 127 127 129 129 131 131 131\n",
" 133 133 135 135 135 137 137 139 139 139 141 141 143 143 143 145 145 147\n",
" 147 149 149 149 154 158 274 280 280]\n",
"cumulative number of time steps [ 20 22 23 24 25 27 28 28 29 30 31 31 32 33 34 34 35 36\n",
" 36 37 37 38 38 39 40 40 41 41 42 42 43 43 44 45 45 46\n",
" 46 47 47 48 48 49 49 50 51 51 52 52 53 53 54 54 55 55\n",
" 56 56 57 57 58 58 59 59 59 60 60 61 61 62 62 63 63 63\n",
" 64 64 65 65 65 66 66 67 67 67 68 68 69 69 69 70 70 71\n",
" 71 72 72 72 73 75 130 133 133]\n"
]
}
],
"source": [
"y, infodict = odeint(dy_dt, [position_0, velocity_0], t, full_output=True, printmessg=True, )\n",
"print sorted(infodict.keys())\n",
"print \"cumulative number of function evaluations at each calculated point:\", infodict['nfe']\n",
"print \"cumulative number of time steps\", infodict['nst']"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 04-scipy/04.08-sparse-matrix.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 稀疏矩阵"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`Scipy` 提供了稀疏矩阵的支持(`scipy.sparse`)。\n",
"\n",
"稀疏矩阵主要使用 位置 + 值 的方法来存储矩阵的非零元素,根据存储和使用方式的不同,有如下几种类型的稀疏矩阵:\n",
"\n",
"类型|描述\n",
"---|----\n",
"`bsr_matrix(arg1[, shape, dtype, copy, blocksize])`\t| Block Sparse Row matrix\n",
"`coo_matrix(arg1[, shape, dtype, copy])`\t| A sparse matrix in COOrdinate format.\n",
"`csc_matrix(arg1[, shape, dtype, copy])`\t| Compressed Sparse Column matrix\n",
"`csr_matrix(arg1[, shape, dtype, copy])`\t| Compressed Sparse Row matrix\n",
"`dia_matrix(arg1[, shape, dtype, copy])`\t| Sparse matrix with DIAgonal storage\n",
"`dok_matrix(arg1[, shape, dtype, copy])`\t| Dictionary Of Keys based sparse matrix.\n",
"`lil_matrix(arg1[, shape, dtype, copy])`\t| Row-based linked list sparse matrix\n",
"\n",
"在这些存储格式中:\n",
"\n",
"- COO 格式在构建矩阵时比较高效\n",
"- CSC 和 CSR 格式在乘法计算时比较高效"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 构建稀疏矩阵"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy.sparse import *\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"创建一个空的稀疏矩阵:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<2x3 sparse matrix of type ''\n",
"\twith 0 stored elements in COOrdinate format>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"coo_matrix((2,3))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"也可以使用一个已有的矩阵或数组或列表中创建新矩阵:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" (0, 0)\t1\n",
" (0, 1)\t2\n",
" (1, 2)\t3\n",
" (2, 0)\t4\n",
" (2, 2)\t5\n"
]
}
],
"source": [
"A = coo_matrix([[1,2,0],[0,0,3],[4,0,5]])\n",
"print A"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不同格式的稀疏矩阵可以相互转化:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"scipy.sparse.coo.coo_matrix"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(A)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"scipy.sparse.csr.csr_matrix"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"B = A.tocsr()\n",
"type(B)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以转化为普通矩阵:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"matrix([[1, 2, 0],\n",
" [0, 0, 3],\n",
" [4, 0, 5]])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"C = A.todense()\n",
"C"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"与向量的乘法:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1, -3, -1])"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"v = np.array([1,0,-1])\n",
"A.dot(v)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"还可以传入一个 `(data, (row, col))` 的元组来构建稀疏矩阵:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"I = np.array([0,3,1,0])\n",
"J = np.array([0,3,1,2])\n",
"V = np.array([4,5,7,9])\n",
"A = coo_matrix((V,(I,J)),shape=(4,4))"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" (0, 0)\t4\n",
" (3, 3)\t5\n",
" (1, 1)\t7\n",
" (0, 2)\t9\n"
]
}
],
"source": [
"print A"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"COO 格式的稀疏矩阵在构建的时候只是简单的将坐标和值加到后面,对于重复的坐标不进行处理:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" (0, 0)\t1\n",
" (0, 2)\t1\n",
" (1, 1)\t1\n",
" (3, 3)\t1\n",
" (1, 1)\t1\n",
" (0, 0)\t1\n",
" (0, 0)\t1\n"
]
}
],
"source": [
"I = np.array([0,0,1,3,1,0,0])\n",
"J = np.array([0,2,1,3,1,0,0])\n",
"V = np.array([1,1,1,1,1,1,1])\n",
"B = coo_matrix((V,(I,J)),shape=(4,4))\n",
"print B"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"转换成 CSR 格式会自动将相同坐标的值合并:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" (0, 0)\t3\n",
" (0, 2)\t1\n",
" (1, 1)\t2\n",
" (3, 3)\t1\n"
]
}
],
"source": [
"C = B.tocsr()\n",
"print C"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 求解微分方程"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from scipy.sparse import lil_matrix\n",
"from scipy.sparse.linalg import spsolve\n",
"from numpy.linalg import solve, norm\n",
"from numpy.random import rand"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"构建 `1000 x 1000` 的稀疏矩阵:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"A = lil_matrix((1000, 1000))\n",
"A[0, :100] = rand(100)\n",
"A[1, 100:200] = A[0, :100]\n",
"A.setdiag(rand(1000))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"转化为 CSR 之后,用 `spsolve` 求解 $Ax=b$:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"A = A.tocsr()\n",
"b = rand(1000)\n",
"x = spsolve(A, b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"转化成正常数组之后求解:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x_ = solve(A.toarray(), b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看误差:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"6.4310987107687431e-13"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"err = norm(x-x_)\n",
"err"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## sparse.find 函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"返回一个三元组,表示稀疏矩阵中非零元素的 `(row, col, value)`:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0 0 1 3] [0 2 1 3] [3 1 2 1]\n"
]
}
],
"source": [
"from scipy import sparse\n",
"\n",
"row, col, val = sparse.find(C)\n",
"print row, col, val"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## sparse.issparse 函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看一个对象是否为稀疏矩阵:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sparse.issparse(B)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"或者"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sparse.isspmatrix(B.todense())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"还可以查询是否为指定格式的稀疏矩阵:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sparse.isspmatrix_coo(B)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sparse.isspmatrix_csr(B)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 04-scipy/04.09-linear-algbra.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 线性代数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`numpy` 和 `scipy` 中,负责进行线性代数部分计算的模块叫做 `linalg`。"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import numpy.linalg\n",
"import scipy as sp\n",
"import scipy.linalg\n",
"import matplotlib.pyplot as plt\n",
"from scipy import linalg\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## numpy.linalg VS scipy.linalg"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"一方面`scipy.linalg` 包含 `numpy.linalg` 中的所有函数,同时还包含了很多 `numpy.linalg` 中没有的函数。\n",
"\n",
"另一方面,`scipy.linalg` 能够保证这些函数使用 BLAS/LAPACK 加速,而 `numpy.linalg` 中这些加速是可选的。\n",
"\n",
"因此,在使用时,我们一般使用 `scipy.linalg` 而不是 `numpy.linalg`。\n",
"\n",
"我们可以简单看看两个模块的差异:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"number of items in numpy.linalg: 36\n",
"number of items in scipy.linalg: 115\n"
]
}
],
"source": [
"print \"number of items in numpy.linalg:\", len(dir(numpy.linalg))\n",
"print \"number of items in scipy.linalg:\", len(dir(scipy.linalg))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## numpy.matrix VS 2D numpy.ndarray"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"线性代数的基本操作对象是矩阵,而矩阵的表示方法主要有两种:`numpy.matrix` 和 2D `numpy.ndarray`。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### numpy.matrix"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`numpy.matrix` 是一个矩阵类,提供了一些方便的矩阵操作:\n",
"- 支持类似 `MATLAB` 创建矩阵的语法\n",
"- 矩阵乘法默认用 `*` 号\n",
"- `.I` 表示逆,`.T` 表示转置\n",
"\n",
"可以用 `mat` 或者 `matrix` 来产生矩阵:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"matrix([[1, 2],\n",
" [3, 4]])\n",
"matrix([[1, 2],\n",
" [3, 4]])\n"
]
}
],
"source": [
"A = np.mat(\"[1, 2; 3, 4]\")\n",
"print repr(A)\n",
"\n",
"A = np.matrix(\"[1, 2; 3, 4]\")\n",
"print repr(A)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"转置和逆:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"matrix([[-2. , 1. ],\n",
" [ 1.5, -0.5]])\n",
"matrix([[1, 3],\n",
" [2, 4]])\n"
]
}
],
"source": [
"print repr(A.I)\n",
"print repr(A.T)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"矩阵乘法:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"matrix([[17],\n",
" [39]])\n"
]
}
],
"source": [
"b = np.mat('[5; 6]')\n",
"print repr(A * b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2 维 numpy.ndarray"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"虽然 `numpy.matrix` 有着上面的好处,但是一般不建议使用,而是用 2 维 `numpy.ndarray` 对象替代,这样可以避免一些不必要的困惑。\n",
"\n",
"我们可以使用 `array` 复现上面的操作:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"array([[1, 2],\n",
" [3, 4]])\n"
]
}
],
"source": [
"A = np.array([[1,2], [3,4]])\n",
"print repr(A)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"逆和转置:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"array([[-2. , 1. ],\n",
" [ 1.5, -0.5]])\n",
"array([[1, 3],\n",
" [2, 4]])\n"
]
}
],
"source": [
"print repr(linalg.inv(A))\n",
"print repr(A.T)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"矩阵乘法:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"array([17, 39])\n"
]
}
],
"source": [
"b = np.array([5, 6])\n",
"\n",
"print repr(A.dot(b))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"普通乘法:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"array([[ 5, 12],\n",
" [15, 24]])\n"
]
}
],
"source": [
"print repr(A * b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`scipy.linalg` 的操作可以作用到两种类型的对象上,没有区别。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 基本操作"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 求逆"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"矩阵 $\\mathbf{A}$ 的逆 $\\mathbf{B}$ 满足:$\\mathbf{BA}=\\mathbf{AB}=I$,记作 $\\mathbf{B} = \\mathbf{A}^{-1}$。\n",
"\n",
"事实上,我们已经见过求逆的操作,`linalg.inv` 可以求一个可逆矩阵的逆:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-2. 1. ]\n",
" [ 1.5 -0.5]]\n",
"[[ 1.00000000e+00 0.00000000e+00]\n",
" [ 8.88178420e-16 1.00000000e+00]]\n"
]
}
],
"source": [
"A = np.array([[1,2],[3,4]])\n",
"\n",
"print linalg.inv(A)\n",
"\n",
"print A.dot(scipy.linalg.inv(A))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 求解线性方程组"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"例如,下列方程组\n",
"$$\n",
"\\begin{eqnarray*} \n",
"x + 3y + 5z & = & 10 \\\\\n",
"2x + 5y + z & = & 8 \\\\\n",
"2x + 3y + 8z & = & 3\n",
"\\end{eqnarray*}\n",
"$$\n",
"的解为:\n",
"$$\n",
"\\begin{split}\\left[\\begin{array}{c} x\\\\ y\\\\ z\\end{array}\\right]=\\left[\\begin{array}{ccc} 1 & 3 & 5\\\\ 2 & 5 & 1\\\\ 2 & 3 & 8\\end{array}\\right]^{-1}\\left[\\begin{array}{c} 10\\\\ 8\\\\ 3\\end{array}\\right]=\\frac{1}{25}\\left[\\begin{array}{c} -232\\\\ 129\\\\ 19\\end{array}\\right]=\\left[\\begin{array}{c} -9.28\\\\ 5.16\\\\ 0.76\\end{array}\\right].\\end{split}\n",
"$$\n",
"\n",
"我们可以使用 `linalg.solve` 求解方程组,也可以先求逆再相乘,两者中 `solve` 比较快。"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-9.28 5.16 0.76]\n",
"[ 0.00000000e+00 -1.77635684e-15 -8.88178420e-16]\n",
"inv and dot: 0.0353579521179 s\n",
"[-9.28 5.16 0.76]\n",
"[ 0.00000000e+00 -1.77635684e-15 -1.77635684e-15]\n",
"solve: 0.0284671783447 s\n"
]
}
],
"source": [
"import time\n",
"\n",
"A = np.array([[1, 3, 5],\n",
" [2, 5, 1],\n",
" [2, 3, 8]])\n",
"b = np.array([10, 8, 3])\n",
"\n",
"tic = time.time()\n",
"\n",
"for i in xrange(1000):\n",
" x = linalg.inv(A).dot(b)\n",
"\n",
"print x\n",
"print A.dot(x)-b\n",
"print \"inv and dot: {} s\".format(time.time() - tic)\n",
"\n",
"tic = time.time()\n",
"\n",
"for i in xrange(1000):\n",
" x = linalg.solve(A, b)\n",
"\n",
"print x\n",
"print A.dot(x)-b\n",
"print \"solve: {} s\".format(time.time() - tic)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 计算行列式"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"方阵的行列式为\n",
"$$\n",
"\\left|\\mathbf{A}\\right|=\\sum_{j}\\left(-1\\right)^{i+j}a_{ij}M_{ij}.\n",
"$$\n",
"\n",
"其中 $a_{ij}$ 表示 $\\mathbf{A}$ 的第 $i$ 行 第 $j$ 列的元素,$M_{ij}$ 表示矩阵 $\\mathbf{A}$ 去掉第 $i$ 行 第 $j$ 列的新矩阵的行列式。\n",
"\n",
"例如,矩阵\n",
"$$\n",
"\\begin{split}\\mathbf{A=}\\left[\\begin{array}{ccc} 1 & 3 & 5\\\\ 2 & 5 & 1\\\\ 2 & 3 & 8\\end{array}\\right]\\end{split}\n",
"$$\n",
"的行列式是:\n",
"$$\n",
"\\begin{eqnarray*} \\left|\\mathbf{A}\\right| & = & 1\\left|\\begin{array}{cc} 5 & 1\\\\ 3 & 8\\end{array}\\right|-3\\left|\\begin{array}{cc} 2 & 1\\\\ 2 & 8\\end{array}\\right|+5\\left|\\begin{array}{cc} 2 & 5\\\\ 2 & 3\\end{array}\\right|\\\\ & = & 1\\left(5\\cdot8-3\\cdot1\\right)-3\\left(2\\cdot8-2\\cdot1\\right)+5\\left(2\\cdot3-2\\cdot5\\right)=-25.\\end{eqnarray*}\n",
"$$\n",
"\n",
"可以用 `linalg.det` 计算行列式:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-25.0\n"
]
}
],
"source": [
"A = np.array([[1, 3, 5],\n",
" [2, 5, 1],\n",
" [2, 3, 8]])\n",
"\n",
"print linalg.det(A)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 计算矩阵或向量的模"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"矩阵的模定义如下:\n",
"$$\n",
"\\begin{split}\\left\\Vert \\mathbf{A}\\right\\Vert =\\left\\{ \\begin{array}{cc} \\max_{i}\\sum_{j}\\left|a_{ij}\\right| & \\textrm{ord}=\\textrm{inf}\\\\ \\min_{i}\\sum_{j}\\left|a_{ij}\\right| & \\textrm{ord}=-\\textrm{inf}\\\\ \\max_{j}\\sum_{i}\\left|a_{ij}\\right| & \\textrm{ord}=1\\\\ \\min_{j}\\sum_{i}\\left|a_{ij}\\right| & \\textrm{ord}=-1\\\\ \\max\\sigma_{i} & \\textrm{ord}=2\\\\ \\min\\sigma_{i} & \\textrm{ord}=-2\\\\ \\sqrt{\\textrm{trace}\\left(\\mathbf{A}^{H}\\mathbf{A}\\right)} & \\textrm{ord}=\\textrm{'fro'}\\end{array}\\right.\\end{split}\n",
"$$\n",
"其中,$\\sigma_i$ 是矩阵的奇异值。\n",
"\n",
"向量的模定义如下:\n",
"$$\n",
"\\begin{split}\\left\\Vert \\mathbf{x}\\right\\Vert =\\left\\{ \\begin{array}{cc} \\max\\left|x_{i}\\right| & \\textrm{ord}=\\textrm{inf}\\\\ \\min\\left|x_{i}\\right| & \\textrm{ord}=-\\textrm{inf}\\\\ \\left(\\sum_{i}\\left|x_{i}\\right|^{\\textrm{ord}}\\right)^{1/\\textrm{ord}} & \\left|\\textrm{ord}\\right|<\\infty.\\end{array}\\right.\\end{split}\n",
"$$\n",
"\n",
"`linalg.norm` 可以计算向量或者矩阵的模:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5.47722557505\n",
"5.47722557505\n",
"6\n",
"4\n",
"7\n"
]
}
],
"source": [
"A = np.array([[1, 2],\n",
" [3, 4]])\n",
"\n",
"print linalg.norm(A)\n",
"\n",
"print linalg.norm(A,'fro') # frobenius norm 默认值\n",
"\n",
"print linalg.norm(A,1) # L1 norm 最大列和\n",
"\n",
"print linalg.norm(A,-1) # L -1 norm 最小列和\n",
"\n",
"print linalg.norm(A,np.inf) # L inf norm 最大行和"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 最小二乘解和伪逆"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 问题描述"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"所谓最小二乘问题的定义如下:\n",
"\n",
"假设 $y_i$ 与 $\\mathbf{x_i}$ 的关系可以用一组系数 $c_j$ 和对应的模型函数 $f_j(\\mathbf{x_i})$ 的模型表示:\n",
"\n",
"$$\n",
"y_{i}=\\sum_{j}c_{j}f_{j}\\left(\\mathbf{x}_{i}\\right)+\\epsilon_{i}\n",
"$$\n",
"\n",
"其中 $\\epsilon_i$ 表示数据的不确定性。最小二乘就是要优化这样一个关于 $c_j$ 的问题:\n",
"$$\n",
"J\\left(\\mathbf{c}\\right)=\\sum_{i}\\left|y_{i}-\\sum_{j}c_{j}f_{j}\\left(x_{i}\\right)\\right|^{2}\n",
"$$\n",
"\n",
"其理论解满足:\n",
"$$\n",
"\\frac{\\partial J}{\\partial c_{n}^{*}}=0=\\sum_{i}\\left(y_{i}-\\sum_{j}c_{j}f_{j}\\left(x_{i}\\right)\\right)\\left(-f_{n}^{*}\\left(x_{i}\\right)\\right)\n",
"$$\n",
"\n",
"改写为:\n",
"$$\n",
"\\begin{eqnarray*} \\sum_{j}c_{j}\\sum_{i}f_{j}\\left(x_{i}\\right)f_{n}^{*}\\left(x_{i}\\right) & = & \\sum_{i}y_{i}f_{n}^{*}\\left(x_{i}\\right)\\\\ \\mathbf{A}^{H}\\mathbf{Ac} & = & \\mathbf{A}^{H}\\mathbf{y}\\end{eqnarray*}\n",
"$$\n",
"\n",
"其中:\n",
"$$\n",
"\\left\\{ \\mathbf{A}\\right\\} _{ij}=f_{j}\\left(x_{i}\\right).\n",
"$$\n",
"\n",
"当 $\\mathbf{A^HA}$ 可逆时,我们有:\n",
"$$\n",
"\\mathbf{c}=\\left(\\mathbf{A}^{H}\\mathbf{A}\\right)^{-1}\\mathbf{A}^{H}\\mathbf{y}=\\mathbf{A}^{\\dagger}\\mathbf{y}\n",
"$$\n",
"\n",
"矩阵 $\\mathbf{A}^{\\dagger}$ 叫做 $\\mathbf{A}$ 的伪逆。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 问题求解"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"注意到,我们的模型可以写为:\n",
"$$\n",
"\\mathbf{y}=\\mathbf{Ac}+\\boldsymbol{\\epsilon}.\n",
"$$\n",
"\n",
"在给定 $\\mathbf{y}$ 和 $\\mathbf{A}$ 的情况下,我们可以使用 `linalg.lstsq` 求解 $\\mathbf c$。\n",
"\n",
"在给定 $\\mathbf{A}$ 的情况下,我们可以使用 `linalg.pinv` 或者 `linalg.pinv2` 求解 $\\mathbf{A}^{\\dagger}$。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 例子"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"假设我们的数据满足:\n",
"$$\n",
"\\begin{align}\n",
"y_{i} & =c_{1}e^{-x_{i}}+c_{2}x_{i} \\\\\n",
"z_{i} & = y_i + \\epsilon_i\n",
"\\end{align}\n",
"$$\n",
"\n",
"其中 $x_i = \\frac{i}{10},\\ i = 1,\\dots,10$,$c_1 = 5, c_2 = 2$,产生数据"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"c1, c2 = 5.0, 2.0\n",
"i = np.r_[1:11]\n",
"xi = 0.1*i\n",
"yi = c1*np.exp(-xi) + c2*xi\n",
"zi = yi + 0.05 * np.max(yi) * np.random.randn(len(yi))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"构造矩阵 $\\mathbf A$:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 0.90483742 0.1 ]\n",
" [ 0.81873075 0.2 ]\n",
" [ 0.74081822 0.3 ]\n",
" [ 0.67032005 0.4 ]\n",
" [ 0.60653066 0.5 ]\n",
" [ 0.54881164 0.6 ]\n",
" [ 0.4965853 0.7 ]\n",
" [ 0.44932896 0.8 ]\n",
" [ 0.40656966 0.9 ]\n",
" [ 0.36787944 1. ]]\n"
]
}
],
"source": [
"A = np.c_[np.exp(-xi)[:, np.newaxis], xi[:, np.newaxis]]\n",
"print A"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"求解最小二乘问题:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 4.87016856 2.19081311]\n"
]
}
],
"source": [
"c, resid, rank, sigma = linalg.lstsq(A, zi)\n",
"\n",
"print c"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"其中 `c` 的形状与 `zi` 一致,为最小二乘解,`resid` 为 `zi - A c` 每一列差值的二范数,`rank` 为矩阵 `A` 的秩,`sigma` 为矩阵 `A` 的奇异值。\n",
"\n",
"查看拟合效果:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAEbCAYAAADDKt+mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VPW9//HXJxuEsO+7IAWlgIoLgiim1lrBpa36KNcu\nLrWt16rXLvZqe6+K94qttd5bba11a6XWn9T+1Cp11xoraFGWIAhUVtnDmrAkkO1z/zgnOKSTZJJM\nZnKS9/PxyCMzZ77nnM+ZTN7zne9ZxtwdERGJnox0FyAiIk2jABcRiSgFuIhIRCnARUQiSgEuIhJR\nCnARkYhSgEuzmNlkM1tlZnvN7Atm9qKZXdbIZSwzsyktVWMC6/+RmT1cz+NXmNnbjVjeejM7K7z9\n4/qW3cg6q83s6CbMl29mG5NRg7QuWekuQJrOzNYDfYFKoApYDvweeMgTOMDfzIYBa4Esd69uYhn/\nBdzn7r8M7z8Xs/wrgKvc/YyYaY8BG939lppp7j62ietOCnf/Sc3tJD0nh597d7+zWcWlkJnNAEa4\n+9fTXYskRj3waHPgfHfvCgwFfgrcBDzayOVYM2oYSvDG0dY05zkRSQkFeBvh7vvcfQ4wHbjczMYA\nmNl5ZrbYzErMbIOZ3RYz29/C38Vmts/MTjWzEWb2VzPbaWY7zOwPZtYt3jrNbA1wNDAnHELJMbMC\nM7vKzI4FfgNMCpe9x8y+BXwF+Pdw2nPhcmKHHGaY2VNmNitc5jIzOylmnSeG27M3bPdHM/vvOur7\n2MxODG9/NRyCGB3ev8rMno1Z5+NxnpO9ZjaRsEdtZneb2W4zW2tm5ybyd4ldtpkNC2u4LKxth5n9\nOKbtBDN7N3yutpjZL80su47l9jKzOeHf9T0zuyPRYR4zu8nMNoXbt9LMzgq350fA9PBvszhse4WZ\nrQnbrjWzr4TTM83s5+E2rDGza8NtU6akkJ7sNsbd3wc2AaeHk/YDX3P3bsB5wDVm9oXwsZqhjW7u\n3sXd54f3ZwIDgNHAEGBGHesaAWwg/BTg7uUEYefuvhK4Gng3XHYPd38YeAK4K5xWU0ft4Z4LgCeB\nbsDzwK8AzCwHeBb4LdAjbPPFOPPXKADyw9tnAmvC3zX3C+LME/ucdHX3vxP0xk8FVgK9gJ+R+Kec\neLVNBkYBnwVuNbNjwumVwA3hOiaFj3+njuXeD+wD+gGXA5fVsa4jhOu6Fjg5/OR2DrDe3V8G7gRm\nh3+b8WaWB9wLnBu2nQQUhov6FsHr6QTgZOCSRNYvyaUAb5u2AD0B3P0td/8wvL0UmM0nIfZPwwTu\nvsbd33D3CnffCfxvTPvGqmsYoqHhibfd/eVwHP8PwPHh9IlAprv/0t2r3P1Z4L16lvMWn9R+OvCT\nmPtTwscTre1jd380rOn3wAAz69vAdtS1vNvd/ZC7fwAsIQhB3H2Ru7/n7tXu/jHwEHGeezPLBC4C\nbnP3g+6+AphVT+2xqoAOwBgzy3b3De6+NqbW2suoBsaZWa67F7l7zXDZl4H/dffN7r6HIPw17JRi\nCvC2aRCwGyAcFnnTzLabWTFBr7hXXTOaWT8zmx1+xC4BHq+vfQspirldCnQMP5oPBDbXaruRuoPj\nb8AZZtYfyAT+BEw2s6MIetiFdcwXz7aaG+5eGt7s3Ij54y6LYPvyAMxslJn9xcy2hs/9TOI/930I\nDkCIPbJkUyIrdvfVwHcJPlUVmdmTZjagjrYHCIbk/hXYEtZW82lhQK31b0hk/ZJcCvA2xsxOIQjw\nueGk/wf8GRjs7t0JxqVr/u7xPvLeSdBLGxsOu3ydpr9O4i2/OR+ztxJsW6yhdS0zDKtS4HrgLXff\nRxCe3wZix4u9jtup9gDBDuFPhc/9fxD/ud9BMNwyJGbakDjt4nL3J8Mjg44i2N67ah6K0/ZVdz8H\n6E8whFRzSORWgue+xtDa80rLU4BHnwGYWVczO59gXPjxmmETgl7iHncvN7MJBDsRa/5RdxB8RB4R\ns7zOwAFgr5kNAn7YjNqKgMG1dsQVEez4bIp3gSozu87MssKx/FMamOct4Do+GS4pqHUfjuzBx3tO\nUqUzwbh2abgT+Jp4jdy9CngGmGFmuWHbr5PYGPiocKdlB+AQcJDgDRuCN7dhZlbzmuprwbH9eUAF\nweuipu1TwL+Z2SAz6wHcnMj6JbkU4NE3x8z2EnyE/RFwD3BlzOPfAf4rbHML8MeaB8KhgJnAvPDo\nignA7cCJQAkwB3iapv9jvgF8CGwzs+3htEeBT4dHWjwTZx6Psz4P6y0nGPu9CtgDfBX4C1BeTw1v\nEQTj3+q4f8Q64zwnp9ZXUwJqz1vffDcSvMHuJRj/nl3PvNcR7OTdRjD+/SQxz0N49M6lcebtQLAv\nYAdBL7o3wesGgiEmgF1mtoAgH75HMGy1i2AHb82bysPAKwRj+AsIXicaA08xS+QLHSw4YWQvwbtv\nhbtPqPV4PsEJHDU7Q5529zuSWqlIHGY2H/i1u89Kdy3pZGZ3AX3d/coGG7fM+ofR/BOgpJESPRPT\ngXx3311Pm7fc/cIk1CRSJwtOuf8I2EnQAx8LvJzWotIg3JnYAVhKMIz0DYJPJtKONOZU+oY+Hunj\nk6TCMQTjr3kEx3Vf4u5F9c/SJnUhGDYZSLBf4efu/nx6S9IYeKolOoSylmBMtAp4MDwhI/bxMwl2\nqmwiGC+7MeZ4URERaQGJ9sAnu/tWM+sDvGZmK9099jCsRcAQdy81s6kEh62NSnaxIiLyiYR64EfM\nEFxLY7+731NPm3XASbFj5mamj1ciIk3g7nGHqBs8jNDMOplZl/B2HsG1E5bWatMv5tjRCQRvDP+0\nw9Pd29XPbbfdlvYatM3aZm1ztLe3PokMofQDng3zOQt4wt1fNbOrw1B+kOBCNteYWSXBmW//ksBy\nRUSkGRoMcHdfR3ixnVrTH4y5fT/B1dFERCRFdCZmC8rPz093CSmnbW4f2ts2t9btbfROzCavyMxT\ntS4RkbbCzPCm7sQUEZHWSQEuIhJRCnARkYhSgIuIRJQCXEQkohTgIiIRpQAXEYkoBbiISEQpwEVE\nIkoBLiISUQpwEZGIUoCLiESUAlxEJKIU4CIiEaUAFxGJKAW4iEhEKcBFRCJKAS4iElEKcBGRiFKA\ni4hElAJcRCSiFOAiIhGlABcRiSgFuIhIRCnARUQiSgEuIhJRCnARkYhSgIuIRJQCXEQkohTgIiIR\npQAXEYkoBbiISEQpwEVEIkoBLiISUQkFuJmtN7MPzGyxmb1XR5v7zGyVmS0xs/HJLVNERGrLSrCd\nA/nuvjveg2Y2DfiUu480s1OBB4CJSapRRETiaMwQitXz2IXALAB3nw90N7N+zSlMRETql2iAO/C6\nmS0ws2/FeXwQsDHm/iZgcHOLExGRuiU6hDLZ3beaWR/gNTNb6e5v12pTu4fuzS9PRETqklCAu/vW\n8PcOM3sWmADEBvhmYEjM/cHhtCPMmDHj8O38/Hzy8/MbXbCISFtWUFBAQUFBQm3Nvf6Ospl1AjLd\nfZ+Z5QGvAre7+6sxbaYB17n7NDObCPzC3SfWWo43tC4RETmSmeHucfdBJtID7wc8a2Y17Z9w91fN\n7GoAd3/Q3V80s2lmtho4AFyZpNpFRKQODfbAk7Yi9cBFRBqtvh64zsQUEYkoBbiISEQpwEVEIkoB\nLiISUQpwEZGIUoCLiESUAlxEJKIU4CIiEaUAFxGJKAW4iEhEKcBFRCJKAS4iElEKcBGRiFKAi4hE\nlAJcRCSiFOAiIhGlABcRiSgFuIhIRCnARUQiSgEuIhJRCnARkYhSgIuIRJQCXEQkohTgIiIRpQAX\nEYkoBbiISEQpwEVEIkoBLiISUW06wKu9mlmFs6ioqkh3KSIiSdemA3zvob08sfQJTn3kVBZtXZTu\nckREkqpNB3j3jt155WuvcMOpNzD1ianc/PrNlFaUprssEZGkaNMBDmBmXH7C5Xzwrx+woWQD4x4Y\nx2trXkt3WSIizWbunpoVmXmq1lWfl1a9xDUvXMPpQ0/nfz7/P/TN65vukkRE6mRmuLvFe6zN98Br\nmzpyKh9+50MGdhnI2F+P5aGFD1Ht1ekuq9leeAGKi4+cVlwcTBeRtqndBThAXk4eP/vcz3j9std5\nrPAxJv92MoXbCtNdVrNMngz/8R+fhHhxcXB/8uT01iUiLSehADezTDNbbGZz4jyWb2Yl4eOLzew/\nk19m4yTaGz2u33HM/cZcrhp/FZ//w+f57svfpeRgSeoKTaLu3WHmzCC0168Pfs+cGUwXkbYp0R74\nDcByoK5B7LfcfXz4c0dySmu6xvRGMyyDb574TT78zofsL9/P6PtH8/iSx2kN4/WN1b07/PCHMHx4\n8FvhLdK2NRjgZjYYmAY8AsQdSK9nelo0pTfau1NvHrnwEZ6d/iz3zr+XKY9NidywSnEx3H03rFsX\n/K79KURE2pYGj0Ixsz8BdwJdgRvd/YJaj58JPANsAjaHbZbHWU7Kj0JZvz7oja5bB8OGJT5fVXUV\njy5+lFvfvJUvHfsl7jjrDnp16tVSZSZFzaeMmjeq2vdFJJqafBSKmZ0PbHf3xdTdy14EDHH344Ff\nAn9uTrHJ0pzeaGZGJt8+6dusuHYF2ZnZjL5/NPfNv69Vn5I/b96RYV3zKWTevPTWJSItp94euJnd\nCXwdqAQ6EvTCn3b3y+qZZx1wkrvvrjXdb7vttsP38/Pzyc/Pb1bxdUl2b/TD7R/yvVe+x6a9m7jn\nnHuYOnJq8osWEQEKCgooKCg4fP/222+vswee8Ik84VBJvCGUfgS9dDezCcBT7j4szvwpG0J54YVg\nh2VsWBcXB73R885r2jLdnTkfzeHGV2/k6B5Hc8859zCm75jkFCwiUof6hlAaG+A/cPcLzexqAHd/\n0MyuBa4h6KWXAt9397/Hmb9VnInZXOVV5Tzw/gPMfHsmF42+iNvzb6df537pLktE2qikBHgSimgT\nAV5jT9keZr49k8cKH+OGU2/g+5O+T15OXrrLEpE2RqfSt4AeuT34+Tk/571vvcfyncsZ9atRPLTw\nISqrK9Ndmoi0E+qBJ8mCLQu46fWb2Lx3M3ecdQcXj74Ys1Z1eLyIRJCGUFLE3Xlt7Wvc/PrNZGZk\ncudZd3L20WcryEWkyRTgKVbt1fzpwz9xy5u3MKjrIGaeNZPThpyW7rJEJII0Bp5iGZbB9LHTWX7t\ncr427mtc+vSlTHtiGgu3LEx3aS1Cl7IVSQ8FeAvKysjiqhOv4qPrPuK8kedx4ewL+eLsL0buGisN\n0aVsRdJDQygpVFZRxkMLH+KueXcxcfBEbj3zVk7of0K6y0qKmtD+4Q+DSxfoGiwiyaEx8FamrKKM\n3yz4DXe/czenDDqFW6bcwskDT053Wc3W1IuHiUjdNAbeyuRm5/K9Sd9jzb+t4ezhZ/OlP36JqU9M\nZe6Guekurcl0KVuR1FOAJ1ljdujlZudy/anXs/r61Vx07EVc/ufLOfOxM3l59cuR+kKJ2IuFDRv2\nybXYFeIiLUtDKEnWnCshVlZXMnvZbO6adxdZGVncNPkmLvn0JWRlZKWm+CZqiYuHiUhAY+Ap1twd\neu7Oi6te5KfzfsrmvZv5waQfcOX4K+mU3anlihaRVkkBngbJ2qH37sZ3ufudu5m7YS5Xn3Q11024\nTlc/FGlHtBMzxZK5Q2/SkEk8M/0Z5n5jLjtLdzL6/tFc9dxVLC1amryCRSSS1ANPspb+bsqdpTt5\ncMGD3P/+/YzpO4YbTr2BaSOnkWF6LxZpizSEkkKp2qFXXlXOH5f9kXvn30vxwWKum3AdV5xwBd07\n6uwZkbZEAd6GuTt/3/R37nvvPl5e/TLTx0zn2lOuZVy/cekuTUSSQAHeTmzdt5WHFz3Mgwsf5Oge\nR3PNyddw8eiL6ZDVId2liUgTKcDbmYqqCuZ8NIcHFjzAkm1LuPz4y/n2Sd9mZK+R6S5NRBpJAd6O\nrd69mocXPsxjSx5jTJ8xfPPEb3LR6IvomNUx3aWJSAIU4EJ5VTnPrXyORxY/wsItC7l07KV8Y/w3\nGD9gfLpLE5F6KMDlCOuL1zOrcBa/K/wdPXJ7cMXxV/CVcV+hT16fdJcmIrUowCWuaq/mzXVvMmvJ\nLJ7/x/OcOexMLjvuMs4fdb52fIq0EgpwadC+Q/t4esXTPP7B4xRuK+Ti0Rfz1XFf5YyjztBJQiJp\npACXRtlYspEnlz3JE0ufYE/ZHqaPmc6l4y5lfP/xmMV9HYlIC1GAS5Mt276M2ctm8+SyJ8m0TKaP\nmc6Xx3yZsX3HKsxFUkABLs3m7ry/5X2e+vApnvrwKfJy8rhk9CVc8ulLOK7fcQrzdkDXfU8PBbgk\nVbVX897m93h6+dM8veJpMjMy+dKxX+Ki0RcxYdAEjZm3US19oTaJTwEuLcbdKdxWyDMrnuGZlc+w\np2wPF4y6gC8c+wXOGn6WThhqY5r7ZSXSeApwSZlVu1bx3D+e488r/8zS7Uv57PDPcsGoC5g2cpq+\niKKNSNaXlUhiFOCSFjtLd/LiqheZ89EcXl/7OiN7jmTayGlM/dRUTh54MpkZmekuURpJPfDUU4BL\n2pVXlTN3w1xeWvUSL61+iaIDRZx99Nl8fsTnOWfEOQzsMjDdJUoDNAaeHgpwaXU2lGzg1TWv8sqa\nV3hj7RsM6jqIs4efzedGfI4pR02hc07ndJcotaTrKJT2fvSLAlxatarqKhZuXchra17j9XWv8/7m\n9zm+//GcNewsPjP8M0waPInc7Nx0lylp0t57/gpwiZTSilLe2fgOf133VwrWF/BB0QecOOBEphw1\nhSlHTWHS4El06dAl3WVKCrXnsXcFuETa/vL9vLvxXd76+C3+9vHfWLR1Ecf0PoYzhp7BaUNOY/KQ\nyQzqOijdZUoLa69HvzQ7wM0sE1gAbHL3C+I8fh8wFSgFrnD3xXHaKMAlKQ5VHmLh1oW8/fHbvLPp\nHd7Z+A65WblMGjKJiYMmMnHwRE7of4KGXdoQ9cCbF+DfB04Curj7hbUemwZc5+7TzOxU4F53nxhn\nGQpwaRHuzqrdq5i/aT7vbnqX+Zvns2LHCkb3Gc0pA0/h5IEnc/LAkxnTZwzZmdnpLlcaSWPgzQhw\nMxsMPAbMBL5fuwduZr8B3nT3P4b3VwJnuntRrXYKcEmZsooyCrcVsmDLAt7f8j4LtixgffF6xvQd\nw4n9T2T8gPGc0P8ExvUdR15OXrrLlXroKJTmBfifgDuBrsCNcQJ8DvATd38nvP86cJO7L6zVTgEu\nabW/fD9Lti1h0dZFFG4rZPG2xazcuZIh3YZwXL/jOK7vcYztO5Zx/cYxvPtwnWgkrUJ9AZ7VwIzn\nA9vdfbGZ5dfXtNZ9JbW0Op1zOjN56GQmD518eFpFVQX/2PUPlmxbwrLty/ht4W9ZWrSU7Qe2c0zv\nYxjTZwyje49mdJ/RHNv7WEb0GKFvK5JWo94AB04DLgzHuTsCXc3s9+5+WUybzcCQmPuDw2n/ZMaM\nGYdv5+fnk5+f34SSRZInOzObsX3HMrbv2COm7y/fz4odK1i+Yzkrdq7gscLHWLlzJRtKNjCo6yBG\n9RrFyJ4jGdVrFCN6jGBEzxEM6z6MnMycNG2JtCR3T9klkwsKCigoKEiobcKHEZrZmcQfQondiTkR\n+IV2YkpbVVFVwdo9a1m1exWrdq3io10fsWbPGtbsWcOmvZvo37k/R/c4muHdh3NUt6MY1n0YR3U/\niqHdhjK462AFfCtUWV1J0f4ituzbwuZ9m9m0d9Phnw0lG9i4dyPZGdl8dP1HaakvKceBhwH+A3e/\n0MyuBnD3B8PHfgWcCxwArnT3RXHmV4BLm1ZRVcHGvRtZu2ct6/as4+OSj1lfvJ4NJRvYULKBLfu2\n0DO3J0O6DWFQl0HBT9dBDOg8gAFdBjCg8wD6de5Hn059NP7eTNVeTfHBYrYf2E7R/qLg94EiivYX\nsW3/Nrbu3xr87NvKjtId9MrtxaCugxjYZSCDuww+/Dca2m0oQ7oNYXDXwWm7NLJO5BFpBaqqqyg6\nUHS4d7d572Y279vMln1bDofKtv3b2FO2h565Pemb15c+eX3o06kPvTv1pnen3vTK7UWvTr3omduT\nHh170L1jd7p37E63jt3IzcptU9+M5O4cqjrE3kN7KTlYQvHB4sM/ew7uYU/ZHnaX7WZ32W52le1i\nV9kudpbuZGfpTnaX7aZzTmf65vWlb15f+uX1C34692NA5wH079yf/p37M7DLQPrm9W3Vh5cqwEUi\npLK6kh0HdrCjdMfh3ztLd7KrdBc7SnccEV4lh0rYU7aHkkMlVFZX0rVDV7rkdKFLhy50yelC55zO\ndM7pTF5OHp2yOpGbnUtuVi4dszqSm51Lh8wO5GTmkJOZQ3ZmNtkZ2WRnZpOVkUVWRhaZlkmGZZBh\nGYffHAzDcdwdx6mqrqLaq6nyKiqrK6msrqSiqoKK6grKq8opryrnUOUhDlUd4mDlQcoqyiirLDv8\n+0DFAQ6UH2B/+f7DP/vK97Hv0D4AunXsRrcO3ejWsRvdO3Y//MbVM7fn4Tey3p1606tTL3rl9qJP\nXh965fZq1aHcGApwkXagvKqckoMlh8NvX/m+w8F4oOIAZRVBWB6sPHg4SMuryjlUdYjyqnIqqisO\nB29VdRUV1RVUe3UQztVVAIeD28wwDDMj0zLJzAiCPjsjm8yMzMNvBNkZ2XTI7ECHrA50yOxAbnbw\n5tExqyOdsjuRm5VLXk4eedl55OXkHfGm07VDVx3xgwJcRKTRWssJRPUFuL59VkQkjsmTg1P2i4uD\n+zWn8E+eXP98qaQeuIhIHVrDRbQ0hCIi0kTpvoythlCkTXrhhU8+3tYoLg6miyRDcXHQ8163Lvhd\n+/WWbgpwiawojFFKdMVetnbYsOB37OutNdAQikRaaxijlLYpCkehKMAl8tI9RinSkjQGLm1Wax+j\nFGlJCnCJrHSOUaZrB6p23EosBbhE1rx5R455d+8e3J83r+XXna4dqNpxK7E0Bi7SROnagaodt+2L\ndmKKtJB07UDVjtv2QzsxRVpAunagaset1FCAizRBunagRuHkEkkdDaGINEG6TvJoLSeXSOpoDFxE\nJKI0Bi4i0gYpwEVEIkoBLiISUQpwEZGIUoCLiESUAlxEJKIU4CIiEaUAFxGJKAW4iEhEKcBFRCJK\nAS4iElEKcBGRiFKAi4hElAJcRCSiFOAiIhGlABcRiSgFuIhIRDUY4GbW0czmm1mhmS03s5/EaZNv\nZiVmtjj8+c+WKVdERGpkNdTA3Q+a2WfcvdTMsoC5Zna6u8+t1fQtd7+wZcoUEZHaEhpCcffS8GYO\nkAnsjtMs7ne2iYhIy0gowM0sw8wKgSLgTXdfXquJA6eZ2RIze9HMPp3sQkVE5EiJ9sCr3f0EYDAw\nxczyazVZBAxx9+OBXwJ/TmqVIiLyTxocA4/l7iVm9gJwMlAQM31fzO2XzOzXZtbT3Y8YapkxY8bh\n2/n5+eTn5zetahGRNqqgoICCgoKE2pq719/ArDdQ6e7FZpYLvALc7u5vxLTpB2x3dzezCcBT7j6s\n1nK8oXWJiMiRzAx3j7uPMZEe+ABglpllEAy5PO7ub5jZ1QDu/iBwCXCNmVUCpcC/JKd0ERGpS4M9\n8KStSD1wEZFGq68HrjMxRUQiSgEuIhJRCnARkYhSgIuIRJQCXEQkohTgIiIRpQAXEYkoBbiISEQp\nwEVEIkoBLiISUQpwEZGIUoCLiESUAlxEJKIU4CIiEaUAFxGJKAW4iEhEKcBFRCJKAS4iElEKcBGR\niFKAi4hElAJcRCSiFOAiIhGlABcRiSgFuIhIRCnARUQiSgEuIhJRCnARkYhSgIuIRJQCXEQkohTg\nIiIRpQAXEYkoBbiISEQpwEVEIkoBLiISUQpwEZGIqjfAzayjmc03s0IzW25mP6mj3X1mtsrMlpjZ\n+JYpVUREYtUb4O5+EPiMu58AHAd8xsxOj21jZtOAT7n7SODbwAMtVWzUFBQUpLuElNM2tw/tbZtb\n6/Y2OITi7qXhzRwgE9hdq8mFwKyw7Xygu5n1S2aRUdVa/+gtSdvcPrS3bW6t29tggJtZhpkVAkXA\nm+6+vFaTQcDGmPubgMHJK1FEROJJpAdeHQ6hDAammFl+nGZWe7Yk1CYiIvUw98Sz1sxuAcrc/ecx\n034DFLj77PD+SuBMdy+qNa9CXUSkCdy9dicZgKz6ZjKz3kCluxebWS7wOeD2Ws2eB64DZpvZRKC4\ndnjXV4CIiDRNvQEODABmmVkGwXDL4+7+hpldDeDuD7r7i2Y2zcxWAweAK1u2ZBERgUYOoYiISOuR\n9DMxzexcM1sZnthzUx1t2tSJPw1ts5l9NdzWD8xsnpkdl446kyWRv3HY7hQzqzSzi1JZX0tI8HWd\nb2aLzWyZmRWkuMSkS+B13dvMXg5P9FtmZlekocykMbPfmlmRmS2tp03ryi53T9oPwXHiq4FhQDZQ\nCIyu1WYa8GJ4+1Tg78msIdU/CW7zJKBbePvcKG9zItsb0+6vwF+Ai9Nddwr+xt2BD4HB4f3e6a47\nBds8A/hJzfYCu4CsdNfejG0+AxgPLK3j8VaXXcnugU8AVrv7enevAGYDX6jVpq2d+NPgNrv7u+5e\nEt6dT7SPk0/kbwxwPfD/gR2pLK6FJLLNXwGedvdNAO6+M8U1Jlsi27wV6Bre7grscvfKFNaYVO7+\nNrCnniatLruSHeDxTuoZlECbKAdaItsc6yrgxRatqGU1uL1mNojgn73msgpR39GSyN94JNDTzN40\nswVm9vWUVdcyEtnmh4ExZrYFWALckKLa0qXVZVdDR6E0VqL/qG3pxJ+EazezzwDfACa3XDktLpHt\n/QVws7u7mRn//PeOmkS2ORs4Efgs0Al418z+7u6rWrSylpPINv8YKHT3fDMbAbxmZse7+74Wri2d\nWlV2JTvANwNDYu4PIXiXqq/N4HBaVCWyzYQ7Lh8GznX3+j6mtXaJbO9JBOcFQDA2OtXMKtz9+dSU\nmHSJbPNGYKe7lwFlZvY34HggqgGeyDafBswEcPc1ZrYOOAZYkJIKU6/VZVeyh1AWACPNbJiZ5QDT\nCU70ifU+xBxCAAABwklEQVQ8cBlAfSf+REiD22xmQ4FngK+5++o01JhMDW6vux/t7sPdfTjBOPg1\nEQ5vSOx1/Rxwupllmlkngp1cta8bFCWJbPNK4GyAcCz4GGBtSqtMrVaXXUntgbt7pZldB7xCsBf7\nUXdf0ZZP/Elkm4FbgR7AA2GvtMLdJ6Sr5uZIcHvblARf1yvN7GXgA6AaeNj/+cJvkZHg3/lO4Hdm\ntoSgM/jv7l77aqWRYWZPAmcCvc1sI3AbwdBYq80uncgjIhJR+ko1EZGIUoCLiESUAlxEJKIU4CIi\nEaUAFxGJKAW4iEhEKcBFRCJKAS4iElHJvhaKSCSYWSbB6eFHE1zHZAJwj7u35VPBpY1RD1zaq+OB\npwmu3ZEB/Ing+tYikaEAl3bJ3Re5+yGCb0sqcPcCdy8zs8+nuzaRRCnApV0Kv6+zNzDW3deZ2ekA\n7v5KmksTSZguZiXtkpndAhQBQ4GFwHbgEHC6u/8inbWJJEo7MaVdcvf/rj0t/FaZ4jSUI9IkGkIR\n+cSJKMAlQjSEIiISUeqBi4hElAJcRCSiFOAiIhGlABcRiSgFuIhIRCnARUQiSgEuIhJRCnARkYhS\ngIuIRNT/AXU6OlSJKzNiAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"xi2 = np.r_[0.1:1.0:100j]\n",
"yi2 = c[0]*np.exp(-xi2) + c[1]*xi2\n",
"\n",
"plt.plot(xi,zi,'x',xi2,yi2)\n",
"plt.axis([0,1.1,3.0,5.5])\n",
"plt.xlabel('$x_i$')\n",
"plt.title('Data fitting with linalg.lstsq')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 广义逆"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`linalg.pinv` 或 `linalg.pinv2` 可以用来求广义逆,其区别在于前者使用求最小二乘解的算法,后者使用求奇异值的算法求解。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 矩阵分解"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 特征值和特征向量"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 问题描述"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于给定的 $N \\times N$ 矩阵 $\\mathbf A$,特征值和特征向量问题相当与寻找标量 $\\lambda$ 和对应的向量 $\\mathbf v$ 使得:\n",
"$$\n",
"\\mathbf{Av} = \\lambda \\mathbf{v}\n",
"$$\n",
"\n",
"矩阵的 $N$ 个特征值(可能相同)可以通过计算特征方程的根得到:\n",
"$$\n",
"\\left|\\mathbf{A} - \\lambda \\mathbf{I}\\right| = 0\n",
"$$\n",
"\n",
"然后利用这些特征值求(归一化的)特征向量。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 问题求解"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- `linalg.eig(A)` \n",
" - 返回矩阵的特征值与特征向量\n",
"- `linalg.eigvals(A)`\n",
" - 返回矩阵的特征值\n",
"- `linalg.eig(A, B)`\n",
" - 求解 $\\mathbf{Av} = \\lambda\\mathbf{Bv}$ 的问题"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 例子"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"矩阵为\n",
"$$\n",
"\\begin{split}\\mathbf{A}=\\left[\\begin{array}{ccc} 1 & 5 & 2\\\\ 2 & 4 & 1\\\\ 3 & 6 & 2\\end{array}\\right].\\end{split}\n",
"$$\n",
"\n",
"特征多项式为:\n",
"$$\n",
"\\begin{eqnarray*} \\left|\\mathbf{A}-\\lambda\\mathbf{I}\\right| & = & \\left(1-\\lambda\\right)\\left[\\left(4-\\lambda\\right)\\left(2-\\lambda\\right)-6\\right]-\\\\ & & 5\\left[2\\left(2-\\lambda\\right)-3\\right]+2\\left[12-3\\left(4-\\lambda\\right)\\right]\\\\ & = & -\\lambda^{3}+7\\lambda^{2}+8\\lambda-3.\\end{eqnarray*}\n",
"$$\n",
"\n",
"特征根为:\n",
"$$\n",
"\\begin{eqnarray*} \\lambda_{1} & = & 7.9579\\\\ \\lambda_{2} & = & -1.2577\\\\ \\lambda_{3} & = & 0.2997.\\end{eqnarray*}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 7.95791620+0.j -1.25766471+0.j 0.29974850+0.j]\n",
"[ 1. 1. 1.]\n",
"3.23301824835e-15\n"
]
}
],
"source": [
"A = np.array([[1, 5, 2], \n",
" [2, 4, 1],\n",
" [3, 6, 2]])\n",
"\n",
"la, v = linalg.eig(A)\n",
"\n",
"print la\n",
"\n",
"\n",
"# 验证是否归一化\n",
"print np.sum(abs(v**2),axis=0)\n",
"\n",
"# 第一个特征值\n",
"l1 = la[0]\n",
"# 对应的特征向量\n",
"v1 = v[:, 0].T\n",
"\n",
"# 验证是否为特征值和特征向量对\n",
"print linalg.norm(A.dot(v1)-l1*v1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 奇异值分解"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 问题描述"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$M \\times N$ 矩阵 $\\mathbf A$ 的奇异值分解为:\n",
"$$\n",
"\\mathbf{A=U}\\boldsymbol{\\Sigma}\\mathbf{V}^{H}\n",
"$$\n",
"\n",
"其中 $\\boldsymbol{\\Sigma}, (M \\times N)$ 只有对角线上的元素不为 0,$\\mathbf U, (M \\times M)$ 和 $\\mathbf V, (N \\times N)$ 为正交矩阵。\n",
"\n",
"其具体原理可以查看维基百科:\n",
"https://en.wikipedia.org/wiki/Singular_value_decomposition"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 问题求解"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- `U,s,Vh = linalg.svd(A)` \n",
" - 返回 $U$ 矩阵,奇异值 $s$,$V^H$ 矩阵\n",
"- `Sig = linalg.diagsvd(s,M,N)`\n",
" - 从奇异值恢复 $\\boldsymbol{\\Sigma}$ 矩阵"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 例子"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"奇异值分解:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"A = np.array([[1,2,3],[4,5,6]])\n",
"\n",
"U, s, Vh = linalg.svd(A)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$\\boldsymbol{\\Sigma}$ 矩阵:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 9.508032 0. 0. ]\n",
" [ 0. 0.77286964 0. ]]\n"
]
}
],
"source": [
"M, N = A.shape\n",
"Sig = linalg.diagsvd(s,M,N)\n",
"\n",
"print Sig"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"检查正确性:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1 2 3]\n",
" [4 5 6]]\n",
"[[ 1. 2. 3.]\n",
" [ 4. 5. 6.]]\n"
]
}
],
"source": [
"print A\n",
"print U.dot(Sig.dot(Vh))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### LU 分解"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$M \\times N$ 矩阵 $\\mathbf A$ 的 `LU` 分解为:\n",
"$$\n",
"\\mathbf{A}=\\mathbf{P}\\,\\mathbf{L}\\,\\mathbf{U}\n",
"$$\n",
"\n",
"$\\mathbf P$ 是 $M \\times M$ 的单位矩阵的一个排列,$\\mathbf L$ 是下三角阵,$\\mathbf U$ 是上三角阵。 \n",
"\n",
"可以使用 `linalg.lu` 进行 LU 分解的求解:\n",
"\n",
"具体原理可以查看维基百科:\n",
"https://en.wikipedia.org/wiki/LU_decomposition"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 0. 1.]\n",
" [ 1. 0.]]\n",
"[[ 1. 0. ]\n",
" [ 0.25 1. ]]\n",
"[[ 4. 5. 6. ]\n",
" [ 0. 0.75 1.5 ]]\n",
"[[ 1. 2. 3.]\n",
" [ 4. 5. 6.]]\n"
]
}
],
"source": [
"A = np.array([[1,2,3],[4,5,6]])\n",
"\n",
"P, L, U = linalg.lu(A)\n",
"\n",
"print P\n",
"print L\n",
"print U\n",
"\n",
"print P.dot(L).dot(U)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Cholesky 分解"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`Cholesky` 分解是一种特殊的 `LU` 分解,此时要求 $\\mathbf A$ 为 Hermitian 正定矩阵 ($\\mathbf A = \\mathbf{A^H}$)。\n",
"\n",
"此时有:\n",
"$$\n",
"\\begin{eqnarray*} \\mathbf{A} & = & \\mathbf{U}^{H}\\mathbf{U}\\\\ \\mathbf{A} & = & \\mathbf{L}\\mathbf{L}^{H}\\end{eqnarray*}\n",
"$$\n",
"即\n",
"$$\n",
"\\mathbf{L}=\\mathbf{U}^{H}.\n",
"$$\n",
"\n",
"可以用 `linalg.cholesky` 求解。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### QR 分解"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$M×N$ 矩阵 $\\mathbf A$ 的 `QR` 分解为:\n",
"$$\n",
"\\mathbf{A=QR}\n",
"$$\n",
"\n",
"$\\mathbf R$ 为上三角形矩阵,$\\mathbf Q$ 是正交矩阵。\n",
"\n",
"维基链接:\n",
"https://en.wikipedia.org/wiki/QR_decomposition\n",
"\n",
"可以用 `linalg.qr` 求解。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Schur 分解"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于 $N\\times N$ 方阵 $\\mathbf A$, `Schur` 分解要求找到满足下式的矩阵:\n",
"$$\n",
"\\mathbf{A=ZTZ^H}\n",
"$$\n",
"\n",
"其中 $\\mathbf Z$ 是正交矩阵,$\\mathbf T$ 是一个上三角矩阵。\n",
"\n",
"维基链接:\n",
"https://en.wikipedia.org/wiki/Schur_decomposition"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1 3 2]\n",
" [1 4 5]\n",
" [2 3 6]]\n",
"[[ 9.90012467 1.78947961 -0.65498528]\n",
" [ 0. 0.54993766 -1.57754789]\n",
" [ 0. 0.51260928 0.54993766]] [[ 0.36702395 -0.85002495 -0.37782404]\n",
" [ 0.63681656 -0.06646488 0.76814522]\n",
" [ 0.67805463 0.52253231 -0.51691576]]\n",
"[[ 1. 3. 2.]\n",
" [ 1. 4. 5.]\n",
" [ 2. 3. 6.]]\n"
]
}
],
"source": [
"A = np.mat('[1 3 2; 1 4 5; 2 3 6]')\n",
"\n",
"print A\n",
"\n",
"T, Z = linalg.schur(A)\n",
"\n",
"print T, Z\n",
"\n",
"print Z.dot(T).dot(Z.T)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 矩阵函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"考虑函数 $f(x)$ 的泰勒展开:\n",
"$$\n",
"f\\left(x\\right)=\\sum_{k=0}^{\\infty}\\frac{f^{\\left(k\\right)}\\left(0\\right)}{k!}x^{k}\n",
"$$\n",
"\n",
"对于方阵,矩阵函数可以定义如下:\n",
"$$\n",
"f\\left(\\mathbf{A}\\right)=\\sum_{k=0}^{\\infty}\\frac{f^{\\left(k\\right)}\\left(0\\right)}{k!}\\mathbf{A}^{k}\n",
"$$\n",
"\n",
"这也是计算矩阵函数的最好的方式。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 指数和对数函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 指数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"指数可以定义如下:\n",
"$$\n",
"e^{\\mathbf{A}}=\\sum_{k=0}^{\\infty}\\frac{1}{k!}\\mathbf{A}^{k}\n",
"$$\n",
"\n",
"`linalg.expm3` 使用的是泰勒展开的方法计算结果:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 51.96890355 74.73648784]\n",
" [ 112.10473176 164.07363531]]\n"
]
}
],
"source": [
"A = np.array([[1, 2], [3, 4]])\n",
"\n",
"print linalg.expm3(A)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"另一种方法先计算 A 的特征值分解:\n",
"$$\n",
"\\mathbf{A}=\\mathbf{V}\\boldsymbol{\\Lambda}\\mathbf{V}^{-1}\n",
"$$\n",
"\n",
"然后有(正交矩阵和对角阵的性质):\n",
"$$\n",
"e^{\\mathbf{A}}=\\mathbf{V}e^{\\boldsymbol{\\Lambda}}\\mathbf{V}^{-1}\n",
"$$\n",
"\n",
"`linalg.expm2` 使用的就是这种方法:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 51.9689562 74.73656457]\n",
" [ 112.10484685 164.07380305]]\n"
]
}
],
"source": [
"print linalg.expm2(A)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最优的方法是用 [`Padé` 近似](https://en.wikipedia.org/wiki/Pad%C3%A9_approximant) 实现,`Padé` 近似往往比截断的泰勒级数准确,而且当泰勒级数不收敛时,`Padé` 近似往往仍可行,所以多用于在计算机数学中。\n",
"\n",
"`linalg.expm` 使用的就是这种方法:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 51.9689562 74.73656457]\n",
" [ 112.10484685 164.07380305]]\n"
]
}
],
"source": [
"print linalg.expm(A)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 对数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"指数的逆运算,可以用 `linalg.logm` 实现:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1 2]\n",
" [3 4]]\n",
"[[ 1. 2.]\n",
" [ 3. 4.]]\n"
]
}
],
"source": [
"print A\n",
"print linalg.logm(linalg.expm(A))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 三角函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"根据欧拉公式,其定义为:\n",
"$$\n",
"\\begin{eqnarray*} \\sin\\left(\\mathbf{A}\\right) & = & \\frac{e^{j\\mathbf{A}}-e^{-j\\mathbf{A}}}{2j}\\\\ \\cos\\left(\\mathbf{A}\\right) & = & \\frac{e^{j\\mathbf{A}}+e^{-j\\mathbf{A}}}{2}.\\end{eqnarray*}\n",
"$$\n",
"\n",
"正切函数定义为:\n",
"$$\n",
"\\tan\\left(x\\right)=\\frac{\\sin\\left(x\\right)}{\\cos\\left(x\\right)}=\\left[\\cos\\left(x\\right)\\right]^{-1}\\sin\\left(x\\right)\n",
"$$\n",
"\n",
"因此矩阵的正切函数定义为:\n",
"$$\n",
"\\left[\\cos\\left(\\mathbf{A}\\right)\\right]^{-1}\\sin\\left(\\mathbf{A}\\right).\n",
"$$\n",
"\n",
"具体实现:\n",
"- `linalg.sinm`\n",
"- `linalg.cosm`\n",
"- `linalg.tanm`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 双曲三角函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\\begin{eqnarray*} \\sinh\\left(\\mathbf{A}\\right) & = & \\frac{e^{\\mathbf{A}}-e^{-\\mathbf{A}}}{2}\\\\ \\cosh\\left(\\mathbf{A}\\right) & = & \\frac{e^{\\mathbf{A}}+e^{-\\mathbf{A}}}{2}\\\\ \\tanh\\left(\\mathbf{A}\\right) & = & \\left[\\cosh\\left(\\mathbf{A}\\right)\\right]^{-1}\\sinh\\left(\\mathbf{A}\\right).\\end{eqnarray*}\n",
"\n",
"具体实现:\n",
"- `linalg.sinhm`\n",
"- `linalg.coshm`\n",
"- `linalg.tanhm`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 特殊矩阵"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`Scipy` 提供了一些特殊矩阵的实现,具体可以参考:\n",
"\n",
"http://docs.scipy.org/doc/scipy/reference/tutorial/linalg.html#special-matrices"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 04-scipy/04.10-sparse-linear-algebra.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 稀疏矩阵的线性代数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于稀疏矩阵来说,其线性代数操作可以使用 `scipy.sparse.linalg` 实现:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import scipy.sparse.linalg"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 矩阵操作"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- `scipy.sparse.linalg.inv`\n",
" - 稀疏矩阵求逆\n",
"- `scipy.sparse.linalg.expm`\n",
" - 求稀疏矩阵的指数函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 矩阵范数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- `scipy.sparse.linalg.norm`\n",
" - 稀疏矩阵求范数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 线性方程组求解"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"提供了一系列求解方法:\n",
"http://docs.scipy.org/doc/scipy/reference/sparse.linalg.html#solving-linear-problems\n",
"\n",
"主要使用的是迭代方法求解。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 特征值分解和奇异值分解"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于特别大的矩阵,原来的方法可能需要太大的内存,考虑使用这两个方法替代:\n",
"\n",
"- `scipy.sparse.linalg.eigs`\n",
" - 返回前 k 大的特征值和特征向量\n",
"- `scipy.sparse.linalg.svds`\n",
" - 返回前 k 大的奇异值和奇异向量"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 所有的这些操作既可以在稀疏矩阵上使用,也可以在普通矩阵上使用。"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 04-scipy/JANAF_CH4.txt
================================================
Methane (CH4) C1H4(g)
T(K) Cp S -[G-H(Tr)]/T H-H(Tr) delta-f H delta-f G log Kf
0 0. 0. INFINITE -10.024 -66.911 -66.911 INFINITE
100 33.258 149.500 216.485 -6.698 -69.644 -64.353 33.615
200 33.473 172.577 189.418 -3.368 -72.027 -58.161 15.190
250 34.216 180.113 186.829 -1.679 -73.426 -54.536 11.395
298.15 35.639 186.251 186.251 0. -74.873 -50.768 8.894
300 35.708 186.472 186.252 0.066 -74.929 -50.618 8.813
350 37.874 192.131 186.694 1.903 -76.461 -46.445 6.932
400 40.500 197.356 187.704 3.861 -77.969 -42.054 5.492
450 43.374 202.291 189.053 5.957 -79.422 -37.476 4.350
500 46.342 207.014 190.614 8.200 -80.802 -32.741 3.420
600 52.227 215.987 194.103 13.130 -83.308 -22.887 1.993
700 57.794 224.461 197.840 18.635 -85.452 -12.643 0.943
800 62.932 232.518 201.675 24.675 -87.238 -2.115 0.138
900 67.601 240.205 205.532 31.205 -88.692 8.616 -0.500
1000 71.795 247.549 209.370 38.179 -89.849 19.492 -1.018
1100 75.529 254.570 213.162 45.549 -90.750 30.472 -1.447
1200 78.833 261.287 216.895 53.270 -91.437 41.524 -1.807
1300 81.744 267.714 220.558 61.302 -91.945 52.626 -2.115
1400 84.305 273.868 224.148 69.608 -92.308 63.761 -2.379
1500 86.556 279.763 227.660 78.153 -92.553 74.918 -2.609
1600 88.537 285.413 231.095 86.910 -92.703 86.088 -2.810
1700 90.283 290.834 234.450 95.853 -92.780 97.265 -2.989
1800 91.824 296.039 237.728 104.960 -92.797 108.445 -3.147
1900 93.188 301.041 240.930 114.212 -92.770 119.624 -3.289
2000 94.399 305.853 244.057 123.592 -92.709 130.802 -3.416
2100 95.477 310.485 247.110 133.087 -92.624 141.975 -3.531
2200 96.439 314.949 250.093 142.684 -92.521 153.144 -3.636
2300 97.301 319.255 253.007 152.371 -92.409 164.308 -3.732
2400 98.075 323.413 255.854 162.141 -92.291 175.467 -3.819
2500 98.772 327.431 258.638 171.984 -92.174 186.622 -3.899
2600 99.401 331.317 261.359 181.893 -92.060 197.771 -3.973
2700 99.971 335.080 264.020 191.862 -91.954 208.916 -4.042
2800 100.489 338.725 266.623 201.885 -91.857 220.058 -4.105
2900 100.960 342.260 269.171 211.958 -91.773 231.196 -4.164
3000 101.389 345.690 271.664 222.076 -91.705 242.332 -4.219
3100 101.782 349.021 274.106 232.235 -91.653 253.465 -4.271
3200 102.143 352.258 276.498 242.431 -91.621 264.598 -4.319
3300 102.474 355.406 278.842 252.662 -91.609 275.730 -4.364
3400 102.778 358.470 281.139 262.925 -91.619 286.861 -4.407
3500 103.060 361.453 283.391 273.217 -91.654 297.993 -4.447
3600 103.319 364.360 285.600 283.536 -91.713 309.127 -4.485
3700 103.560 367.194 287.767 293.881 -91.798 320.262 -4.521
3800 103.783 369.959 289.894 304.248 -91.911 331.401 -4.555
3900 103.990 372.658 291.982 314.637 -92.051 342.542 -4.588
4000 104.183 375.293 294.032 325.045 -92.222 353.687 -4.619
4100 104.363 377.868 296.045 335.473 -92.422 364.838 -4.648
4200 104.531 380.385 298.023 345.918 -92.652 375.993 -4.676
4300 104.688 382.846 299.967 356.379 -92.914 387.155 -4.703
4400 104.834 385.255 301.879 366.855 -93.208 398.322 -4.729
4500 104.972 387.612 303.758 377.345 -93.533 409.497 -4.753
4600 105.101 389.921 305.606 387.849 -93.891 420.679 -4.777
4700 105.223 392.182 307.424 398.365 -94.281 431.869 -4.800
4800 105.337 394.399 309.213 408.893 -94.702 443.069 -4.822
4900 105.445 396.572 310.973 419.432 -95.156 454.277 -4.843
5000 105.546 398.703 312.707 429.982 -95.641 465.495 -4.863
5100 105.642 400.794 314.414 440.541 -96.157 476.722 -4.883
5200 105.733 402.847 316.095 451.110 -96.703 487.961 -4.902
5300 105.818 404.861 317.750 461.688 -97.278 499.210 -4.920
5400 105.899 406.840 319.382 472.274 -97.882 510.470 -4.938
5500 105.976 408.784 320.990 482.867 -98.513 521.741 -4.955
5600 106.049 410.694 322.575 493.469 -99.170 533.025 -4.972
5700 106.118 412.572 324.137 504.077 -99.852 544.320 -4.988
5800 106.184 414.418 325.678 514.692 -100.557 555.628 -5.004
5900 106.247 416.234 327.197 525.314 -101.284 566.946 -5.019
6000 106.306 418.020 328.696 535.942 -102.032 578.279 -5.034
================================================
FILE: 05-advanced-python/05.01-overview-of-the-sys-module.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# sys 模块简介"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import sys"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 命令行参数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`sys.argv` 显示传入的参数:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Writing print_args.py\n"
]
}
],
"source": [
"%%writefile print_args.py\n",
"import sys\n",
"print sys.argv"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"运行这个程序:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['print_args.py', '1', 'foo']\n"
]
}
],
"source": [
"%run print_args.py 1 foo"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"第一个参数 (`sys.args[0]`) 表示的始终是执行的文件名,然后依次显示传入的参数。\n",
"\n",
"删除刚才生成的文件:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os\n",
"os.remove('print_args.py')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 异常消息"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`sys.exc_info()` 可以显示 `Exception` 的信息,返回一个 `(type, value, traceback)` 组成的三元组,可以与 `try/catch` 块一起使用: "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(, ZeroDivisionError('integer division or modulo by zero',), )\n"
]
}
],
"source": [
"try:\n",
" x = 1/0\n",
"except Exception:\n",
" print sys.exc_info()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`sys.exc_clear()` 用于清除所有的异常消息。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 标准输入输出流"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- sys.stdin\n",
"- sys.stdout\n",
"- sys.stderr"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 退出Python"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`sys.exit(arg=0)` 用于退出 Python。`0` 或者 `None` 表示正常退出,其他值表示异常。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Python Path"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`sys.path` 表示 Python 搜索模块的路径和查找顺序:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['',\n",
" 'C:\\\\Anaconda\\\\python27.zip',\n",
" 'C:\\\\Anaconda\\\\DLLs',\n",
" 'C:\\\\Anaconda\\\\lib',\n",
" 'C:\\\\Anaconda\\\\lib\\\\plat-win',\n",
" 'C:\\\\Anaconda\\\\lib\\\\lib-tk',\n",
" 'C:\\\\Anaconda',\n",
" 'C:\\\\Anaconda\\\\lib\\\\site-packages',\n",
" 'C:\\\\Anaconda\\\\lib\\\\site-packages\\\\Sphinx-1.3.1-py2.7.egg',\n",
" 'C:\\\\Anaconda\\\\lib\\\\site-packages\\\\cryptography-0.9.1-py2.7-win-amd64.egg',\n",
" 'C:\\\\Anaconda\\\\lib\\\\site-packages\\\\win32',\n",
" 'C:\\\\Anaconda\\\\lib\\\\site-packages\\\\win32\\\\lib',\n",
" 'C:\\\\Anaconda\\\\lib\\\\site-packages\\\\Pythonwin',\n",
" 'C:\\\\Anaconda\\\\lib\\\\site-packages\\\\setuptools-17.1.1-py2.7.egg',\n",
" 'C:\\\\Anaconda\\\\lib\\\\site-packages\\\\IPython\\\\extensions']"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sys.path"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在程序中可以修改,添加新的路径。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 操作系统信息"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`sys.platform` 显示当前操作系统信息:\n",
"\n",
"- `Windows: win32`\n",
"- `Mac OSX: darwin`\n",
"- `Linux: linux2`"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'win32'"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sys.platform"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"返回 `Windows` 操作系统的版本:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"sys.getwindowsversion(major=6, minor=2, build=9200, platform=2, service_pack='')"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sys.getwindowsversion()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"标准库中有 `planform` 模块提供更详细的信息。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Python 版本信息"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'2.7.10 |Anaconda 2.3.0 (64-bit)| (default, May 28 2015, 16:44:52) [MSC v.1500 64 bit (AMD64)]'"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sys.version"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"sys.version_info(major=2, minor=7, micro=10, releaselevel='final', serial=0)"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sys.version_info"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 05-advanced-python/05.02-interacting-with-the-OS---os.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 与操作系统进行交互:os 模块"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`os` 模块提供了对系统文件进行操作的方法:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 文件路径操作"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- `os.remove(path)` 或 `os.unlink(path)` :删除指定路径的文件。路径可以是全名,也可以是当前工作目录下的路径。\n",
"- `os.removedirs`:删除文件,并删除中间路径中的空文件夹\n",
"- `os.chdir(path)`:将当前工作目录改变为指定的路径\n",
"- `os.getcwd()`:返回当前的工作目录\n",
"- `os.curdir`:表示当前目录的符号\n",
"- `os.rename(old, new)`:重命名文件\n",
"- `os.renames(old, new)`:重命名文件,如果中间路径的文件夹不存在,则创建文件夹\n",
"- `os.listdir(path)`:返回给定目录下的所有文件夹和文件名,不包括 `'.'` 和 `'..'` 以及子文件夹下的目录。(`'.'` 和 `'..'` 分别指当前目录和父目录)\n",
"- `os.mkdir(name)`:产生新文件夹\n",
"- `os.makedirs(name)`:产生新文件夹,如果中间路径的文件夹不存在,则创建文件夹\n",
"\n",
"当前目录:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'/home/lijin/notes-python/05. advanced python'"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"os.getcwd()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当前目录的符号:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'.'"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"os.curdir"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当前目录下的文件:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['05.01 overview of the sys module.ipynb',\n",
" '05.05 datetime.ipynb',\n",
" '05.13 decorator usage.ipynb',\n",
" '.ipynb_checkpoints',\n",
" '05.03 comma separated values.ipynb',\n",
" '05.02 interacting with the OS - os.ipynb',\n",
" '05.10 generators.ipynb',\n",
" '05.15 scope.ipynb',\n",
" '05.12 decorators.ipynb',\n",
" '05.09 iterators.ipynb',\n",
" 'my_database.sqlite',\n",
" '05.11 context managers and the with statement.ipynb',\n",
" '05.16 dynamic code execution.ipynb',\n",
" '05.14 the operator functools itertools toolz fn funcy module.ipynb',\n",
" '05.04 regular expression.ipynb',\n",
" '05.07 object-relational mappers.ipynb',\n",
" '05.08 functions.ipynb',\n",
" '05.06 sql databases.ipynb']"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"os.listdir(os.curdir)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"产生文件:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n"
]
}
],
"source": [
"f = open(\"test.file\", \"w\")\n",
"f.close()\n",
"\n",
"print \"test.file\" in os.listdir(os.curdir)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"重命名文件:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"False\n",
"True\n"
]
}
],
"source": [
"os.rename(\"test.file\", \"test.new.file\")\n",
"\n",
"print \"test.file\" in os.listdir(os.curdir)\n",
"print \"test.new.file\" in os.listdir(os.curdir)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"删除文件:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"os.remove(\"test.new.file\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## 系统常量"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当前操作系统的换行符:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'\\n'"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# windows 为 \\r\\n\n",
"os.linesep"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当前操作系统的路径分隔符:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'/'"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"os.sep"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当前操作系统的环境变量中的分隔符(`';'` 或 `':'`):"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"':'"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"os.pathsep"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 其他"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`os.environ` 是一个存储所有环境变量的值的字典,可以修改。"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'lijin'"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"os.environ[\"USER\"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`os.urandom(len)` 返回指定长度的随机字节。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## os.path 模块"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不同的操作系统使用不同的路径规范,这样当我们在不同的操作系统下进行操作时,可能会带来一定的麻烦,而 `os.path` 模块则帮我们解决了这个问题。"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os.path"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 测试"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- `os.path.isfile(path)` :检测一个路径是否为普通文件\n",
"- `os.path.isdir(path)`:检测一个路径是否为文件夹\n",
"- `os.path.exists(path)`:检测路径是否存在\n",
"- `os.path.isabs(path)`:检测路径是否为绝对路径"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### split 和 join"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- `os.path.split(path)`:拆分一个路径为 `(head, tail)` 两部分\n",
"- `os.path.join(a, *p)`:使用系统的路径分隔符,将各个部分合成一个路径"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 其他"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- `os.path.abspath()`:返回路径的绝对路径\n",
"- `os.path.dirname(path)`:返回路径中的文件夹部分\n",
"- `os.path.basename(path)`:返回路径中的文件部分\n",
"- `os.path.splitext(path)`:将路径与扩展名分开\n",
"- `os.path.expanduser(path)`:展开 `'~'` 和 `'~user'`"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 05-advanced-python/05.03-comma-separated-values.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# CSV 文件和 csv 模块"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"标准库中有自带的 `csv` (逗号分隔值) 模块处理 `csv` 格式的文件:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import csv"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 读 csv 文件"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"假设我们有这样的一个文件:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Writing data.csv\n"
]
}
],
"source": [
"%%file data.csv\n",
"\"alpha 1\", 100, -1.443\n",
"\"beat 3\", 12, -0.0934\n",
"\"gamma 3a\", 192, -0.6621\n",
"\"delta 2a\", 15, -4.515"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"打开这个文件,并产生一个文件 reader:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"fp = open(\"data.csv\")\n",
"r = csv.reader(fp)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以按行迭代数据:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['alpha 1', ' 100', ' -1.443']\n",
"['beat 3', ' 12', ' -0.0934']\n",
"['gamma 3a', ' 192', ' -0.6621']\n",
"['delta 2a', ' 15', ' -4.515']\n"
]
}
],
"source": [
"for row in r:\n",
" print row\n",
" \n",
"fp.close()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"默认数据内容都被当作字符串处理,不过可以自己进行处理:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"[['alpha 1', 100, -1.443],\n",
" ['beat 3', 12, -0.0934],\n",
" ['gamma 3a', 192, -0.6621],\n",
" ['delta 2a', 15, -4.515]]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = []\n",
"\n",
"with open('data.csv') as fp:\n",
" r = csv.reader(fp)\n",
" for row in r:\n",
" data.append([row[0], int(row[1]), float(row[2])])\n",
" \n",
"data"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import os\n",
"os.remove('data.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 写 csv 文件"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以使用 `csv.writer` 写入文件,不过相应地,传入的应该是以写方式打开的文件,不过一般要用 `'wb'` 即二进制写入方式,防止出现换行不正确的问题:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"data = [('one', 1, 1.5), ('two', 2, 8.0)]\n",
"with open('out.csv', 'wb') as fp:\n",
" w = csv.writer(fp)\n",
" w.writerows(data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"显示结果:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"one,1,1.5\n",
"two,2,8.0\n"
]
}
],
"source": [
"!cat 'out.csv'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 更换分隔符"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"默认情况下,`csv` 模块默认 `csv` 文件都是由 `excel` 产生的,实际中可能会遇到这样的问题:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data = [('one, \\\"real\\\" string', 1, 1.5), ('two', 2, 8.0)]\n",
"with open('out.csv', 'wb') as fp:\n",
" w = csv.writer(fp)\n",
" w.writerows(data)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\"one, \"\"real\"\" string\",1,1.5\n",
"two,2,8.0\n"
]
}
],
"source": [
"!cat 'out.csv'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以修改分隔符来处理这组数据:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data = [('one, \\\"real\\\" string', 1, 1.5), ('two', 2, 8.0)]\n",
"with open('out.psv', 'wb') as fp:\n",
" w = csv.writer(fp, delimiter=\"|\")\n",
" w.writerows(data)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\"one, \"\"real\"\" string\"|1|1.5\n",
"two|2|8.0\n"
]
}
],
"source": [
"!cat 'out.psv'"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os\n",
"os.remove('out.psv')\n",
"os.remove('out.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 其他选项"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`numpy.loadtxt()` 和 `pandas.read_csv()` 可以用来读写包含很多数值数据的 `csv` 文件:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Writing trades.csv\n"
]
}
],
"source": [
"%%file trades.csv\n",
"Order,Date,Stock,Quantity,Price\n",
"A0001,2013-12-01,AAPL,1000,203.4\n",
"A0002,2013-12-01,MSFT,1500,167.5\n",
"A0003,2013-12-02,GOOG,1500,167.5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `pandas` 进行处理,生成一个 `DataFrame` 对象:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Date Stock Quantity Price\n",
"Order \n",
"A0001 2013-12-01 AAPL 1000 203.4\n",
"A0002 2013-12-01 MSFT 1500 167.5\n",
"A0003 2013-12-02 GOOG 1500 167.5\n"
]
}
],
"source": [
"import pandas\n",
"df = pandas.read_csv('trades.csv', index_col=0)\n",
"print df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"通过名字进行索引:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"Order\n",
"A0001 203400\n",
"A0002 251250\n",
"A0003 251250\n",
"dtype: float64"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['Quantity'] * df['Price']"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os\n",
"os.remove('trades.csv')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 05-advanced-python/05.04-regular-expression.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 正则表达式和 re 模块"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 正则表达式"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[正则表达式](http://baike.baidu.com/view/94238.htm)是用来匹配字符串或者子串的一种模式,匹配的字符串可以很具体,也可以很一般化。\n",
"\n",
"`Python` 标准库提供了 `re` 模块。 "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import re"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## re.match & re.search"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在 `re` 模块中, `re.match` 和 `re.search` 是常用的两个方法:\n",
"\n",
" re.match(pattern, string[, flags])\n",
" re.search(pattern, string[, flags])\n",
"\n",
"两者都寻找第一个匹配成功的部分,成功则返回一个 `match` 对象,不成功则返回 `None`,不同之处在于 `re.match` 只匹配字符串的开头部分,而 `re.search` 匹配的则是整个字符串中的子串。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## re.findall & re.finditer"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`re.findall(pattern, string)` 返回所有匹配的对象, `re.finditer` 则返回一个迭代器。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## re.split"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`re.split(pattern, string[, maxsplit])` 按照 `pattern` 指定的内容对字符串进行分割。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## re.sub"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`re.sub(pattern, repl, string[, count])` 将 `pattern` 匹配的内容进行替换。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## re.compile"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`re.compile(pattern)` 生成一个 `pattern` 对象,这个对象有匹配,替换,分割字符串的方法。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 正则表达式规则"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"正则表达式由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义:\n",
"\n",
"子表达式|匹配内容\n",
"---|---\n",
"`.`| 匹配除了换行符之外的内容\n",
"`\\w` | 匹配所有字母和数字字符\n",
"`\\d` | 匹配所有数字,相当于 `[0-9]`\n",
"`\\s` | 匹配空白,相当于 `[\\t\\n\\t\\f\\v]`\n",
"`\\W,\\D,\\S`| 匹配对应小写字母形式的补\n",
"`[...]` | 表示可以匹配的集合,支持范围表示如 `a-z`, `0-9` 等\n",
"`(...)` | 表示作为一个整体进行匹配\n",
"¦ | 表示逻辑或\n",
"`^` | 表示匹配后面的子表达式的补\n",
"`*` | 表示匹配前面的子表达式 0 次或更多次\n",
"`+` | 表示匹配前面的子表达式 1 次或更多次\n",
"`?` | 表示匹配前面的子表达式 0 次或 1 次\n",
"`{m}` | 表示匹配前面的子表达式 m 次\n",
"`{m,}` | 表示匹配前面的子表达式至少 m 次\n",
"`{m,n}` | 表示匹配前面的子表达式至少 m 次,至多 n 次\n",
"\n",
"例如:\n",
"\n",
"- `ca*t 匹配: ct, cat, caaaat, ...`\n",
"- `ab\\d|ac\\d 匹配: ab1, ac9, ...`\n",
"- `([^a-q]bd) 匹配: rbd, 5bd, ...`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 例子"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"假设我们要匹配这样的字符串:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<_sre.SRE_Match object at 0x0000000003A5DA80>\n"
]
}
],
"source": [
"string = 'hello world'\n",
"pattern = 'hello (\\w+)'\n",
"\n",
"match = re.match(pattern, string)\n",
"print match"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"一旦找到了符合条件的部分,我们便可以使用 `group` 方法查看匹配的部分:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello world\n"
]
}
],
"source": [
"if match is not None:\n",
" print match.group(0)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"world\n"
]
}
],
"source": [
"if match is not None:\n",
" print match.group(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"我们可以改变 string 的内容:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello there\n",
"there\n"
]
}
],
"source": [
"string = 'hello there'\n",
"pattern = 'hello (\\w+)'\n",
"\n",
"match = re.match(pattern, string)\n",
"if match is not None:\n",
" print match.group(0)\n",
" print match.group(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"通常,`match.group(0)` 匹配整个返回的内容,之后的 `1,2,3,...` 返回规则中每个括号(按照括号的位置排序)匹配的部分。\n",
"\n",
"如果某个 `pattern` 需要反复使用,那么我们可以将它预先编译:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"there\n"
]
}
],
"source": [
"pattern1 = re.compile('hello (\\w+)')\n",
"\n",
"match = pattern1.match(string)\n",
"if match is not None:\n",
" print match.group(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"由于元字符的存在,所以对于一些特殊字符,我们需要使用 `'\\'` 进行逃逸字符的处理,使用表达式 `'\\\\'` 来匹配 `'\\'` 。\n",
"\n",
"但事实上,`Python` 本身对逃逸字符也是这样处理的:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\\\n"
]
}
],
"source": [
"pattern = '\\\\'\n",
"print pattern"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"因为逃逸字符的问题,我们需要使用四个 `'\\\\\\\\'` 来匹配一个单独的 `'\\'`:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['C:', 'foo', 'bar', 'baz.txt']\n"
]
}
],
"source": [
"pattern = '\\\\\\\\'\n",
"path = \"C:\\\\foo\\\\bar\\\\baz.txt\"\n",
"print re.split(pattern, path)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这样看起来十分麻烦,好在 `Python` 提供了 `raw string` 来忽略对逃逸字符串的处理,从而可以这样进行匹配:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['C:', 'foo', 'bar', 'baz.txt']\n"
]
}
],
"source": [
"pattern = r'\\\\'\n",
"path = r\"C:\\foo\\bar\\baz.txt\"\n",
"print re.split(pattern, path)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果规则太多复杂,正则表达式不一定是个好选择。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Numpy 的 fromregex()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Writing test.dat\n"
]
}
],
"source": [
"%%file test.dat \n",
"1312 foo\n",
"1534 bar\n",
"444 qux"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" fromregex(file, pattern, dtype)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`dtype` 中的内容与 `pattern` 的括号一一对应:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(1312L, 'foo') (1534L, 'bar') (444L, 'qux')]\n"
]
}
],
"source": [
"pattern = \"(\\d+)\\s+(...)\"\n",
"dt = [('num', 'int64'), ('key', 'S3')]\n",
"\n",
"from numpy import fromregex\n",
"output = fromregex('test.dat', pattern, dt)\n",
"print output"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"显示 `num` 项:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1312 1534 444]\n"
]
}
],
"source": [
"print output['num']"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os\n",
"os.remove('test.dat')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 05-advanced-python/05.05-datetime.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# datetime 模块"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import datetime as dt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`datetime` 提供了基础时间和日期的处理。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## date 对象"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以使用 `date(year, month, day)` 产生一个 `date` 对象:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"d1 = dt.date(2007, 9, 25)\n",
"d2 = dt.date(2008, 9, 25)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以格式化 `date` 对象的输出:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2007-09-25\n",
"Tuesday, 09/25/07\n",
"Tue, 09-25-2007\n"
]
}
],
"source": [
"print d1\n",
"print d1.strftime('%A, %m/%d/%y')\n",
"print d1.strftime('%a, %m-%d-%Y')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以看两个日期相差多久:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"366 days, 0:00:00\n"
]
}
],
"source": [
"print d2 - d1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"返回的是一个 `timedelta` 对象:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"366\n",
"0\n"
]
}
],
"source": [
"d = d2 - d1\n",
"print d.days\n",
"print d.seconds"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"查看今天的日期:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2015-09-10\n"
]
}
],
"source": [
"print dt.date.today()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## time 对象"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以使用 `time(hour, min, sec, us)` 产生一个 `time` 对象:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"t1 = dt.time(15, 38)\n",
"t2 = dt.time(18)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"改变显示格式:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"15:38:00\n",
"03:38, PM\n",
"15:38:00, PM\n"
]
}
],
"source": [
"print t1\n",
"print t1.strftime('%I:%M, %p')\n",
"print t1.strftime('%H:%M:%S, %p')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"因为没有具体的日期信息,所以 `time` 对象不支持减法操作。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## datetime 对象"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"可以使用 `datetime(year, month, day, hr, min, sec, us)` 来创建一个 `datetime` 对象。 \n",
"\n",
"获得当前时间:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2015-09-10 20:58:50.148000\n"
]
}
],
"source": [
"d1 = dt.datetime.now()\n",
"print d1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"给当前的时间加上 `30` 天,`timedelta` 的参数是 `timedelta(day, hr, min, sec, us)`:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2015-10-10 20:58:50.148000\n"
]
}
],
"source": [
"d2 = d1 + dt.timedelta(30)\n",
"print d2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"除此之外,我们还可以通过一些指定格式的字符串来创建 `datetime` 对象:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2001-02-10 00:00:00\n"
]
}
],
"source": [
"print dt.datetime.strptime('2/10/01', '%m/%d/%y')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## datetime 格式字符表"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"字符|含义\n",
"--|--\n",
"`%a` | 星期英文缩写\n",
"`%A` | 星期英文\n",
"`%w` | 一星期的第几天,`[0(sun),6]`\n",
"`%b` | 月份英文缩写\n",
"`%B` | 月份英文\n",
"`%d` | 日期,`[01,31]`\n",
"`%H` | 小时,`[00,23]`\n",
"`%I` | 小时,`[01,12]`\n",
"`%j` | 一年的第几天,`[001,366]`\n",
"`%m` | 月份,`[01,12]`\n",
"`%M` | 分钟,`[00,59]`\n",
"`%p` | AM 和 PM\n",
"`%S` | 秒钟,`[00,61]` (大概是有闰秒的存在)\n",
"`%U` | 一年中的第几个星期,星期日为第一天,`[00,53]`\n",
"`%W` | 一年中的第几个星期,星期一为第一天,`[00,53]`\n",
"`%y` | 没有世纪的年份\n",
"`%Y` | 完整的年份"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 05-advanced-python/05.06-sql-databases.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# SQL 数据库"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`Python` 提供了一系列标准的数据库的 API,这里我们介绍 sqlite 数据库的用法,其他的数据库的用法大同小异:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import sqlite3 as db"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"首先我们要建立或者连接到一个数据库上:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"connection = db.connect(\"my_database.sqlite\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不同的数据库有着不同的连接方法,例如 cx-oracle 数据库的链接方式为:\n",
"\n",
" connection = db.connect(username, password, host, port, 'XE')\n",
"\n",
"一旦建立连接,我们可以利用它的 `cursor()` 来执行 SQL 语句:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"cursor = connection.cursor()\n",
"cursor.execute(\"\"\"CREATE TABLE IF NOT EXISTS orders(\n",
" order_id TEXT PRIMARY KEY,\n",
" date TEXT,\n",
" symbol TEXT,\n",
" quantity INTEGER,\n",
" price NUMBER)\"\"\")\n",
"cursor.execute(\"\"\"INSERT INTO orders VALUES\n",
" ('A0001', '2013-12-01', 'AAPL', 1000, 203.4)\"\"\")\n",
"connection.commit()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不过为了安全起见,一般不将数据内容写入字符串再传入,而是使用这样的方式:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"orders = [\n",
" (\"A0002\",\"2013-12-01\",\"MSFT\",1500,167.5),\n",
" (\"A0003\",\"2013-12-02\",\"GOOG\",1500,167.5)\n",
"]\n",
"cursor.executemany(\"\"\"INSERT INTO orders VALUES\n",
" (?, ?, ?, ?, ?)\"\"\", orders)\n",
"connection.commit()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"cx-oracle 数据库使用不同的方式:\n",
"\n",
" cursor.executemany(\"\"\"INSERT INTO orders VALUES\n",
" (:order_id, :date, :symbol, :quantity, :price)\"\"\",\n",
" orders)\n",
"\n",
"查看支持的数据库格式:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'qmark'"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"db.paramstyle"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在 `query` 语句执行之后,我们需要进行 `commit`,否则数据库将不会接受这些变化,如果想撤销某个 `commit`,可以使用 `rollback()` 方法撤销到上一次 `commit()` 的结果:\n",
"\n",
" try:\n",
" ... # perform some operations\n",
" except:\n",
" connection.rollback()\n",
" raise\n",
" else:\n",
" connection.commit()\n",
"\n",
"使用 `SELECT` 语句对数据库进行查询:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(u'A0002', u'2013-12-01', u'MSFT', 1500, 167.5)\n"
]
}
],
"source": [
"stock = 'MSFT'\n",
"cursor.execute(\"\"\"SELECT *\n",
" FROM orders\n",
" WHERE symbol=?\n",
" ORDER BY quantity\"\"\", (stock,))\n",
"for row in cursor:\n",
" print row"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`cursor.fetchone()` 返回下一条内容, `cursor.fetchall()` 返回所有查询到的内容组成的列表(可能非常大):"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[(u'A0001', u'2013-12-01', u'AAPL', 1000, 203.4)]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stock = 'AAPL'\n",
"cursor.execute(\"\"\"SELECT *\n",
" FROM orders\n",
" WHERE symbol=?\n",
" ORDER BY quantity\"\"\", (stock,))\n",
"cursor.fetchall()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"关闭数据库:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"cursor.close()\n",
"connection.close()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 05-advanced-python/05.07-object-relational-mappers.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 对象关系映射"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"数据库中的记录可以与一个 `Python` 对象对应。\n",
"\n",
"例如对于上一节中的数据库:\n",
"\n",
"Order|Date|Stock|Quantity|Price\n",
"--|--|--|--|--\n",
"A0001|2013-12-01|AAPL|1000|203.4\n",
"A0002|2013-12-01|MSFT|1500|167.5\n",
"A0003|2013-12-02|GOOG|1500|167.5\n",
"\n",
"可以用一个类来描述:\n",
"\n",
"Attr.|Method\n",
"--|--\n",
"Order id| Cost\n",
"Date|\n",
"Stock|\n",
"Quant.|\n",
"Price|\n",
"\n",
"可以使用 `sqlalchemy` 来实现这种对应:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sqlalchemy.ext.declarative import declarative_base\n",
"from sqlalchemy import Column, Date, Float, Integer, String\n",
"\n",
"Base = declarative_base()\n",
"\n",
"class Order(Base):\n",
" __tablename__ = 'orders'\n",
" \n",
" order_id = Column(String, primary_key=True)\n",
" date = Column(Date)\n",
" symbol = Column(String)\n",
" quantity = Column(Integer)\n",
" price = Column(Float)\n",
" \n",
" def get_cost(self):\n",
" return self.quantity*self.price"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"生成一个 `Order` 对象:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import datetime\n",
"order = Order(order_id='A0004', date=datetime.date.today(), symbol='MSFT', quantity=-1000, price=187.54)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"调用方法:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-187540.0"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"order.get_cost()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用上一节生成的数据库产生一个 `session`:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sqlalchemy import create_engine\n",
"from sqlalchemy.orm import sessionmaker\n",
"\n",
"engine = create_engine(\"sqlite:///my_database.sqlite\") # 相当于 connection\n",
"Session = sessionmaker(bind=engine) # 相当于 cursor\n",
"session = Session()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用这个 `session` 向数据库中添加刚才生成的对象:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"session.add(order)\n",
"session.commit()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"显示是否添加成功:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(u'A0001', u'2013-12-01', u'AAPL', 1000, 203.4)\n",
"(u'A0002', u'2013-12-01', u'MSFT', 1500, 167.5)\n",
"(u'A0003', u'2013-12-02', u'GOOG', 1500, 167.5)\n",
"(u'A0004', u'2015-09-10', u'MSFT', -1000, 187.54)\n"
]
}
],
"source": [
"for row in engine.execute(\"SELECT * FROM orders\"):\n",
" print row"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"使用 `filter` 进行查询,返回的是 `Order` 对象的列表:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"A0001 2013-12-01 203400.0\n"
]
}
],
"source": [
"for order in session.query(Order).filter(Order.symbol==\"AAPL\"):\n",
" print order.order_id, order.date, order.get_cost()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"返回列表的第一个:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"order_2 = session.query(Order).filter(Order.order_id=='A0002').first()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"u'MSFT'"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"order_2.symbol"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 05-advanced-python/05.08-functions.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 函数进阶:参数传递,高阶函数,lambda 匿名函数,global 变量,递归"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 函数是基本类型"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在 `Python` 中,函数是一种基本类型的对象,这意味着\n",
"\n",
"- 可以将函数作为参数传给另一个函数\n",
"- 将函数作为字典的值储存\n",
"- 将函数作为另一个函数的返回值"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def square(x):\n",
" \"\"\"Square of x.\"\"\"\n",
" return x*x\n",
"\n",
"def cube(x):\n",
" \"\"\"Cube of x.\"\"\"\n",
" return x*x*x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"作为字典的值:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"funcs = {\n",
" 'square': square,\n",
" 'cube': cube,\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"例子:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4\n",
"8\n",
"cube 8\n",
"square 4\n"
]
}
],
"source": [
"x = 2\n",
"\n",
"print square(x)\n",
"print cube(x)\n",
"\n",
"for func in sorted(funcs):\n",
" print func, funcs[func](x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 函数参数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 引用传递"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`Python` 中的函数传递方式是 `call by reference` 即引用传递,例如,对于这样的用法:\n",
"\n",
" x = [10, 11, 12]\n",
" f(x)\n",
"\n",
"传递给函数 `f` 的是一个指向 `x` 所包含内容的引用,如果我们修改了这个引用所指向内容的值(例如 `x[0]=999`),那么外面的 `x` 的值也会被改变。不过如果我们在函数中赋给 `x` 一个新的值(例如另一个列表),那么在函数外面的 `x` 的值不会改变:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 2, 3]\n",
"[999, 2, 3]\n",
"[999, 2, 3]\n"
]
}
],
"source": [
"def mod_f(x):\n",
" x[0] = 999\n",
" return x\n",
"\n",
"x = [1, 2, 3]\n",
"\n",
"print x\n",
"print mod_f(x)\n",
"print x"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 2, 3]\n",
"[4, 5, 6]\n",
"[1, 2, 3]\n"
]
}
],
"source": [
"def no_mod_f(x):\n",
" x = [4, 5, 6]\n",
" return x\n",
"\n",
"x = [1,2,3]\n",
"\n",
"print x\n",
"print no_mod_f(x)\n",
"print x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 默认参数是可变的!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"函数可以传递默认参数,默认参数的绑定发生在函数定义的时候,以后每次调用默认参数时都会使用同一个引用。\n",
"\n",
"这样的机制会导致这种情况的发生:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def f(x = []):\n",
" x.append(1)\n",
" return x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"理论上说,我们希望调用 `f()` 时返回的是 `[1]`, 但事实上:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1]\n",
"[1, 1]\n",
"[1, 1, 1]\n",
"[9, 9, 9, 1]\n",
"[1, 1, 1, 1]\n",
"[1, 1, 1, 1, 1]\n"
]
}
],
"source": [
"print f()\n",
"print f()\n",
"print f()\n",
"print f(x = [9,9,9])\n",
"print f()\n",
"print f()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"而我们希望看到的应该是这样:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1]\n",
"[1]\n",
"[1]\n",
"[9, 9, 9, 1]\n",
"[1]\n",
"[1]\n"
]
}
],
"source": [
"def f(x = None):\n",
" if x is None:\n",
" x = []\n",
" x.append(1)\n",
" return x\n",
"\n",
"print f()\n",
"print f()\n",
"print f()\n",
"print f(x = [9,9,9])\n",
"print f()\n",
"print f()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 高阶函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"以函数作为参数,或者返回一个函数的函数是高阶函数,常用的例子有 `map` 和 `filter` 函数:\n",
"\n",
"`map(f, sq)` 函数将 `f` 作用到 `sq` 的每个元素上去,并返回结果组成的列表,相当于:\n",
"```python\n",
"[f(s) for s in sq]\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[0, 1, 4, 9, 16]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"map(square, range(5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`filter(f, sq)` 函数的作用相当于,对于 `sq` 的每个元素 `s`,返回所有 `f(s)` 为 `True` 的 `s` 组成的列表,相当于:\n",
"```python\n",
"[s for s in sq if f(s)]\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[0, 2, 4]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def is_even(x):\n",
" return x % 2 == 0\n",
"\n",
"filter(is_even, range(5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"一起使用:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[0, 4, 16]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"map(square, filter(is_even, range(5)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`reduce(f, sq)` 函数接受一个二元操作函数 `f(x,y)`,并对于序列 `sq` 每次合并两个元素:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"15"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def my_add(x, y):\n",
" return x + y\n",
"\n",
"reduce(my_add, [1,2,3,4,5])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"传入加法函数,相当于对序列求和。\n",
"\n",
"返回一个函数:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def make_logger(target):\n",
" def logger(data):\n",
" with open(target, 'a') as f:\n",
" f.write(data + '\\n')\n",
" return logger\n",
"\n",
"foo_logger = make_logger('foo.txt')\n",
"foo_logger('Hello')\n",
"foo_logger('World')"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Hello\n",
"World\n"
]
}
],
"source": [
"!cat foo.txt"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os\n",
"os.remove('foo.txt')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 匿名函数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在使用 `map`, `filter`,`reduce` 等函数的时候,为了方便,对一些简单的函数,我们通常使用匿名函数的方式进行处理,其基本形式是:\n",
"\n",
" lambda : \n",
"\n",
"例如,我们可以将这个:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0, 1, 4, 9, 16]\n"
]
}
],
"source": [
"print map(square, range(5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"用匿名函数替换为:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0, 1, 4, 9, 16]\n"
]
}
],
"source": [
"print map(lambda x: x * x, range(5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"匿名函数虽然写起来比较方便(省去了定义函数的烦恼),但是有时候会比较难于阅读:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"285\n"
]
}
],
"source": [
"s1 = reduce(lambda x, y: x+y, map(lambda x: x**2, range(1,10)))\n",
"print(s1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当然,更简单地,我们可以写成这样:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"285\n"
]
}
],
"source": [
"s2 = sum(x**2 for x in range(1, 10))\n",
"print s2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# global 变量"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"一般来说,函数中是可以直接使用全局变量的值的:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"15\n"
]
}
],
"source": [
"x = 15\n",
"\n",
"def print_x():\n",
" print x\n",
" \n",
"print_x()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"但是要在函数中修改全局变量的值,需要加上 `global` 关键字:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"18\n",
"18\n"
]
}
],
"source": [
"x = 15\n",
"\n",
"def print_newx():\n",
" global x\n",
" x = 18\n",
" print x\n",
" \n",
"print_newx()\n",
"\n",
"print x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"如果不加上这句 `global` 那么全局变量的值不会改变:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"18\n",
"15\n"
]
}
],
"source": [
"x = 15\n",
"\n",
"def print_newx():\n",
" x = 18\n",
" print x\n",
" \n",
"print_newx()\n",
"\n",
"print x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 递归"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"递归是指函数在执行的过程中调用了本身,一般用于分治法,不过在 `Python` 中这样的用法十分地小,所以一般不怎么使用:\n",
"\n",
"Fibocacci 数列:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]\n"
]
}
],
"source": [
"def fib1(n):\n",
" \"\"\"Fib with recursion.\"\"\"\n",
"\n",
" # base case\n",
" if n==0 or n==1:\n",
" return 1\n",
" # recurssive caae\n",
" else:\n",
" return fib1(n-1) + fib1(n-2)\n",
"\n",
"print [fib1(i) for i in range(10)]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"一个更高效的非递归版本:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]\n"
]
}
],
"source": [
"def fib2(n):\n",
" \"\"\"Fib without recursion.\"\"\"\n",
" a, b = 0, 1\n",
" for i in range(1, n+1):\n",
" a, b = b, a+b\n",
" return b\n",
"\n",
"print [fib2(i) for i in range(10)]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"速度比较:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 loops, best of 3: 5.35 ms per loop\n",
"100000 loops, best of 3: 2.2 µs per loop\n"
]
}
],
"source": [
"%timeit fib1(20)\n",
"%timeit fib2(20)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对于第一个递归函数来说,调用 `fib(n+2)` 的时候计算 `fib(n+1), fib(n)`,调用 `fib(n+1)` 的时候也计算了一次 `fib(n)`,这样造成了重复计算。\n",
"\n",
"使用缓存机制的递归版本,这里利用了默认参数可变的性质,构造了一个缓存:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]\n",
"100 loops, best of 3: 5.37 ms per loop\n",
"100000 loops, best of 3: 2.19 µs per loop\n",
"The slowest run took 150.16 times longer than the fastest. This could mean that an intermediate result is being cached \n",
"1000000 loops, best of 3: 230 ns per loop\n"
]
}
],
"source": [
"def fib3(n, cache={0: 1, 1: 1}):\n",
" \"\"\"Fib with recursion and caching.\"\"\"\n",
"\n",
" try:\n",
" return cache[n]\n",
" except KeyError:\n",
" cache[n] = fib3(n-1) + fib3(n-2)\n",
" return cache[n]\n",
"\n",
"print [fib3(i) for i in range(10)]\n",
"\n",
"%timeit fib1(20)\n",
"%timeit fib2(20)\n",
"%timeit fib3(20)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 05-advanced-python/05.09-iterators.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 迭代器"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 简介"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"迭代器对象可以在 `for` 循环中使用:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2\n",
"4\n",
"6\n"
]
}
],
"source": [
"x = [2, 4, 6]\n",
"\n",
"for n in x:\n",
" print n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"其好处是不需要对下标进行迭代,但是有些情况下,我们既希望获得下标,也希望获得对应的值,那么可以将迭代器传给 `enumerate` 函数,这样每次迭代都会返回一组 `(index, value)` 组成的元组:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"pos 0 is 2\n",
"pos 1 is 4\n",
"pos 2 is 6\n"
]
}
],
"source": [
"x = [2, 4, 6]\n",
"\n",
"for i, n in enumerate(x):\n",
" print 'pos', i, 'is', n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"迭代器对象必须实现 `__iter__` 方法:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"x = [2, 4, 6]\n",
"i = x.__iter__()\n",
"print i"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`__iter__()` 返回的对象支持 `next` 方法,返回迭代器中的下一个元素:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2\n"
]
}
],
"source": [
"print i.next()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当下一个元素不存在时,会 `raise` 一个 `StopIteration` 错误:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4\n",
"6\n"
]
}
],
"source": [
"print i.next()\n",
"print i.next()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "StopIteration",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mStopIteration\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mi\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnext\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mStopIteration\u001b[0m: "
]
}
],
"source": [
"i.next()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"很多标准库函数返回的是迭代器:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"r = reversed(x)\n",
"print r"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"调用它的 `next()` 方法:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6\n",
"4\n",
"2\n"
]
}
],
"source": [
"print r.next()\n",
"print r.next()\n",
"print r.next()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"字典对象的 `iterkeys, itervalues, iteritems` 方法返回的都是迭代器:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"x = {'a':1, 'b':2, 'c':3}\n",
"i = x.iteritems()\n",
"print i"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"迭代器的 `__iter__` 方法返回它本身:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"print i.__iter__()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"('a', 1)\n"
]
}
],
"source": [
"print i.next()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 自定义迭代器"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"自定义一个 list 的取反迭代器:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class ReverseListIterator(object):\n",
" \n",
" def __init__(self, list):\n",
" self.list = list\n",
" self.index = len(list)\n",
" \n",
" def __iter__(self):\n",
" return self\n",
" \n",
" def next(self):\n",
" self.index -= 1\n",
" if self.index >= 0:\n",
" return self.list[self.index]\n",
" else:\n",
" raise StopIteration"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"9 8 7 6 5 4 3 2 1 0\n"
]
}
],
"source": [
"x = range(10)\n",
"for i in ReverseListIterator(x):\n",
" print i,"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"只要我们定义了这三个方法,我们可以返回任意迭代值:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class Collatz(object):\n",
" \n",
" def __init__(self, start):\n",
" self.value = start\n",
" \n",
" def __iter__(self):\n",
" return self\n",
" \n",
" def next(self):\n",
" if self.value == 1:\n",
" raise StopIteration\n",
" elif self.value % 2 == 0:\n",
" self.value = self.value / 2\n",
" else:\n",
" self.value = 3 * self.value + 1\n",
" return self.value"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"这里我们实现 [Collatz 猜想](http://baike.baidu.com/view/736196.htm):\n",
"\n",
"- 奇数 n:返回 3n + 1\n",
"- 偶数 n:返回 n / 2\n",
"\n",
"直到 n 为 1 为止:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1\n"
]
}
],
"source": [
"for x in Collatz(7):\n",
" print x,"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不过迭代器对象存在状态,会出现这样的问题:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"22 11\n",
"34 17\n",
"52 26\n",
"13 40\n",
"20 10\n",
"5 16\n",
"8 4\n",
"2 1\n"
]
}
],
"source": [
"i = Collatz(7)\n",
"for x, y in zip(i, i):\n",
" print x, y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"一个比较好的解决方法是将迭代器和可迭代对象分开处理,这里提供了一个二分树的中序遍历实现:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class BinaryTree(object):\n",
" def __init__(self, value, left=None, right=None):\n",
" self.value = value\n",
" self.left = left\n",
" self.right = right\n",
"\n",
" def __iter__(self):\n",
" return InorderIterator(self)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class InorderIterator(object):\n",
" \n",
" def __init__(self, node):\n",
" self.node = node\n",
" self.stack = []\n",
" \n",
" def next(self):\n",
" if len(self.stack) > 0 or self.node is not None:\n",
" while self.node is not None:\n",
" self.stack.append(self.node)\n",
" self.node = self.node.left\n",
" node = self.stack.pop()\n",
" self.node = node.right\n",
" return node.value\n",
" else:\n",
" raise StopIteration()"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"tree = BinaryTree(\n",
" left=BinaryTree(\n",
" left=BinaryTree(1),\n",
" value=2,\n",
" right=BinaryTree(\n",
" left=BinaryTree(3),\n",
" value=4,\n",
" right=BinaryTree(5)\n",
" ),\n",
" ),\n",
" value=6,\n",
" right=BinaryTree(\n",
" value=7,\n",
" right=BinaryTree(8)\n",
" )\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1 2 3 4 5 6 7 8\n"
]
}
],
"source": [
"for value in tree:\n",
" print value,"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"不会出现之前的问题:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1 1\n",
"2 2\n",
"3 3\n",
"4 4\n",
"5 5\n",
"6 6\n",
"7 7\n",
"8 8\n"
]
}
],
"source": [
"for x,y in zip(tree, tree):\n",
" print x, y"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
================================================
FILE: 05-advanced-python/05.10-generators.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 生成器"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`while` 循环通常有这样的形式:\n",
"\n",
"```python\n",
"\n",
"result = []\n",
"while True:\n",
" \n",
" result.append(value)\n",
" if :\n",
" break\n",
"```\n",
"\n",
"使用迭代器实现这样的循环:\n",
"\n",
"```python\n",
"class GenericIterator(object):\n",
" def __init__(self, ...):\n",
" \n",
" # 需要额外储存状态\n",
" \n",
" def next(self): \n",
" \n",
" \n",
" if |
|---|