{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Интеллектуальный анализ данных. Введение в анализ данных\n", "\n", "## Семинар 4. Библиотека Numpy, Scipy. Визуализация с помощью библиотеки Matplotlib.\n", "\n", "### 0. Полезная информация\n", " - [Страница курса на вики](http://wiki.cs.hse.ru/Майнор_Интеллектуальный_анализ_данных/Введение_в_анализ_данных)\n", " - [Страница семинаров на вики](http://wiki.cs.hse.ru/Майнор_Интеллектуальный_анализ_данных/Введение_в_анализ_данных/ИАД-11,12)\n", " - [Таблица с оценками](https://docs.google.com/spreadsheets/d/1jZL_-ELf0Ogj2XHa6VVbkg8vrInycv2-Z9UR5keLDfM/edit?usp=sharing)\n", " - Почта курса *hse.minor.dm@gmail.com* (Формат темы: \"[ИАД-NN] - Вопрос - Фамилия Имя Отчество\")\n", " - Виртуальная машина для майнора (подробности см. на странице семинара)\n", " - **Подписаться на рассылку**: написать пустое письмо на hse-minor-datamining-2+subscribe@googlegroups.com\n", " - Первое ДЗ!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Проверочная\n", "- 10 баллов максимум\n", "- 15 минут \n", "- составляет аудиторную оценку, каждая проверочная с равными весами\n", "___\n", "1. Только одну из ненаписанных проверочных можно написать, если нет уважительной причины; любую можно с уважительной причиной (к примеру, поход к врачу, приносите справку)\n", "2. самая худшая из написанных проверочных не будет учитываться. Важнее всего, что из написанных проверочных выбирается худшая. Ненаписанные проверочные будут учитываться с нулевыми баллами, но обязательно будут учитываться каждая;\n", "3. в конце модуля по оценкам мы подведем итоги. Если появиться необходимость, устроим контрольную работу, чтобы вы могли поднять оценку." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. Numpy (продолжение)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Библиотека **random**\n", "- seed(), randint(), rand(), randn()\n", "- choice(), permutation()\n", "- normal(), binominal()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[7, 0, 8, 6, 4],\n", " [9, 9, 6, 8, 9],\n", " [2, 6, 2, 7, 7],\n", " [6, 6, 7, 7, 7],\n", " [8, 6, 8, 0, 6]])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.random.randint(10, size=(5, 5))\n", "B = np.random.randint(10, size=(5, 5))\n", "A" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[3, 0, 4, 3, 2],\n", " [4, 4, 3, 4, 4],\n", " [1, 3, 1, 3, 3],\n", " [3, 3, 3, 3, 3],\n", " [4, 3, 4, 0, 3]])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A/2" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 3.5, 0. , 4. , 3. , 2. ],\n", " [ 4.5, 4.5, 3. , 4. , 4.5],\n", " [ 1. , 3. , 1. , 3.5, 3.5],\n", " [ 3. , 3. , 3.5, 3.5, 3.5],\n", " [ 4. , 3. , 4. , 0. , 3. ]])" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.astype(float)/2" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 3.5, 0. , 4. , 3. , 2. ],\n", " [ 4.5, 4.5, 3. , 4. , 4.5],\n", " [ 1. , 3. , 1. , 3.5, 3.5],\n", " [ 3. , 3. , 3.5, 3.5, 3.5],\n", " [ 4. , 3. , 4. , 0. , 3. ]])" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A/2.0" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[49, 0, 56, 54, 20],\n", " [ 9, 54, 18, 32, 0],\n", " [16, 36, 8, 49, 14],\n", " [ 6, 36, 56, 35, 7],\n", " [24, 18, 0, 0, 42]])" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A*B\n", "# np.dot(A, B) == A.dot(B)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[131, 117, 129, 173, 85],\n", " [155, 192, 178, 253, 128],\n", " [ 64, 117, 96, 133, 70],\n", " [132, 159, 144, 204, 100],\n", " [144, 126, 106, 188, 98]])" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.dot(A, B)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 45, 64, 60, 28, 47],\n", " [ 47, 92, 58, 44, 63],\n", " [ 73, 85, 115, 24, 86],\n", " [ 48, 102, 60, 48, 72],\n", " [ 84, 132, 131, 44, 125]])" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.random.randint(10, size=(5, 3))\n", "B = np.random.randint(10, size=(3, 5))\n", "A.dot(B)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import random as rd\n", "A_l = [[random.random() for j in range(3)] for i in range(5)]\n", "B_l = [[random.random() for j in range(5)] for i in range(3)]" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": true }, "outputs": [ { "ename": "TypeError", "evalue": "list indices must be integers, not tuple", "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[0mget_ipython\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun_cell_magic\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mu'timeit'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34mu''\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34mu'# \\u043a\\u043e\\u0434 \\u043f\\u0435\\u0440\\u0435\\u043c\\u043d\\u043e\\u0436\\u0435\\u043d\\u0438\\u044f \\u043c\\u0430\\u0442\\u0440\\u0438\\u0446 \\u043d\\u0430 \\u044f\\u0437\\u044b\\u043a\\u0435 python \\u0441 \\u0438\\u0441\\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435\\u043c list\\nC_l = [[[sum([A_l[i, k]*B_l[k, j]]) for k in range(3)] for j in range(5)] for i in range(5)]'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;32m/home/jupyter/env/local/lib/python2.7/site-packages/IPython/core/interactiveshell.pyc\u001b[0m in \u001b[0;36mrun_cell_magic\u001b[1;34m(self, magic_name, line, cell)\u001b[0m\n\u001b[0;32m 2291\u001b[0m \u001b[0mmagic_arg_s\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mvar_expand\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mline\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstack_depth\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2292\u001b[0m \u001b[1;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbuiltin_trap\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2293\u001b[1;33m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmagic_arg_s\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcell\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2294\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2295\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m\u001b[0m in \u001b[0;36mtimeit\u001b[1;34m(self, line, cell)\u001b[0m\n", "\u001b[1;32m/home/jupyter/env/local/lib/python2.7/site-packages/IPython/core/magic.pyc\u001b[0m in \u001b[0;36m\u001b[1;34m(f, *a, **k)\u001b[0m\n\u001b[0;32m 191\u001b[0m \u001b[1;31m# but it's overkill for just that one bit of state.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 192\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mmagic_deco\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 193\u001b[1;33m \u001b[0mcall\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mlambda\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mk\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mk\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 194\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 195\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mcallable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/home/jupyter/env/local/lib/python2.7/site-packages/IPython/core/magics/execution.pyc\u001b[0m in \u001b[0;36mtimeit\u001b[1;34m(self, line, cell)\u001b[0m\n\u001b[0;32m 1035\u001b[0m \u001b[0mnumber\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1036\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0m_\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m10\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1037\u001b[1;33m \u001b[0mtime_number\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtimer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtimeit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnumber\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1038\u001b[0m \u001b[0mworst_tuning\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmax\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mworst_tuning\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtime_number\u001b[0m \u001b[1;33m/\u001b[0m \u001b[0mnumber\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1039\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mtime_number\u001b[0m \u001b[1;33m>=\u001b[0m \u001b[1;36m0.2\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/home/jupyter/env/local/lib/python2.7/site-packages/IPython/core/magics/execution.pyc\u001b[0m in \u001b[0;36mtimeit\u001b[1;34m(self, number)\u001b[0m\n\u001b[0;32m 131\u001b[0m \u001b[0mgc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdisable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 132\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 133\u001b[1;33m \u001b[0mtiming\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0minner\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mit\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtimer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 134\u001b[0m \u001b[1;32mfinally\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 135\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mgcold\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m\u001b[0m in \u001b[0;36minner\u001b[1;34m(_it, _timer)\u001b[0m\n", "\u001b[1;31mTypeError\u001b[0m: list indices must be integers, not tuple" ] } ], "source": [ "%%timeit\n", "# код перемножения матриц на языке python с использованием list\n", "C_l = [[[sum([A_l[i, k]*B_l[k, j]]) for k in range(3)] for j in range(5)] for i in range(5)]" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The slowest run took 31.53 times longer than the fastest. This could mean that an intermediate result is being cached \n", "1000000 loops, best of 3: 1.11 µs per loop\n" ] } ], "source": [ "%timeit A.dot(B)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The slowest run took 21.80 times longer than the fastest. This could mean that an intermediate result is being cached \n", "1000000 loops, best of 3: 1.59 µs per loop\n" ] } ], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Универсальные функции\n", "- не надо использовать np.repeat(), np.tile()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[[18, 63, 12],\n", " [48, 28, 5]],\n", "\n", " [[ 3, 56, 18],\n", " [72, 0, 3]],\n", "\n", " [[ 3, 35, 21],\n", " [48, 20, 2]],\n", "\n", " [[24, 42, 27],\n", " [48, 16, 1]]])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.random.randint(10, size=(2, 3))\n", "B = np.random.randint(10, size=(4, 2, 3))\n", "\n", "A*B" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "A.astype(float)/2" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/plain": [ "array([[[ 8.00033541, 9.31326169, 8.69314718, 9.31326169, 8.31326169],\n", " [ 7.01814993, 5.12692801, 9.00247569, 5.12692801, 3.12692801],\n", " [ 3.31326169, 7.00671535, 2.12692801, 2.12692801, 4.12692801]],\n", "\n", " [[ 4.01814993, 9.00671535, 8.01814993, 9.00671535, 7.04858735],\n", " [ 7.04858735, 5.31326169, 9.00671535, 5.31326169, 4.04858735],\n", " [ 7.01814993, 7.69314718, 7.00091147, 7.00091147, 7.04858735]],\n", "\n", " [[ 3.04858735, 9.00247569, 8.00671535, 9.00247569, 7.01814993],\n", " [ 7.00671535, 5.04858735, 9.00091147, 5.04858735, 2.31326169],\n", " [ 7.01814993, 7.69314718, 7.00091147, 7.00091147, 7.04858735]],\n", "\n", " [[ 4.01814993, 9.00671535, 8.01814993, 9.00671535, 7.04858735],\n", " [ 7.00671535, 5.04858735, 9.00091147, 5.04858735, 2.31326169],\n", " [ 3.04858735, 7.00091147, 0.69314718, 0.69314718, 4.01814993]],\n", "\n", " [[ 8.00033541, 9.31326169, 8.69314718, 9.31326169, 8.31326169],\n", " [ 7.31326169, 6.31326169, 9.04858735, 6.31326169, 6.00671535],\n", " [ 3.31326169, 7.00671535, 2.12692801, 2.12692801, 4.12692801]]])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.logaddexp(A[..., np.newaxis], B)\n", "# np.logaddexp(A, B) и np.logaddexp(A[np.newaxis ,...], B) не сработает, " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "View" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(3, 5)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.arange(3*5).reshape(3, 5)\n", "A.shape" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(3, 5)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.arange(3*5)\n", "A.resize(3, 5)\n", "A.shape" ] }, { "cell_type": "code", "execution_count": 9, "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]])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "C = A.view()\n", "C.resize(5, 3)\n", "C[0,0] = 0\n", "A" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Linear algebra" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[-0.08346972, 0.03436989, 0.64484452, -0.3502455 , -0.22913257],\n", " [ 0.08783415, 0.19912711, 0.05346427, -0.10856519, -0.10529187],\n", " [ 0.18930715, -0.37206765, -0.71085652, 0.4740862 , 0.36933988],\n", " [-0.16475723, 0.18548827, 0.63884343, -0.42989634, -0.12547736],\n", " [ 0.01036552, 0.05455537, -0.34151664, 0.2853246 , 0.08074195]])" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.random.randint(10, size=(5, 5))\n", "np.linalg.inv(A)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1832.9999999999995" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.det(A)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "16" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.trace(A)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "16" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# по-другому?" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(array([[-0.44931509, -0.16032869, -0.86447952, 0.03366394, 0.15476614],\n", " [-0.25207412, -0.25332579, 0.17159818, 0.88901125, -0.22912386],\n", " [-0.52525296, 0.14238137, 0.09654679, -0.3247974 , -0.76747784],\n", " [-0.5735895 , 0.57569264, 0.28435477, 0.07613486, 0.50291045],\n", " [-0.3601097 , -0.74727925, 0.36476062, -0.31182666, 0.28567209]]),\n", " array([ 18.86282043, 7.85997935, 6.39475134, 3.01855238, 0.64048955]),\n", " array([[-0.49903564, -0.33111394, -0.43052832, -0.31149391, -0.59911926],\n", " [ 0.51940254, -0.32015114, -0.31740059, -0.65501751, 0.31294277],\n", " [-0.27407375, -0.67705409, -0.17009964, 0.43436161, 0.49887619],\n", " [-0.41328443, 0.56502848, -0.52097402, -0.12600288, 0.47185606],\n", " [-0.48504019, -0.10103158, 0.64308196, -0.5190153 , 0.26757681]]))" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.svd(A)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 18.16050163+0.j , -6.47495830+0.j ,\n", " 2.59667721+3.31563195j, 2.59667721-3.31563195j, -0.87889775+0.j ])" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.eigvals(A)" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "ename": "LinAlgError", "evalue": "Last 2 dimensions of the array must be square", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mLinAlgError\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[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrandint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msize\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m5\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[0;32m 2\u001b[0m \u001b[0mb\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrandint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msize\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m5\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[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlinalg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msolve\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mA\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mb\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;31m#np.allclose(np.dot(a, x), b)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/home/kvandy/anaconda3/envs/py27/lib/python2.7/site-packages/numpy/linalg/linalg.pyc\u001b[0m in \u001b[0;36msolve\u001b[1;34m(a, b)\u001b[0m\n\u001b[0;32m 356\u001b[0m \u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_makearray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 357\u001b[0m \u001b[0m_assertRankAtLeast2\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 358\u001b[1;33m \u001b[0m_assertNdSquareness\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 359\u001b[0m \u001b[0mb\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mwrap\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_makearray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mb\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 360\u001b[0m \u001b[0mt\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mresult_t\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_commonType\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mb\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/home/kvandy/anaconda3/envs/py27/lib/python2.7/site-packages/numpy/linalg/linalg.pyc\u001b[0m in \u001b[0;36m_assertNdSquareness\u001b[1;34m(*arrays)\u001b[0m\n\u001b[0;32m 210\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[1;32min\u001b[0m \u001b[0marrays\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 211\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mmax\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\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[0mmin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\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[1;32m--> 212\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mLinAlgError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'Last 2 dimensions of the array must be square'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 213\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 214\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_assertFinite\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0marrays\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mLinAlgError\u001b[0m: Last 2 dimensions of the array must be square" ] } ], "source": [ "A = np.random.randint(10, size=(5, 3))\n", "b = np.random.randint(10, size=(1,5))\n", "np.linalg.solve(A, b)\n", "\n", "#np.allclose(np.dot(a, x), b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задача 1**\n", "\n", "Проверить матрицу с вещественными элементами на симметричность, унитарность, вырожденность" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Что еще**\n", "- np.inner(), np.einsum()\n", "- np.linalg.qr()\n", "- np.linalg.lstsq()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. Scipy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[Scipy tutorial](http://docs.scipy.org/doc/scipy/reference/tutorial/index.html) - почти вся нужная информация\n", "\n", "Остальное - stackoverflow" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[Scipy/Numpy differences between similar functions](http://stackoverflow.com/questions/6200910/relationship-between-scipy-and-numpy)\n", "\n", "[Scipy/Numpy differences between importing submodules](http://stackoverflow.com/questions/27744767/differences-in-importing-modules-subpackages-of-numpy-and-scipy-packages)\n", "\n", "- весь linalg из numpy импортируется в scipy (scipy.linalg)\n", "- scipy.stats, scipy.linalg, scipy.optimize (работа с итерационными алгоритмами оптимизации), scipy.spatial (работа с объектами, как точками в линейном пространстве, к примеру, пострроение выпуклых оболочек [см. здесь](http://docs.scipy.org/doc/scipy/reference/tutorial/spatial.html))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### 3. Matplotlib" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "% matplotlib inline" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "circle1=plt.Circle((0,0),.2,color='r',alpha=0.1)\n", "circle2=plt.Circle((.5,.5),.2,color='b', alpha=0.5)\n", "circle3=plt.Circle((0.8,0.8),.2,color='g', alpha=1)\n", "fig = plt.gcf()\n", "fig.gca().axis('equal')\n", "fig.gca().add_artist(circle1)\n", "fig.gca().add_artist(circle2)\n", "fig.gca().add_artist(circle3)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0, 10, num=50)\n", "plt.plot(x, np.sin(x))" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEACAYAAABbMHZzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAF2NJREFUeJzt3XuMXGd5x/HfY+JVJqRrMN0YmpBd7gEkk2y7wTSqPLkY\nHErjVIpIzB8QugVSNwK1NCUEJG9FSUkFlECI4qTbKKlqO+IicqG0ySo7RW4VvHXiOAE7GMEuzgXv\ntEkWXEaxSZ7+MWc3483MzszOmTmX9/uRRp45c+acZ8ZnnnnPc973XXN3AQDCsiLpAAAAvUfyB4AA\nkfwBIEAkfwAIEMkfAAJE8geAAMWS/M1s3MwOm9m+Bs+vN7NnzezB6PbZOPYLAFieE2Lazq2Svibp\n9iXW+b67XxTT/gAAHYil5e/uuyQ902Q1i2NfAIDO9bLm/y4z22tm3zWzt/VwvwCAReIq+zSzR9Lp\n7v5rM7tQ0nckvblH+wYALNKT5O/uR2ruf8/MbjSz1e7+9OJ1zYzJhgCgTe7eVmk9zrKPqUFd38zW\n1Nw/W5LVS/zz3D2Tt61btyYeA/EnHwfxZ/OW5fiXI5aWv5ltl1SU9Coz+7mkrZL6qnncb5Z0iZn9\nmaRjkiqSLo1jvwCA5Ykl+bv7B5o8/3VJX49jXwCAzjHCN0bFYjHpEDpC/Mki/mRlPf522XLrRd1i\nZp62mAAgzcxMnuAFXwBARpD8ASBAJH8ACBDJHwACRPIHgACR/AEgQCR/AAgQyR8AAkTyB4AAkfwB\nIEAkfwAIEMkfAAJE8geAAJH8ASBAJH8ACBDJHwACRPIHgACR/AEgQCR/AAgQyR8AAkTyB4AAkfwB\nIEAkfwAIEMkfAAJE8geAAJH8ASBAsSR/Mxs3s8Nmtm+Jdb5qZgfNbK+ZnRnHfgEAyxNXy/9WSe9p\n9KSZXSjpDe7+Jkkfk3RTTPsFACxDLMnf3XdJemaJVTZJuj1a9weSVpnZmjj2jebK5bKmpqZULpeT\nDgUZV+9Y4vjKpl7V/E+VdKjm8RPRMnRB7Zdxx447NDh4hjZsuEKDg2dox447kg4PGVXvWOL4yi5z\n93g2ZDYo6W53X1vnubsl/Z27/1f0eELSX7v7g3XW9bhiCtGOHXdodHSL+vqG9NxzP9ULL7iOHv2+\npLWS9qlQOFczMwckSdPT0xoaGtLAwECiMSP9yuWyBgfPUKUyqflj6cQT18tsxXHL5o8vjqneMjO5\nu7XzmhO6FcwiT0h6bc3j06JldY2NjS3cLxaLKhaL3YorV8rlskZHt6hSmVSlslbSdklbVf1iStJa\nrVw5qG3bbtG1135JfX1DOnp0WuPjN2rz5kuTCxypVC6XFxoI09PT6usbio4rSVqrl73sFEkFLT6+\npqenJdG46KZSqaRSqdTZRtw9lpukIUmPNHjuvZK+G91fJ+mBJbbjaN3s7Kzv3r174d9Vq4Zd8ug2\n69JJLj0cPX7YTzzxFV4orD5uWaGw2mdnZ5N+K0iR7dt3eqGw2letGvZCYbXfdNPNLzluGh1L8+vO\nv3b79p1Jv53ci/Jmezm73RfU3Ui1ifmkpOck/VzSh1Xt1fPRmnVukPQTSQ9LGl5iW938jHKllS/o\nypUne6Gw2vv7z/JCYbV/7nOfX/QD4d7ff5bv3r076beDlJidnV0yqc8fS9u371w4BueX1TsGaVx0\nX2LJP84byb817XxBa88OGr2OLyfmvfQM8sUGQu2xNG/ps08aF72wnOTfq5o/YlavBrty5aCGh8/U\nzMyBl9Rba+uu4+M3anT0XK1cOahjx2Y0Pn4jdVksGBqqXguS9mn+Qu6xYzMLx9PiY2XxskavRcq0\n+2vR7Zto+bek0xZ8sxYcwra4nNNO3b6T12J5tIyWf2xdPeNCV8/WzXfrrG3BL7fXTm0XUXoAhae2\nZ898K77esqS2h6Utp6snyT/j4vhC1evDTX/tcPTih5/GRXeR/HOuWy2nqakpbdhwhebm9iws6+8f\n1sTENo2MjMS2H6RPL374aVx033KSP1M6Z0Q3h9Eff4FP4iJdOOY7DjQaqJWVfaB9JP8MqB25Oze3\nR5XKpEZHt8Q2kdbAwIDGx29UoXCu+vuHVSicSw+gQPTih5/GRTqR/DOgFy2nzZsv1czMAU1MbNPM\nzAHqsYHoxQ8/jYt0ouafAdRM0W296IlDb5/u4YJvjsXZrbMdfGGB9CP551yvEzHd84BsIPkjNpSa\n8istZ3NpiSMP6OqJ2NA9L5/S8pe30hJHyGj5p1TSrSJa/vmTlv/TtMSRJ7T8cyINrSK65+VPWs7m\n0hJH6Gj5p0zaWkVJn4EgPmk5ttISR57Q8s+BtLWKBgYGNDIywpcyB9JyNpeWOEJHyz9laBWh29Jy\nNpeWOPKArp45kdSALgDZRPLPEVpFAFpF8kdP8MMEpAsXfNF1aeiGCqBztPzRMi5GZ0/WztKyFm9a\n0PJHV6WtGyqWlrWztKzFm3W0/FMgK60dWv7ZkbX/q6zFmza0/DMoS60dBudkR9bO0rIWbx7Q8k9Q\nVls7WTlTCVnWjq2sxZs2tPwzJqutHaZ8SL+snaVlLd48oOWfIFo76LasnaVlLd60SGyQl5ltlPQV\nVc8kxt39ukXPr5d0p6SfRou+7e5/22BbwSR/iakcAHQukeRvZisk/VjS+ZKelDQl6TJ3P1CzznpJ\nn3T3i1rYXlDJX6K1A6Azy0n+J8Sw37MlHXT3mSiInZI2STqwaL22AgvJwMAASR9AT8VxwfdUSYdq\nHj8eLVvsXWa218y+a2Zvi2G/SJFyuaypqSmVy+WkQwHQgjha/q3YI+l0d/+1mV0o6TuS3txo5bGx\nsYX7xWJRxWKx2/GhA/PXLfr6hnT06DTXLYAuK5VKKpVKHW0jjpr/Oklj7r4xeny1JF980XfRa34m\n6Xfd/ek6zwVX888yeiwByUuqn/+UpDea2aCZ9Um6TNJdiwJbU3P/bFV/dF6S+JE9WR2rkEd5Lb3l\n9X0lrePk7+7PS7pS0r2Sfihpp7vvN7OPmdlHo9UuMbNHzewhVbuEUhPIiaGhaqlH2hct2adjx2Y0\nNDSUXFABytI0Ie3I6/tKAwZ5oWOMVUhWXktveX1f3ZBUV0+0IY99+jdvvlQXXHBe7t5XVsyX3iqV\nl5besvx/kdf3lRbM7dNDeT6FZb6f5OS19JbX95UWJP8eKZfLGh3dokplUnNze1SpTGp0dAsXsdCx\nvE6Kltf3lRbU/HtkampKGzZcobm5PQvL+vuHNTGxTSMjIwlGhrzIY0lRyu/7ilNiE7vFKa/Jn4tX\nALqF+fxTjFNYAGlCy7/HOIUFEDfKPgAQIMo+SBWG5QPpRfJHV+R5TAOQB5R9EDt6NgG9RdkHqcBM\nn70Rclkt5PceF5I/Ysew/O4LuawW8nuPE2UfdAUzfXZPyGW1kN/7UpjVM2VC7tPPTJ/dE/JslyG/\n97hR9ukSTk2Z6bNbQi6rhfze40by7wJm8EQ3hTxVSMjvPW7U/LuAGTzRCyGXFUN+7/UwvUNKcFEK\nQC/Rzz8lODUFkHa0/LuIU1MAvUDZBwACRNkHANASkj96ijlZgHQg+aNnGPgGpAc1f/QE3V+B7qHm\nj9RimufOUC5rjs+oPSR/9ARzsiwf5bLm+IzaF0vZx8w2SvqKqj8m4+5+XZ11virpQkn/J+lyd9/b\nYFuUfXKKaZ7bR7msOT6jhKZ0NrMVkm6QdL6kJyVNmdmd7n6gZp0LJb3B3d9kZu+UdJOkdZ3uO00Y\n0NUc0zy3jymMm+MzWp44yj5nSzro7jPufkzSTkmbFq2zSdLtkuTuP5C0yszWxLDvVOCUs3VM89we\nymXN8RktTxzJ/1RJh2oePx4tW2qdJ+qsk0lM34xuYp6o5viMlieVf8lrbGxs4X6xWFSxWEwslmY4\n5US3US5rLrTPqFQqqVQqdbSNji/4mtk6SWPuvjF6fLUkr73oa2Y3SZp09zuixwckrXf3w3W2l6kL\nvlxsApC0pPr5T0l6o5kNmlmfpMsk3bVonbskfTAKcp2kZ+sl/izilBNAFsXZ1fN6vdjV8wtm9jFV\nzwBujta5QdJGVbt6ftjdH2ywrUy1/OfR2wdAUpjSGQACxPQOAICWkPyRKOZjAZJB8kdiGBwHJIea\nPxJBF1kgPtT8kRlM8dwYpTD0AskfiWA+lvoohcWLH9LGSP5IBIPjXop5ouLFD+nSqPkjUQyOe9HU\n1JQ2bLhCc3N7Fpb19w9rYmKbRkZGEowse0K7ppTIfP5AJwYGBnL5ZVyO40th1YRFKWx5mHCxOco+\nQEpQCosP15Sao+wDpAylsHiE9GdDmdsHAGqE8kNK8geAADHICwDQEpI/AASI5A8AASL5I3UYkg90\nH8kfqcKQfKA36O2D1AhtSD4QF3r7INNCnOaZElfv8ZlXkfyRGqENyafE1Xt85i+i7INUCWVIPiWu\n3svzZ86snsi8zZsv1QUXnJf7IfnMOtl7fObHI/kjdUKY5pnpm3uPz/x41PyBBDB9c+/xmR+Pmj+Q\noFBmnUyTPH7mzOoJAAGinz8AoCUdXfA1s1dKukPSoKRpSe9397k6601LmpP0gqRj7n52J/sFAHSm\n05b/1ZIm3P0tku6X9OkG670gqejuZ5H4ASB5nSb/TZJui+7fJuniButZDPtCwBiSD8Sr04R8irsf\nliR3/4WkUxqs55LuM7MpM/tIh/tEYBiSD8Svac3fzO6TtKZ2karJ/LN1Vm/UTeccd3/KzAZU/RHY\n7+67Gu1zbGxs4X6xWFSxWGwWJnKqXC5rdHSLKpXJaGTmPo2OnqsLLjgvc9308tjFEMkolUoqlUod\nbaOjrp5mtl/VWv5hM3u1pEl3f2uT12yV9Ct3/3KD5+nqiQVTU1PasOEKzc3tWVjW3z+siYltGhkZ\nSTCy9szPWdTXVx1lmtc5i7Iq6z/MSXT1vEvS5dH9D0m6s05QJ5nZydH9l0t6t6RHO9wvApGHmT5r\nz17m5vaoUpnU6OgWrl+kRKhlxU6T/3WSNpjZY5LOl/QFSTKz15jZPdE6ayTtMrOHJD0g6W53v7fD\n/SIQeRiSH+LfKciKkH+YO+rn7+5PS7qgzvKnJL0vuv8zSWd2sh+ELeszfTKhWHqFPNMns3oiE7I8\n0+f82cvo6LnH/Z2CrL6fPAn5h5m5fYAeyfpFxbzKwx8QYmI3AFiGrP8wk/wBIEDM6gkAaAnJH5nF\nfD/A8pH8kUmhDswB4kLNH5lTLpc1OHiGKpVJzXfPKxTO1czMgdRcrMv6BURkCzV/BCHtI2Y5K0EW\n0PJH5qS55Z/m2JBftPwRhDTP95P2sxJgHi1/ZFYa6+q0/JGE5bT8mdsHmZXG+X6YxwdZQcsf6II0\nnpUgv5jeAQACxAVfBI9Rv0BrSP7IDfrXA62j7INcSLKXDfV9JI2yD4KVVP96zjaQVbT8kQtJtPzp\n04+0oOWPYCUx6pfRvMgyWv7IlV7W32n5Iy0Y4Yvg9XLUL6N5kWW0/JF73T4boLcPkkbNH1gk7t44\n9QaRDQwMaGRkhMSPTKHlj9yKuya/Y8cdGh3dor6+IR09Oq3x8Ru1efOlsccNtIuWP1Ajzt445XJZ\no6NbVKlMam5ujyqVSY2ObmEaCWQWyR+5NTRUbaFL+6Il+3Ts2IyGhoba3hbdOpE3HSV/M7vEzB41\ns+fNbHiJ9Taa2QEz+7GZfaqTfQKtWqrvf6sTwM2vd/LJJ8f2QwKkgrsv+ybpLZLeJOl+ScMN1lkh\n6SeSBiWtlLRX0hlLbNOBOM3Ozvru3bt9dnbW3d23b9/phcJqX7Vq2AuF1b59+866r1u83pVXftwL\nhdXe33/Wkq8Dei3Km23l71gu+JrZpKRPuvuDdZ5bJ2mru18YPb46CvS6BtvyOGIC6lnqIrCkhS6b\nkuqut2fPLh05coRunUiVtF7wPVXSoZrHj0fLgJ5rVLvftu2W47qEbtt2S931jhw5QrdO5ELTEb5m\ndp+kNbWLJLmkz7j73d0KDOiG4y8CV1v0R4/+TNde+yVVKpOqVKrLPv/59TJbcdx61PiRJ02Tv7tv\n6HAfT0g6vebxadGyhsbGxhbuF4tFFYvFDkMAqupNyXDNNVfpi1/8VpT4JWmt+vpep6uuukTXXsvU\nDUifUqmkUqnU0TbirPn/lbvvqfPcyyQ9Jul8SU9J2i1ps7vvb7Atav7outopGaT69f3F1wFI/Eir\nnk/sZmYXS/qapN+WdI+Z7XX3C83sNZJucff3ufvzZnalpHtVvcYw3ijxA72yeAK4pSZoI+kjj5je\nAYgwQRuyajktf5I/AGRcWrt6AgBShuQPAAEi+QNAgEj+ABAgkj8ABIjkDwABIvkDQIBI/gAQIJI/\nAASI5A8AASL5A0CASP4AECCSPwAEiOQPAAEi+QNAgEj+ABAgkj8ABIjkDwABIvkDQIBI/gAQIJI/\nAASI5A8AASL5A0CASP4AECCSPwAEiOQPAAEi+QNAgDpK/mZ2iZk9ambPm9nwEutNm9nDZvaQme3u\nZJ8AgM512vJ/RNIfS/qPJuu9IKno7me5+9kd7jO1SqVS0iF0hPiTRfzJynr87eoo+bv7Y+5+UJI1\nWdU63VcWZP3gIf5kEX+ysh5/u3qVkF3SfWY2ZWYf6dE+AQANnNBsBTO7T9Ka2kWqJvPPuPvdLe7n\nHHd/yswGVP0R2O/uu9oPFwAQB3P3zjdiNinpk+7+YAvrbpX0K3f/coPnOw8IAALj7s3K78dp2vJv\nQ90dm9lJkla4+xEze7mkd0v6m0YbafcNAADa12lXz4vN7JCkdZLuMbPvRctfY2b3RKutkbTLzB6S\n9ICku9393k72CwDoTCxlHwBAtqSu+6WZ/b2Z7TezvWb2LTPrTzqmVpjZRjM7YGY/NrNPJR1PO8zs\nNDO738x+aGaPmNnHk46pXWa2wsweNLO7ko6lXWa2ysy+ER33PzSzdyYdUzvM7NNR3PvM7F/MrC/p\nmJZiZuNmdtjM9tUse6WZ3Wtmj5nZv5vZqiRjXEqD+NvOm6lL/pLulfR2dz9T0kFJn044nqbMbIWk\nGyS9R9LbJW02szOSjaotv5H0l+7+dknvkvTnGYtfkj4h6UdJB7FM10v6V3d/q6R3SNqfcDwtM7NB\nSR+RdJa7r1X1OuJlyUbV1K2qfldrXS1pwt3fIul+pTvv1Iu/7byZuuTv7hPu/kL08AFJpyUZT4vO\nlnTQ3Wfc/ZiknZI2JRxTy9z9F+6+N7p/RNXkc2qyUbXOzE6T9F5J/5h0LO2KWmh/4O63SpK7/8bd\nf5lwWO34paSjkl5uZidIOknSk8mGtLSom/kzixZvknRbdP82SRf3NKg21It/OXkzdcl/kT+R9L2k\ng2jBqZIO1Tx+XBlKnrXMbEjSmZJ+kGwkbfkHSVepOv4ka14n6X/M7NaobHWzmRWSDqpV7v6MpC9J\n+rmkJyQ96+4TyUa1LKe4+2Gp2hiSdErC8XSipbyZSPI3s/ui+uD87ZHo3z+qWeczko65+/YkYgyR\nmZ0s6ZuSPhGdAaSemf2hpMPRmYup+VQjaXOCpGFJX3f3YUm/VrUEkQlm9npJfyFpUNLvSDrZzD6Q\nbFSxyGJDoq28GWc//5a5+4alnjezy1U9jT+vJwF17glJp9c8Pi1alhnRKfs3Jf2zu9+ZdDxtOEfS\nRWb2XkkFSb9lZre7+wcTjqtVj0s65O7/HT3+pqQsdRj4PUn/6e5PS5KZfVvS70vKWqPtsJmtcffD\nZvZqSbNJB9SudvNm6so+ZrZR1VP4i9z9uaTjadGUpDea2WDU0+EySVnrdfJPkn7k7tcnHUg73P0a\ndz/d3V+v6ud+f4YSv6JSwyEze3O06Hxl68L1Y5LWmdmJZmaqxp+FC9aLzxLvknR5dP9DktLeADou\n/uXkzdT18zezg5L6JP1vtOgBd9+SYEgtiT7861X9QR139y8kHFLLzOwcSd9XdYpuj27XuPu/JRpY\nm8xsvarTjFyUdCztMLN3qHqxeqWkn0r6sLvPJRtV68zsKlUT5/OSHpL0p1HHh1Qys+2SipJeJemw\npK2SviPpG5JeK2lG0vvd/dmkYlxKg/ivUZt5M3XJHwDQfakr+wAAuo/kDwABIvkDQIBI/gAQIJI/\nAASI5A8AASL5A0CASP4AEKD/B44PUVtNJLdjAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(x, np.sin(x))" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEACAYAAABbMHZzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4VUX+x/H3pJBQpEpHeglVBSlSQ+8J0kRQlBWxLFbE\nVVd/y666FlRUdFUsWKjSCTUIBFGQLr1Kb6HXkJAyvz8m7KIkJLk59865c+f1PHmEcHPOB7z55pw5\nM98RUkosy7KswBKkO4BlWZble7b4W5ZlBSBb/C3LsgKQLf6WZVkByBZ/y7KsAGSLv2VZVgBypPgL\nIb4SQsQLITbd5DUfCSF2CyF+E0Lc4cR5LcuyLM84deU/FuiY2R8KIToDVaSU1YBHgc8cOq9lWZbl\nAUeKv5TyZ+DsTV4SDXyX/tpVQCEhREknzm1ZlmXlnK/G/MsCh677/ZH0z1mWZVka2Ae+lmVZASjE\nR+c5Atx23e/LpX/uBkII22zIsiwrh6SUIievd/LKX6R/ZGQ2MBBACNEEOCeljM/sQFJK5L59yHfe\nQTZogCxRAjlsGPLqVfVnLvtYdXgVxd8pzsTNEzlx6QRpaWmZvjb+Ujyl3y3NeyveIzE58abH/cc/\n/qH97+aGD/vvkMG/xcWLyK5dkZGRyO++Q27ZgkxOvvFr0tKQCxYgmzdHVqmC/OILZFKS9r9HRh8n\nL5/k3in3Uu2javxy8JebvnZL/BZKdStF53GdOXLhiPbsuj884dRUzwnACqC6EOKgEGKQEOJRIcSQ\n9GI+D9gnhNgDfA48keVBK1aE4cNh7Vr45RfYuRPuvReSk52I7KgGpRuwavAq+tXpR/H8xREi8x/A\nJfKXYNEDi1i6fyk1Pq7BuE3jSJNpPkxr+b2jR6FlSyhVCmJj4YEHoHZtCMngRl4I6NgRli+Hr7+G\nH36AqlVh/Hjf576JadumUffTupQrWI6Nj22k6W1Nb/r62iVqM/jOwTQs05DXf3rdRynN4siwj5Sy\nfzZeM9TjE1StClOnQu/e0K8fTJoEoaEeH85pwUHBVCpSKduvr12iNjH3xfDTgZ8Yvmg407ZPY2qf\nqQQHBXsxpWWE+Hho0gQefxxefFEV9+xq2VL9sFi1Sn0v5ckDffp4L2s2/X3x35m2fRrT+k7Lsuhf\nLzgomBGtR3h85Rvo/OeBb1iY+gFw9ar6AeDCO4CcalmhJcsHLadY3mKcSjh1w59HRkb6PpQL2X+H\ndAsXEjlxIrzzDrz0Us4K//UaN4aYGPjrX+Hnn53N6IHB9Qez4dENOSr88L/3xc3utK3MCbf91BRC\nyJtmSkqCXr0gPBwmTvT5HcDkLZNpVbEVpQqU8ul5rQA3Zgz83/+pC6DmzZ05ZmwsDBwIy5ZBjRrO\nHNPSQgiB1PjA1zfCwmDaNEhMhP79fXoH8NOBn3hm4TOcTzzvs3NaFv/8J4wcqcbtnSr8AB06wJtv\nQufOajjJEMcuHuO5hc/ZZ2lZ8L/iD//7AZCQ4LMfABeSLvDgzAf5ovsX1LjVXiVZPrJkCXz5JaxY\nAdWqOX/8QYPU1X+3bnD5svPH1+DWfLey6sgqRv4yUncUV/PP4g9//AHwyCNeP90zC56hXaV2dKve\nzevnklKSlJLk9fNYLnfxIjz8sBryKV7ce+f5xz+gbl01my4lxXvnATYc28ALi17w6jlCg0OZ1GsS\no34dxc8H9T/TcCv/Lf6gxv2nTlW3wwsWeO00M3fMZNmBZbzf8X2vneN64zaNo9cPvUhNS/XJ+SyX\neuEFaN1aDct4kxDw+efqDnroUPDSc8BziefoPaU3DUo38Mrxr3dbodv4Ovpr+k/rn+FkCsvfiz9A\n3rzw8cdq5sKVK145RfyleL7r8R23hN3ileP/Wb86/biScoW//fg3n5zPcqHFi2HOHHjfNxcchIbC\nlCnw66/w0UeOH15KyaBZg+hStQv31rnX8eNnpEu1LvSv258HZjxgx/8z4H+zfTLTpw9ERMBrrzkf\nSoMzV87Q5MsmvNb6NZ99s1gucfGiGob59FPvX/X/2Z49ah3Bli1qEZlD3l/5PpO2TGL5oOWEhYQ5\ndtysJKcmM3vnbHrW7Gn0lFBPZvuYU/yPHIHbb1fzliMinA+mwS8Hf+G+afexc+hO8obm1R3H8pXH\nHlNDMF99pef8w4fD2bPqQbMDfj38K9GTolk9eDUVCldw5JjWHwV28Qf44AOYPVvdMhvyU77XD72I\nrBDJk42f1B3F8oUff4S//AU2b4ZChfRkOH9ezfufPx/uvDPXh7uYdJEdp3bQsGxDB8JZGbHFPyUF\nGjaE55+HAQOcDabJqYRTFAwrSJ7gPLqjWN524QLUq6cevnbMdGM83xgzRvX/iYsz5kLKZLb4g+pb\n0qMHbNsGRYp4dIhPVn9CreK1aF2ptec5LCunHn0UUlMdG27JldRUqF9frSru1Ut3GisLgbHCNyuN\nG6vi//e/e/TlpxJO8erSV6lYuKKzuSzrZn78UQ2zvPee7iRKcDCMGqXG/xMTdadxzOK9i3nxxxd1\nx3AF84o/wL//DTNmwOrVOf7S91a8R9/afXPUpdOyciUtDZ59Vk1Z1jXOn5E2bdQw1Acf6E7imNtL\n3c4X679g79m9uqNoZ2bxL1JE9UJ57LEcrVg8nXCaz9d9zovN7ZWB5UMxMaq9cvfuupPc6N131cfx\n4zn6slErR7EpfpOXQnnu1ny3MrThUP657J+6o2hnZvEH9cC3cGH47LNsf8moX0fRq2Yv1w75HDh3\ngHsm32MXrJhESnj9dTVM6cYHq1Wrqv4/r7yS7S85cO4Ary9/3bWdb5+7+znm757P9pPbdUfRytzi\nL4QaP337bbUHQBaklKw6soqXW7zsg3CeKV+oPEcvHmXi5om6o1hOiY1V/al69NCdJHOvvKJWG2/Y\nkK2Xj1g2gifueoIS+Ut4OZhnCoUX4vmmz/N/cf+nO4pW5hZ/UHOUIyLUzl9ZEEKw6IFFrh7rF0Lw\nbvt3eXnJy1xJ9k4rC8vH3nhDXfUHufhbsVAh+Ne/4Jlnsuz7s/3kdubumsuwpsN8FM4zQxsNJSw4\njKupWV8YmsrF7ziHDB+uxv9dNqXVUy0qtKBB6QZ8tMr5/iuWj/30k9qPt29f3Umy9vDDcO4czJp1\n05e9uvRVnm/6PIXDC/somGfyheZjXM9xAb1+xvzi3769mrbmxa6fvvZWu7cYuWIkJy+f1B3Fyo3X\nX1fbMWa08brbBAfDq6+qh7+ZOJ94niMXjzC0kefbdVu+Y94ir4yMH68Wzixd6uxxNXpvxXt0rNqR\nOiXq6I5ieWL1arWJ+p49aqaPP0hJgSpV1D4ad92lO411HbvCNzPJyWrWwtSpqv3DddJkGkHC/Bsg\ny2Wio9Vd6VA/u0p+913YuBG+/153Eus6doVvZkJD1SKakX/c1u1C0gVqfVKLC0kXNAWzAtLGjerK\n/+GHdSfJuYcfhrlz1bMKgxy9eBS3XQh7W2AUf4DBg9Wwz++///dTH6/+mLvK3EXBsIIag1kB59//\nhmHD1EZE/qZIEbVv9qef6k7iqG4TuvHTgZ90x/CpwBj2uebvf1czFj75hItJF6nyURWWPbSMmsVr\neud8lvVnO3dCixawdy8UKKA7jWd27YLmzeHAAcibFyml32+UMnrVaH459AuTemc9LdyN7LBPVp58\nEiZOhJMn+XTtp7St3NaIwp+cmqw7gpVdb76p3of+WvgBqleHRo1gwgQuJF2g/pj6JKUk6U6VKwNv\nH8jC3xdy/FLO2lj4s8Aq/qVKQe/eyI8/5j9r/sOwu929ECU7rqZepdroasRfitcdxcrKvn2qj8+T\nBmzM88wz8MEHfP/bd1QrWs2nWzN6Q6HwQvSu2Zuv1mvaPU2DwCr+AMOGIf/zH+6t1J27yvj/dLU8\nwXnoWKUjY9aN0R3Fysro0erZU2F3L4DKlrZtkVKybvxInmj4hO40jni84eOMWT+G1LRU3VF8IvCK\nf40aBDVvztuHzdjnF9RS9U/XfhrQS9VdLylJTY8cMkR3EmcIwa4BnXlg6RlaVWilO40j6peuz2MN\nHuPS1Uu6o/hE4BV/UC0f3n8/R+2e3axuybpE3BrBtG3TdEexMjNzJtx+u1okZYjXyu+l8REQe/bo\njuKYl1q8RKFwF+2p4EWBWfybNoXSpdU3pCGeavwUH622/X5c68sv1ZCPIVLTUjkpLxH0yKPwkX3f\n+aPAmup5vQkT4LvvjOn5k5qWyhNzn2BUp1HkC82nO451vX371OyYQ4cgPFx3GmcdOQJ16qi/ownP\nMvyUbe+QhT/MR05IgHLlYNMm9V/L8pZXXoFLl4zaDvEPBgxQm70P8//Zc/7KzvPPwsCZA4n9PVb9\nJl8+6NNHXf1blrekpMDYsUYN+dzg6afVTCZDnqFdY/qeGQFT/OMvxROzM4bGZRv/75ODBsE33xjT\n699yoQULoHx5NTRiqkaN1DO0+fN1J3HMsv3LaP99e90xvCpgiv+3G7+lZ82ef3yS37ix6lO+YoW+\nYJbZDHvQm6lBg4y6i25WvhkHzh9w5Sb0TgmI4p8m0/hi/RcMafCnOdZCqDft2LF6gnmR257lBKRj\nx2DZMrj3Xt1JHPPPuH8yd9fcG/+gTx+1H/HZs74P5QUhQSE8Uv8RPl1jVgO76wVE8Y/bH0fekLx/\nHPK55v771eYUly/7PpiXLNizgIEzB+qOYX3zjdqwxZ/7+FwnITmB0atHU7tE7Rv/sEgR6NABpkzx\nfTAvGVx/MJO2TjK25XtAFP89Z/bwVOOnMu48WKaMmvc/zZwFUo3LNiZmZwznE8/rjhK40tLgq6+M\nGvKZtGUSd992NxULV8z4BQMHGjX0U+aWMrSr3I5xm8bpjuIVAVH8hzQYwuD6N/kmNGzop0jeIrSp\n1Iap26bqjhK4li1TM8oaNdKdxDFfb/iaIfVv0p6iUyfV7vm6PTP83TONnyFYBOuO4RUBUfyz1L07\nbN6sFqoY4oF6D/D9JrvVnjbXHvT6eZ/7a/af28/O0zvpVLVT5i8KDYX77jNqi8dm5Zvx6F2P6o7h\nFbb4A4SFqTftt9/qTuKYLtW6sPnEZg6eP6g7SuA5c0ZtdXj//bqTOGbloZXcW/teQoNDb/7CgQNV\n8bcTDlzPFv9rrs35T0vTncQRYSFhDL5zMJvjN+uOEnjGjYMuXaBoUd1JHHNf3fsY3Xl01i+sX19d\nTNnp064XUO0dbkpKuOMOGDUK2rTx/fktM0gJ9erBhx8G7vvorbfUEOrnn+tOEjBse4frXE29Sp8p\nfbK/xaHBc/4tH1q7VvWNiozUnUSfAQNg6lRITNSdxLoJY4t/7O+xHL90POsxyusNGKC22Ttvp0ha\nHpowQY31Bxn7rZW1226DO+9U30uGSEhOoNU3rYzaMMnYd+ikLZPoV7tfzr6oeHFo3dqohSqWD6Wl\nqfeOQSt6PWbYnP98oflISUth0e+LdEdxjCPFXwjRSQixQwixSwjxtwz+vJUQ4pwQYn36xytOnDcz\nCckJzNk1h961euf8i+3Qj+WpX35RD3lr1dKdxDHfbfyO3894MG+/Z09YvhxOnHA+lCb96/RnwpYJ\numM4JtfFXwgRBHwMdARqA/cJITLaIPcnKWX99I/Xc3vem5m3ex6NyjaiZIGSOf/izp3VIpVdu5wP\npsn2k9t5++e3dccw36RJRl31X029yrDYYYQEheT8iwsUUOtnJk1yPpgmfWr3Ye6uuVy+akYrGCeu\n/BsBu6WUB6SUycAkIDqD1/lstcvsnbPpVyeHQz7XhIZC374webKzoTS6Nd+tvPnzmwGzMbUWKSnq\nIadBxT/291gibo2gQuEKnh3AsKGfEvlLcPdtdzN752zdURzhRPEvCxy67veH0z/3Z3cLIX4TQswV\nQnj1vvirqK8YUHeA5wfo0wd++MG5QJoVz1+cFhVaMH37dN1RzLVsmXrQWbWq7iSOGb95PP3r9Pf8\nAG3aqM6mW7c6F0qz/nX6s/zgct0xHOHB/ZxH1gHlpZQJQojOwEygemYvHjFixH9/HRkZSWQOp83l\naIZPRpo1U6s0d+yAiIxGsPzPA/Ue4Mv1XzLwdtvt0ysmTzbqqv/S1UvM3z0/ewu7MhMcrGY+ff+9\nmvtvgAH1BnB/Pf0rt+Pi4oiLi8vVMXK9yEsI0QQYIaXslP77FwEppcx0kFkIsQ9oIKU8k8Gf6Vnk\n9WdPPaVm/7z6qu4kjriSfIWy75dlyxNbKHNLGd1xzJKcrHayWrcOKng4ROIy4zaNY9KWSczpPyd3\nB9qyRTV8O3BA/TCwvELXIq81QFUhRAUhRB6gH/CHQTEhRMnrft0I9UPnhsLvKoYN/eQNzcs9Efcw\nZaudxuq4H3+E6tWNKfwA3ap348NOH+b+QHXqQLFitt2DC+V62EdKmSqEGArEon6YfCWl3C6EeFT9\nsRwD9BZCPA4kA1cA998fGzj0M7LDSAqGFdQdwzyGDfkAFA4vTOHwws4crHdvtV9GixbOHM9yhFG9\nfWbtmEWHKh3IG5rXmTCGDf1YXpCUpIZ8tmxRGwNZN9q2DTp2VEM/gbzy2YsCurfPsYvHeGjWQxnv\n1uWpvn2NGvqxvGDBAtXIzRb+zNWqBbfcAqtX607imITkBD5a9ZHuGLliTPGfsm0KUTWiCA8Jd+6g\nTZv+b+jHsjJi4JCPV1wb+jFEWHAY7/zyDttObtMdxWPGFH+PevlkJSgIevWyvX6sjCUkwLx56j1i\niL1n95KY4oVunL16qUVwLhtm9lRwUDD96vRj/KbxuqN4zIjiv//cfnaf2U27yu2cP7iBQz+nEk6x\nKX6T7hj+b948aNgQSpTQncQx/ab2Y8UhL8zMqVcPQkJg/Xrnj61Jvzr9mLJtCm57bppdRhT/yVsm\n06tmr9wv7sqIgUM/q4+s5om5T+iO4f8mTYJ+Dt9tanTw/EH2nt1LywotnT+4EMYN/TQo3YCk1CS/\nHfoxovi3rtSapxo/5Z2DGzj007ZSW7ae3Mqxi8d0R/FfFy/CokVwzz26kzhm5o6ZRNWI8qyRW3Zc\n+z7y0yvlPxNCcE/EPX7bNsWI4t+obCNqFfdiuyDDhn7CQsLoWq0rM3bM0B3Ff8XEQPPmRu3TO337\ndO6J8OIPswYN1GrozebsK/1Mk2e4r+59umN4xIji73UGDv30rtWbadvNuQX3ucmTjRryOXH5BL8d\n/432Vdp77yQGDv1ULFyRqkX9s5mfLf7ZERSk3rQGDf10rNKRdUfXcfLySd1R/M/58xAXB9EZdS73\nT+cTz/Nqy1ednSqdkd691awfSztb/LPLwF4/73V4z6g9SX1m7lxo1QoKmtMqo1qxagxrOsz7J2rU\nSP3w3OafD0lN4tfFPyUtxXcnM3Do5+H6D1O2YEZbL1g3NXMm9OihO4V/ujaBwqChH3/l18W/y/gu\nxO2P883JDBz6sTyQmAixsWqLQsszho37A0gpOZd4TneMHPHb4n/myhlWHVlFo7KNfHdSw4Z+LA8s\nWaIWLBUvrjuJ/2raFI4fh927dSdxTMyuGO6d6l9tPvy2+M/ZNYc2ldqQLzSf707atCmcPm3U5u5W\nDs2YYdTcfi2Cg6FnT6Ou/ttUasPKQyv96urfb4v/jB0z6FHDx+OuQUFqhsesWb49r+UOqakwe7ZR\ns3zm757PGz+94fsTGzb0UyBPAVpXas2cXbnc+cyH/LL4JyQnsHjvYrpV7+b7k0dHqwd+BhkeO5yp\n2+z0uyz9+iuUKgWVK+tO4phJWydRKLyQ70/csqXq779/v+/P7SU9I3r61Wpfvyz+e87soXuN7hTL\nV8z3J2/dGrZuhfh435/bS6oXq86UbfZBdpYMm+WTnJrMnF1z6BGh4e8UEqIupAy6+u9eozuL9y0m\nITlBd5Rs8cviX69kPcb31NRKNSxM7Uo0x39u77LSI6IHC/cs5EryFd1R3EtK48b74/bHUa1oNcoV\nLKcngGELvormLcrAegM5fOGw7ijZ4pfFXzvDhn6K5y/OnaXvZOHvC3VHca+tWyElBW6/XXcSx0zf\nPp2eNXvqC9C6tVo3c/y4vgwOG91lNNWLVdcdI1ts8fdEly6wbBlcvqw7iWN61exle/3czLUhHye3\nCdVISkns3ljvNnLLSp480KmTapJn+Zwt/p4oXFgtU4+N1Z3EMT0ierApfpPfbkzhdYaN9wsh2Pz4\nZqoVq6Y3SFSUmkFl+Zxw2ze7EEK6LVOGPv4Y1qyBb7/VncQxUkqEIVe2jjp4ULUjPnZMPai0nHPu\nHJQvr/5t8+fXncZvCSGQUubom9evrvy3ndzGuE3jdMdQoqJUg68UH/YX8jJb+DMxaxZ062YLvzdc\nu4tetEh3koDjV8V/wuYJbI53yUYQ5curj19+0Z3E8jbDhnxcx8CFkx/++iFrj67VHeOm/Kr4z9gx\ng3tqumiqXY8eRs36sTJw5gysXQvtvbjJSaCLilJTp1NTdSdxzNnEs0zcPFF3jJvym+K/6/Quzl45\n69tGblm5dsXiD88oLM/MmQNt2kA+H/aQ8rIFexaQnJqsO8b/VKgAZcvCypW6kzgmqkYUs3bOcvUE\nCr8p/jN3zCS6RjRBwkWR69WDtDTYskV3EsdcvnqZ8Zs0LaBzo5kzjVrYdfjCYQZMH+C+5ztRUUYN\n/dxZ6k4SUxLZccq9+3+4qJLenOuGfEDN+e7Rw6g3bWhwKEPnDyX+kjntKzyWkACLF0PXrrqTOCZm\nZwxdqnUhJMhlD6+jo42a8imEIKpGFDG73LuGwW+K/6iOo4isGKk7xo0MW+2bJzgPHap08KvuhF7z\n449qimcxDT2kvCRmVwzdq7twI5r69dWiSYN2youqEcXsne79geY3xb9JuSbkCc6jO8aNWrSAffvg\nsH/088iOqOpRzN7l3jetz8yYYdQsn0tXL7H84HI6VumoO8qNhDBuwVfriq2Z0GuC7hiZ8pvi71oh\nIardg0Fv2s7VOrN031K/6U7oFamp6mGvQb37Y3+P5e5yd+tp4Zwdho37h4WEUb5Qed0xMmWLvxMM\nm/JZNG9R7ipzFz/u/VF3FH1WrlQzUCpU0J3EMeUKlmN40+G6Y2TuWrv0Eyd0JwkItr2DEy5dgjJl\n4NAhKOTSq6oc+vngz5TIX8JvOhQ67m9/U+27//Uv3UkCS9++qtnbX/6iO4lfMbK9w/nE87ojZK1A\nATX2P3++7iSOaV6+eeAWflDDeN1d+GDUdIaN+7uZq4t/mkyj5ic1OXDugO4oWTNs6Ceg7dmjGo41\naKA7SeDp0gWWLFHTbA2RmpbK/nP7dce4gauL/7qj6ygUXogKhf1g3LV7d1i4EK5e1Z3Eyq2YGNXI\nLcjV3x5mKlpU/dBdvFh3EsfsPrObFmNbuG61r6vf3bN3ziaqepTuGNlTqhRUrw7Ll+tOYuVWTIwd\n8tHJsEZvNYrVIDwknN+O/6Y7yh+4uvjH7Iqhew0/+ibs3t3IXYnSZJruCL5z9qxq5Naune4kjvlk\n9SeMXjVad4zsu9boLc2M950QQq2dcdmCL9cW/4PnD3Lk4hHuLne37ijZd634u+z2LjdGxI3gw18/\n1B3DdxYsgFatjGrkNmXbFCoVqaQ7RvZVrgzFi8OqVbqTOMaNrR5cW/wPXzjMkPpDCA4K1h0l++rV\ng+Rk2L5ddxLHNCjdgFk7zbkFz5JhQz6nE06z/th62lZqqztKzhg266dZ+WbsO7ePwxfc0wnAtcW/\n6W1NeaPtG7pj5IwQxg39tKvcjvXH1nM64bTuKN6XnKyu/Lt1053EMfP3zKdNpTbkDc2rO0rOGFb8\nQ4JCGN50OGeunNEd5b9cW/z9lmHFP29oXtpUasP8PeasYcjUL79AlSpqwZ4hXNvILSsNG8Lp07B3\nr+4kjnmx+YvUK1lPd4z/ssXfaZGRsHkznDqlO4lj3N6d0DGGLexKk2msOryKbtX98E4mKEi10jbo\nQsptbPF3Wng4tG0L8+bpTuKYrtW6sv/cftfNU3aUlMaN9weJIPY8tYeSBUrqjuIZw+6i3cb29vGG\nsWNV8Z8yRXcSK7t27FD79B48qJ7dWPpdvgylSxvVM8tbjOnt89X6r3RHyJ2uXWHRIrva159cW9Vr\nC7975M8PzZurlfOW41xZ/Ped26c7Qu6UKAE1a8KyZbqTWNk1e7aaYWK5i4FDP28uf5O1R9fqjuFM\n8RdCdBJC7BBC7BJC/C2T13wkhNgthPhNCHHHzY7nl7MT/szAN62xTp+GTZtUP3nLXbp1U91yU1J0\nJ3HMpauXmLZtmu4YuS/+Qogg4GOgI1AbuE8IEfGn13QGqkgpqwGPAp/d7JgNyzbMbSz9DFzta6x5\n86BNG/Ww3hCzdswiMSVRd4zcu+029bFype4kjuleo7srVvs6ceXfCNgtpTwgpUwGJgF/3vsuGvgO\nQEq5CigkhMh0CkKQcOVoVM7UqaMK/9atupM45kLSBb7e8LXuGM4zbJZP/KV4Hpr1kBnfR2DcXXSj\nso04mXCSfWf1Dm878e4oCxy67veH0z93s9ccyeA1ZjFwtW+e4Dw8u/BZTl4+qTuKc65ehdhY9ZDe\nEHN3z6V95fbkCc6jO4ozDPs+ChJBdK3WVfvVf4jWs2dixIgR//11ZGQkkZGR2rLkSvfuMGIEvPSS\n7iSOCA8Jp22ltszbPY8H73hQdxxnLFumHs6X9NO58BmYvXM2vWr20h3DOQ0aqM119uyBqlV1p3FE\nVI0oPlnzCU81fsqjr4+LiyMuLi5XGXI9z18I0QQYIaXslP77FwEppXz7utd8BiyVUk5O//0OoJWU\nMj6D4/n/PP9rkpJUUdm1S80AMsDYDWOZu3suU/tO1R3FGU89pfZiePll3UkckZiSSImRJdj39D6K\n5SumO45zBg+G2rXh2Wd1J3FEYkoiF5MuUjx/cUeOp2ue/xqgqhCighAiD9AP+HMvgNnAwPSQTYBz\nGRV+44SFqb7wJq32rd6VH/f+SFJKku4ouWfgqt4l+5ZwR6k7zCr8YNzQT3hIuGOF31O5Lv5SylRg\nKBALbAUmSSm3CyEeFUIMSX/NPGCfEGIP8DnwRG7P6zcMe9OWyF+CmsVrsuyAAWsYtmxR/61TR28O\nB91W8Da/iWD6AAAcI0lEQVRebfmq7hjOa9dObbJz7pzuJMaw7R287eRJNU554oS6EzDALwd/oVzB\ncv6xt/LN/PvfcPw4fPSR7iRWdnTtCgMHwr336k7iOsa0dzBK8eLqyjKXD2fcpFn5Zv5f+MGu6vU3\nht1F62aLvy/YN637HD8OO3dCy5a6k1jZZeBq36upV9lzZo+Wc9vi7wtRUXa1r9vMnQsdOkAeQ+bC\nB4Jy5aBCBVixQncSx2w8vpHuE/VMOLDF3xdq1oTQUNU/xnIHw2b5BAzD7qIblGnAucRz7D692+fn\ntsXfF66t9jVoT1IAKSWpaam6Y+TclSuwZAl06aI7iWO++e0b/rXsX7pjeJ9hxT9IBNGtWjctq31t\n8fcVwzakBhg6byjfb/ped4ycW7IE7rwTihbVncQxM3bMoEqRKrpjeF/9+nDhAuz2/ZWyt+hq9GaL\nv680bw6//w5HjuhO4phGZRtp70/iEcP26r2SfIWl+5bSuVpn3VG8LyhIPfg16Oq/XeV2rDu6jrNX\nzvr0vLb4+0poKHTuDHPm6E7imC7Vuvjfat+0NPX/wKApnov3LaZ+6foUzWvOncxNGXYXnS80Hy80\ne4EzV8749Ly2+PuSYW/a4vmLU6dEHeL2x+mOkn3r10OBAlC9uu4kjonZGWPGBkjZ1bYtbNigNuEx\nxCstX6FKUd8O29ni70udOsHy5XDpku4kjulevTuzd/rRD7SYGKOu+gHWHF1D9xoBVPzz5lWb7xjU\nM0sHW/x9qVAhaNxYbe5uiOga0Rw4f0B3jOwzbLwfYO2QtVQvZs6dTLZERcGsWbpT+DXb28fXRo9W\nQw9jx+pOEngOHVKzfI4fhxBXbmVhZdfJk1Ctmvp/adD2m56yvX38Qffu6oFjqh/Oj/d3MTHqobst\n/P6veHGoWxeWLtWdxG/Z4u9rFStCmTLw66+6kwQeA8f7A5qBQz/Pxz7PrtO7fHIuW/x1MGzWj1+4\neBF+/hk6dtSdxHJKdLT6gZ6WpjuJYxKSE5ixfYZPzmWLvw62+PveokVw991QsKDuJI6Zvn06l66a\nM3Msx6pXV/8/163TncQxPSJ6MHPnTJ+cyxZ/HRo0gPPn1d6+hjhz5Qyfr/1cd4zMGTbL5+yVszw0\n8yEEOXrGZx7Dhn4iK0ay49QOjl085vVz2eKvQ1CQcQ2qwkPCGb5ouM9XKWZLaqpq4WxQ8Z+3ex6R\nFSPJnye/7ih6RUcbdRedJzgPnap28knbFFv8dTFs6CdfaD5aV2rNvN0uXHjz669QurR62G6IWTtn\nEV0jWncM/Ro3hvh42LdPdxLH9KjRwycLJ23x16VNG+OWqEfXiGbWThfeghvWuz8pJYnY32MDa1Vv\nZoKDVaM3g4Z+oiOimdBrgtfPY4u/Lnnzqh4lBi1R71a9G4t+X+SuRm9SwowZ0KOH7iSOWbJvCXVL\n1qVE/hK6o7iDYUM/4SHhFAzz/sQEW/x1Mmzop0T+EtQpUYel+1208Gb7dkhIgLvu0p3EMZWLVOa1\n1q/pjuEe7drB2rVwxoXPm1zMtnfQ6cQJNV0tPh7CwnSnccTao2spc0sZytxSRncU5Y03VAuA0aN1\nJ7G8KToa+vaFAQN0J9HCtnfwNyVKQO3aEBenO4lj7ipzl3sKP6ghn3vu0Z3C8rboaKPG/X3BFn/d\noqJgpm8WdQScgwdh/35o2VJ3EsvbunaF2FhIctHzply6knyFjcc3eu34tvjrds89qvgbtETdNWbM\nULN8bCM385Usadxd9IHzB+g6oSveGga3xV+36tWhWDFYuVJ3EvMYNuQTMM/CPGXYat+IWyMokKcA\n6455p32FLf5u0KsXTJ+uO4Wj0mSa3imfJ0+qdRTt2+vL4LCRK0by5vI3dcdwr2tTPg36Idkjogcz\nd3hnWNgWfzfo2VMVf4PetMMWDuM/a/6jL0BMjCr8efPqy+CwGTtm0KBMA90x3CsiAvLnV5slGcIW\nf9PVq6dWKm7YoDuJY9pUaqN3te+MGeqHqiGOXTzGjlM7iKwYqTuKu/XoYdRddKOyjTh95TS7T+92\n/Ni2+LuBEP+7+jdEu8rt2HB8A6cTNLSvuHgRli1TM0AMEbMrhs5VO5MnOI/uKO7WqxdMnWrMXXSQ\nCOK11q+Rkpbi/LEdP6LlmV69YNo03Skckzc0L+0qt/NJg6obzJ8PTZtCoUK+P7eXzNwxkx4R5rSo\n8JqGDeHKFdi6VXcSxwyuP5iaxWs6flxb/N2iYUN1xbp9u+4kjuldszdTt0/1/YkNm+WTmpbKkYtH\n6FS1k+4o7icE9O6trv6tm7LF3y2CgtTQj0FX/92qdyMlLYU06cM1DElJsGCBmvlhiOCgYDY+ttEn\nzb6MYIt/ttji7yaGjfvfEnYLC+9fSJDw4dtsyRKoVQtKlfLdOS13adIEzp416i7aG2zxd5MWLeDw\nYdi7V3cS/2XYLB/LA0FBxj1D8wZb/N0kOFgNV8yYoTuJf0pNVSs8DRrvtzxk4NDPm8vfZNo2536g\n2eLvNgau9vWZlSvVcE/lyrqTWLo1a6Zaee92fn68LqVvKc33m7537Hi2+LtNmzZqrPLoUd1J/M/0\n6UZd9V9JvsK7K961PX08ERxs3ASKHhE9WLJvCReSLjhyPFv83SZPHrU4ybA2z8/HPu/YmzZD17Zr\nNKj4L9izgPl75iNEjvbosK7p3duo4l84vDCtKrZybO2MLf5uZNgVC8COUzuYs2uO906wcaOa412v\nnvfO4WM/bPuBvrX66o7hv1q2hAMH1J4Ohri39r1M3jrZkWPZ4u9GHTuqPUlPndKdxDF9avVhyrYp\n3jvBtGnqh6YhV8kJyQnM3z2fnjXtzCWPhYSoXj8GXUhF1Yhi/bH1JKYk5vpYtvi7Ub58qiOlQZu7\nR9WIYvHexVxMuuj8waWEiROhXz/nj63J/N3zaVS2EcXzF9cdxb8ZNuunYFhBDjxzgPCQ8FwfyxZ/\ntzJs1k+RvEVoXr45c3fPdf7ga9eqK/4G5rQ7/mHbD/StbYd8cq11azXj59Ah3UkcExLkzM50tvi7\nVdeu8NNPcMGLD0l9rHet3t4Z+pkwAfr3N2bIB+Dl5i/Tu1Zv3TH8X2io2srToAsppwi3TSMTQki3\nZdKmWzdV1Pr3153EEZeuXuLS1UuUKuBg64XUVLjtNtXWISLCueNa5pg7F956C5Yv153Ea4QQSClz\ndPVjr/zdrF8/dVVriAJ5Cjhb+EHdHZUsaQu/lbl27WDLFrt25k9yVfyFEEWEELFCiJ1CiIVCiAwb\nqAsh9gshNgohNgghVufmnAGlRw/4+We1H62VsYkT4b77dKew3CwsTN1FG9Y2ZcrWKbnaLCm3V/4v\nAj9KKWsAS4CXMnldGhAppbxTStkol+cMHAUKqLH/H37QncSdrl5VY7kGzfKxvMSwWT8A07ZPY9p2\nz6ex5rb4RwPfpv/6WyCzrYaEA+cKTAMGwPjxulO4U2ysGu4pX153Esccu3hMdwQzdeig9siOj9ed\nxDF9a/flh62eXxjmtiCXkFLGA0gpjwMlMnmdBBYJIdYIIR7J5TkDS/v28Pvv6sMQKWkpbDmxJfcH\nMmzI50LSBSI+ifBuG4xAlTevmvVj0F1056qdWXt0LfGXPPuBluWEUSHEIqDk9Z9CFfNXMnh5ZtN0\nmkkpjwkhiqN+CGyXUv6c2TlHjBjx319HRkYSGRmZVUxzhYZC377qwe+rr+pO44izV87S7OtmHH3u\nKPnz5PfsIAkJahbHqFHOhtMoZmcMLSu0tDt2ecvAgfDSS/Dkk7qT5FpcXBxxcXHctv02/vLsXzw6\nRq6megohtqPG8uOFEKWApVLKm+40LIT4B3BRSvl+Jn9up3r+2apV6o27Y4cxc9k7j+/MgLoDuL/e\n/Z4dYPJkGDtWbdloiOhJ0fSu2ZsHbn9AdxQzpaaqIcLYWKhdW3caR8zaMYtRv45i2aBlPp/qORt4\nKP3XDwKz/vwCIUQ+IUSB9F/nBzoADtzzB5BGjdQbd9063Ukc89DtD/Htxm+zfmFmDBvyOZ94nrj9\ncUTViNIdxVzBwXD//fC9cz3xdetYtSPDmw736GtzW/zfBtoLIXYCbYG3AIQQpYUQ11o4lgR+FkJs\nAH4FYqSUsbk8b2ARQr1px43TncQx0RHRrD+2nkPnPVh2f+4cLF1qVPvmWTtnEVkxkkLhGc6Wtpzy\nwAPq+yg1VXcSR4SHhNO1elePvjZXxV9KeUZK2U5KWUNK2UFKeS7988eklN3Sf71PSnlH+jTPulLK\nt3JzzoA1YABMmgQpKbqTOCI8JJw+tfp4tjPR9Olq4U5Bc8bGQ4NCGVJ/iO4Y5qtTRy0KXLJEdxLt\n7PRLf1GtGlSoAIsX607imCcaPkHNW2/6iChjhg35ANxX9z6Pr+CsHBo4EL77TncK7WxvH3/y0Ueq\ng2Ugv3GPH4eaNdVS/bx5daex/NGJE1C9uur0ecstutM4wvb2Md2990JMDFy+rDuJPj/8oOZr28Jv\neapECbXLV4B3+rTF35+ULAlNmhi1yUuOGTjkY2lgh35s8fc7998fuO0e9u2DPXvUw17Lyo1u3eC3\n3+DgQd1JtLHF399ERxvZ6TMlLRuzmMaOVVf9oaHeD+QD5xPP0/jLxtn7u1vOCg+HPn2Mmj6dU7b4\n+5sCBdRVi0E9StJkGhEfR3D04k36rScnw5dfwqOP+i6Yl03cMpHyhco7ti2flUMPPqiGfgJ0gokt\n/v5owACjrliCRBCRFSMZt+kmf6c5c6BKFWOW5QN8veFrHr7zYd0xAleTJmqx15o1upNoYYu/P2rf\nHvbuVePfhnjw9gf5duO3ZDrN97PP4LHHfBvKizbHb+boxaO0r9xed5TAJURAP/i1xd8fhYSoW9bP\nP9edxDHNyzcnMSWRtUfX3viHe/fC+vXQq5fvg3nJ2N/G8tAdDxEcFKw7SmC7/361cj4pSXcSn7PF\n3189/rh6AJqQoDuJI4QQmTd7GzNGXaGFh/s+mJdsPbmVh+54SHcMq1IlNZQ4b57uJD5ni7+/qlQJ\n7r5bzXs3xMDbB964kcnVq+qH3BCz+t4svH8hVYtW1R3Dgv89+A0wtr2DP1u4EF58UQ2JGNLn/waT\nJ6vhLduIy/KWCxdUn/8dO6BUKd1pPGLbOwSa9u1Vq4eVK3Un8Z7PPzfqQa/lQgULqtYpn32mO4lP\n2St/f/fhh2qnrwkTdCdx3s6d0KqVWoWZJ4/uNJbJtm+H1q1h/36/fLZkr/wD0YMPwvz5cOyY7iTO\nGzMGBg2yhd/yvpo14c47zbyIyoQt/v6ucGF1y/rFF7qTOCsxUT2Ee+QR3Ukcs+rwKkavGq07hpWZ\nZ5+FDz4ImBW/tvib4K9/VWPjycm6kzhm6ci/sr/KrVC5su4ojhm5YiSSwCgsfql9e7XiN0AmF9ji\nb4K6ddVOXzNm6E7imIZzNvB6zRNcTb2qO4ojdp7ayU8HfrLtHNxMCHjmGRg1SncSn7DF3xRDh8LH\nH+tO4YytWylwOJ6DLerxw1YzGtiNXDGSoY2Gkj9Pft1RrJu5/35YvRp27dKdxOts8TdFdLRqg7Bp\nk+4kuff55/DwwzzTYjjvrXwv834/fuLIhSNM3z6dvzb8q+4oVlby5lWdYz/8UHcSr7PF3xShoepN\n+8knupPkzuXLarOawYPpVLUTSSlJLN2/VHeqXJm/Zz6D7hhEsXzFdEexsuOJJ9SsnzNndCfxKjvP\n3yTXNjffuxeKFNGdxjPvvAPr1qmVvcB3G7/jQtIFhjYaqjlY7qTJNIKEvdbyGwMHQp068MILupNk\niyfz/G3xN82AAXDXXWramr+5eBGqVoWlS6FWLd1prEC2YQNERakLKT/YOc4u8rLUg99PPoG0NN1J\ncm70aLU/ry38lm533qk2D5o+XXcSr7HF3zRNmkDx4v63UvH8eTXF7v/+T3cSy1IMn/Zpi79phIC3\n3oJXXvGvDSo+/BC6dIEaNXQnsSyle3c4edLYxom2+JuoVSv1sOrTT3UnyZ6zZ+Gjj+DVV7N8qb88\nD5q0ZRKjVpp71RgQgoPh6aeNvfq3xd9Ub76pPs6f150ka6NGqXUKVW++ucm/lv2LL9a7v4dRmkzj\n9Z9ep3YJczabD1iDBsHy5WoGmmFs8TdV3bpqGGXkSN1Jbu70afWA+pVXsnxpm0pteGP5GyQku3vr\nynm755EnOI/dnN0Et9wCr72m7gD85K4zu2zxN9k//6mGftzc7vm996B3b7UtZRaal29Ok3JNeOvn\nt3wQzHNv/fwWLzZ/EWHq7mqBZtAgtVd2+toTU9h5/qYbPlzNn3fjLkUnT0JEhJpTXb58tr7k8IXD\n3PHZHawavIoqRat4OWDOLd67mEfnPMrOoTsJDgrWHcdyyvLlag3Njh2QL5/uNDew8/ytG730Ekyb\npnbFcpuRI9VeBNks/ADlCpZjeNPhPLPwGS8G89yao2t4v+P7tvCbpkULaNpUrUB3mxMnPPoye+Uf\nCN55R231OG2a7iT/Ex+vWlFs2gTlyuXoS6+mXuXj1R/zdOOnbZG1fOfgQahfH9avz9EFi9f17YuY\nMsW2d7AycOUKVK8OU6aoRWBu8NxzkJKipnhalr8YMULdRU+cqDuJMm0avPwyYtcuW/ytTHz9NXzz\nDSxbphaC6bRpE7Rpo/5bpozeLJaVEwkJ6jnV+PFqKEin06fVep5p0xDNmtkxfysTAweqN8u8eXpz\nXLkC990H775rC7/lf/Llg7ffVlM/U1P1Znn6aejXTz2L8IAt/oEiJEQt+ho+XF296DJsGNSrBw8+\nqC+Dgw6dP8SKQyt0x7B8qV8/9UPgm2/0ZYiJgV9/hddf9/gQtvgHku7d1QOrIUP0LFiZNQvmz1fT\nTh0cevpx748s27/MseNll5SSJ+Y9weK9i31+bksjIVQvqlde0bOC/uxZePxx+PJLyO/5tqC2+AcS\nIWDMGNi61fcPWo8cUTuNjR8PhQo5eujElESGzBni883ep2ybwr6z+/hb87/59LyWCzRooFbQ6+hC\n+9xzqh1KZGSuDmMf+Aai/fvVrJ9Jk3L9BsqW1FRo3x5at85W8zZPdJ/YnTtK3sFrbV7zyvH/7OyV\ns9T+T22m9Z3G3bfd7ZNzWi5z6pT6PnrhBXU37Qvz56ttJjdvhgIF/vtpu8jLyp6KFWHcOPXg9eBB\n759v5Eg1rfPll712ijHdxjBhywT+s+Y/XjvH9YYvGk7Pmj1t4Q9kt94KCxeq6Z+zZ3v/fBcuqLvn\nL774Q+H3lL3yD2Tvvquu/pcvh7x5vXOO1avVs4Y1a7y+MGbf2X20/KYlb7V9iwH1BnjtPOcSz9H2\nu7YsfXApBcMKeu08lp9Yu1YNAc2aBXd78WLg2rO6L27sbGv38LVyRkp19R8WpmYuOD3//+JFtR3e\nW2+p5m0+sP3kds4nnadJOe8uZrMbslt/MH++agAXF6fWATgpLU3N0ps/X20sk8EzM1v8rZy7fFld\nrQwZovb/dcqVK/DAA1CkSIZXKpZlnG++UZ10V6yA0qWdOWZSkpoWffQozJwJRYtm+DI75m/lXP78\nMGOG6lm+zKHpkjt2QOPGEBqqpsRZViB46CEYPBg6d1bj87l19ix07KgmTMTGZlr4PZWr4i+E6C2E\n2CKESBVC1L/J6zoJIXYIIXYJIey8OLepUgW+/x569YJ//ENdtXvq++/Vsvcnn1SbyLuw/W1OpKSl\nsOj3RbpjWP7i5ZfVituePeFqLqYeHzwIzZurYdPJkyE83LmM6XJ75b8ZuAfI9JJRCBEEfAx0BGoD\n9wkhHB4UM1NcXJzvTtahA/z2G2zfDrVrw5w5Ofv6y5fVmOe//w1LlsAjjzj2DCG3/w4TN09kyb4l\nOd7/NykliT5T+vDBqg9Ik2m5yuAUn74nXM6V/xZCwOjRULCgKt6zZqkx+5zYuBGaNVN3EaNGQZB3\nBmhydVQp5U4p5W7gZt/ljYDdUsoDUspkYBIQnZvzBgqfv7nLlYMfflArcIcNg6go2Lcv66/buhUa\nNVJv8jVr1BaSDsrtv0NYSBhPzn+SiE8ieG/Fe5xKOHXT159KOMXEzRNp/317QoJCmHHvDNc83HVl\nwdPEtf8WwcGqg+7w4Wo4tVYt+OorNX5/M4mJaly/fXu1w92zz3o1ZohXj66UBQ5d9/vDqB8Illt1\n6KA6br73HjRsqBpIDRqklrKfPg1nzvzvv0ePqjUDI0eqMU8X6lmzJ/dE3MOKQysYs34MVT+qSudq\nnfkm+hvCQsL+8Npp26YxaNYgWlVsRf+6/RlcfzAhQb74NrGMEhwMffqoWW5Ll6o9NV59VX0vPfaY\nujPYs0fts7FqlerTs22bmik0dSq0bOn1iFm+q4UQi4CS138KkMDfpZQx3gpmaRYWpsYvBwxQy8kb\nNIBixdRH0aLqo1gxKF5crRNwenqbw4QQNCvfjGblm3H2ylkW/r7whsIP0KVaF069cIo8wXk0pLSM\nI4RqX96mjRrOefddqFxZfT5fPjUxokkTtaNd/fo+fUbmyFRPIcRSYJiUcn0Gf9YEGCGl7JT++xcB\nKaV8O5Nj2XmelmVZOZTTqZ5O3s9mduI1QFUhRAXgGNAPuC+zg+T0L2BZlmXlXG6nevYQQhwCmgBz\nhBDz0z9fWggxB0BKmQoMBWKBrcAkKeX23MW2LMuycsN1K3wty7Is73PH/DXsQrBrhBDlhBBLhBBb\nhRCbhRBP6c6kmxAiSAixXgjhg9aJ7iWEKCSEmCKE2J7+/misO5MuQoiX0v8NNgkhxgshAuYJvRDi\nKyFEvBBi03WfKyKEiBVC7BRCLBRCZLlphiuKv10I9gcpwHNSytrA3cBfA/jf4pqngW26Q7jAh8A8\nKWVN4HYgIIdP058fPgLcKaWsh3p22U9vKp8ai6qV13sR+FFKWQNYAryU1UFcUfyxC8H+S0p5XEr5\nW/qvL6G+wcvqTaWPEKIc0AX4UncWnYQQBYEWUsqxAFLKFCmlAw1k/NIF4CqQXwgRAuQDjuqN5DtS\nyp+Bs3/6dDTwbfqvvwV6ZHUctxT/jBaCBWzBu0YIURG4A1ilN4lWo4DhqLUlgawScEoIMTZ9CGyM\nEMJLmzC4m5TyLPAecBA4ApyTUv6oN5V2JaSU8aAuIIESWX2BW4q/9SdCiALAVODp9DuAgCOE6ArE\np98JCW7eRsR0IUB94BMpZX0gAXWrH3CEEJWBZ4EKQBmggBCiv95UrpPlxZJbiv8R4Pptnsqlfy4g\npd/KTgW+l1LO0p1Ho2ZAlBBiLzARaC2E+E5zJl0OA4eklGvTfz8V9cMgEN0F/CKlPJM+lXw60FRz\nJt3ihRAlAYQQpYATWX2BW4r/fxeCpT+17wcE8syOr4FtUsqAboYvpXxZSlleSlkZ9Z5YIqUcqDuX\nDum39IeEENXTP9WWwH0IvhNoIoQIF0II1L9FoD38/vOd8GzgofRfPwhkedHoio5VUspUIcS1hWBB\nwFeBuhBMCNEMGABsFkJsQN2+vSylXKA3meUCTwHjhRChwF5gkOY8WkgpN6bfAa4DUoENwBi9qXxH\nCDEBiASKCSEOAv8A3gKmCCH+AhwA+mZ5HLvIy7IsK/C4ZdjHsizL8iFb/C3LsgKQLf6WZVkByBZ/\ny7KsAGSLv2VZVgCyxd+yLCsA2eJvWZYVgGzxtyzLCkD/D/iDmvjgfqBCAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, np.sin(x), '--g', x, np.cos(x), '-r')" ] }, { "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.3" } }, "nbformat": 4, "nbformat_minor": 0 }