Skip to content

Instantly share code, notes, and snippets.

@yhilpisch
Last active September 11, 2022 07:50
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save yhilpisch/d06a4e0987e45c0a8219136f027c3769 to your computer and use it in GitHub Desktop.
Save yhilpisch/d06a4e0987e45c0a8219136f027c3769 to your computer and use it in GitHub Desktop.

Intermediate Python for Finance Training

This is the Gist for Day 1 of the Intermediate Python for Finance Training in London, 28. November 2017

Agenda

Module 1 — Python

This module is a review of Python infrastructure elements and basic Python idioms.

The goal of this module is to be able to set up a proper Python environment, to know about basic tools and to be aware of basic Python functionality.

Module 2 — NumPy

This module covers numerical operations and algorithms with NumPy for finance.

NumPy is a central package in numerical and financial analysis. It allows for the performant implementation of financial algorithms based on concise, vectorized code.

The goal of this module is to understand the benefits of NumPy compared to pure Python code in finance.

Notebooks & Code Files

Below you find the all the notebooks and code files as worked on during this day.

The Python Quants

http://twitter.com/dyjh

team@tpq.io | http://tpq.io

http://pyalgo.tpq.io | http://certificate.tpq.io

Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<img src='http://hilpisch.com/tpq_logo.png' width=\"300px\" align=\"right\">"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Intermediate Python &mdash; Day 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**First Steps**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data Types & Structures "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Data Types"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"5"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"5"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"9"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"5 + 4"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"20"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"5 * 4"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2.5"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2.5"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"6.25"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2.5 ** 2 "
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"i = 2"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"int"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(i)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"f = 2.5"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"float"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(f)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"float"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(2.5)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.75"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"3 / 4."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"g = 10 ** 100\n",
"g"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"333"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"g.bit_length()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"s = 'python'"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'python'"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"python\n"
]
}
],
"source": [
"print(s)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Python'"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.capitalize()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'He says: \"\"'"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"'He says: \"\"'"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'PYTHON'"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.upper()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"def f(x):\n",
" return x * x"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<function __main__.f>"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"100"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f(10)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'p'"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[0]"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'y'"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[1]"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'pyt'"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[0:3]"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'pyt'"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[:3]"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'hon'"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[3:]"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'n'"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[-1]"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'o'"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[-2]"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'tho'"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[2:5]"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'pto'"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[0:-1:2] # start, end, step size"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'pto'"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[::2]"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'yh'"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[1:-1:2]"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'nohtyp'"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[::-1]"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'pyt'"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[:3]"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'hon'"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[3:]"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'python'"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s[:3] + s[3:]"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'pythonpythonpython'"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s + s + s"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'pythonpythonpython'"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2 * s + s"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
"text = 'Python is a good language for finance.'"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"38"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(text)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Python is a good language for finance.'"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"text"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Python|is|a|good|language|for|finance.'"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"text.replace(' ', '|')"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Python-Is-a-good-language-for-fInance.'"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"text.replace(' ', '-').replace('i', 'I')"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [],
"source": [
"wl = text.split()"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['Python', 'is', 'a', 'good', 'language', 'for', 'finance.']"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"wl"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Python|is|a|good|language|for|finance.'"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"text2 = text.replace(' ', '|')\n",
"text2"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [],
"source": [
"wl2 = text2.split('|')"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['Python', 'is', 'a', 'good', 'language', 'for', 'finance.']"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"wl2"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"list"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(wl)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Data Structures"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### tuple"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [],
"source": [
"t = 1, 2.5, 'python', i * 5"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1, 2.5, 'python', 10)"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [],
"source": [
"t = (1, 2.5, 'python', i * 5)"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1, 2.5, 'python', 10)"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t[0]"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'python'"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t[2]"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(10, 'python', 2.5, 1)"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t[::-1]"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [],
"source": [
"t2 = (t, t)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((1, 2.5, 'python', 10), (1, 2.5, 'python', 10))"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t2"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1, 2.5, 'python', 10)"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t2[1]"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t2[1][0]"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1, 2.5, 'python', 10)"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t.count(10) # number of occurances"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t.index(10) # gives you the index position"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### list"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['Python', 'is', 'a', 'good', 'language', 'for', 'finance.']"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"wl"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'finance.'"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"wl[-1]"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'anc'"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"wl[-1][3:6]"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [],
"source": [
"l = [0, 1, 2, 3.5, 4.5, 'python']"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0, 1, 2, 3.5, 4.5, 'python']"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"l"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1, 2.5, 'python', 10)"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2.5, 'python', 10]"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list(t)"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0, 1, 2, 3.5, 4.5, 'python')"
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tuple(l)"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [],
"source": [
"l.reverse()"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['python', 4.5, 3.5, 2, 1, 0]"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"l"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [],
"source": [
"l.append('yet another element')"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['python', 4.5, 3.5, 2, 1, 0, 'yet another element']"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"l"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [],
"source": [
"# l.insert?"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [],
"source": [
"c = 2 ** 4"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [],
"source": [
"ind = l.index(3.5)"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 80,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ind"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [],
"source": [
"l.insert(ind, c)"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['python', 4.5, 16, 3.5, 2, 1, 0, 'yet another element']"
]
},
"execution_count": 82,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"l"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['yet another element', 1, 3.5, 4.5]"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"l[::-2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### dict"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [],
"source": [
"d = {'a': 1, 'b': 2, 'c': 3}"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'a': 1, 'b': 2, 'c': 3}"
]
},
"execution_count": 85,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dict"
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(d)"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d['a']"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [],
"source": [
"d['b'] = 5"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"5"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d['b']"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dict_keys(['a', 'b', 'c'])"
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.keys()"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dict_values([1, 5, 3])"
]
},
"execution_count": 91,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.values()"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dict_items([('a', 1), ('b', 5), ('c', 3)])"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.items()"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d['c']"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"555"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d.get('e', 555)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Control Structures"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"range(0, 10)"
]
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"range(10)"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]"
]
},
"execution_count": 96,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list(range(10))"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200]"
]
},
"execution_count": 97,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list(range(100, 201, 10))"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[200, 190, 180, 170, 160, 150, 140, 130, 120, 110, 100]"
]
},
"execution_count": 98,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list(range(200, 99, -10))"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0\n",
"1\n",
"4\n",
"9\n",
"16\n",
"25\n",
"36\n",
"49\n",
"64\n",
"81\n"
]
}
],
"source": [
"for i in range(10):\n",
" print(i ** 2)"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['Python', 'is', 'a', 'good', 'language', 'for', 'finance.']"
]
},
"execution_count": 100,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"wl"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'is'"
]
},
"execution_count": 101,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"wl[1]"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Python\n",
"is\n",
"a\n",
"good\n",
"language\n",
"for\n",
"finance.\n"
]
}
],
"source": [
"for i in range(len(wl)):\n",
" print(wl[i])"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Python is a good language for finance. "
]
}
],
"source": [
"for i in range(len(wl)):\n",
" print(wl[i], end=' ')"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Python\n",
"is\n",
"a\n",
"good\n",
"language\n",
"for\n",
"finance.\n"
]
}
],
"source": [
"for word in wl:\n",
" print(word)"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\n",
"2.5\n",
"python\n",
"10\n"
]
}
],
"source": [
"for elem in t:\n",
" print(elem)"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"p\n",
"y\n",
"t\n",
"h\n",
"o\n",
"n\n"
]
}
],
"source": [
"for ch in s:\n",
" print(ch)"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 Python\n",
"1 is\n",
"2 a\n",
"3 good\n",
"4 language\n",
"5 for\n",
"6 finance.\n"
]
}
],
"source": [
"for i, word in enumerate(wl):\n",
" print(i, word)"
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {},
"outputs": [],
"source": [
"squares = []\n",
"for n in range(0, 21, 2):\n",
" squares.append(n ** 2)"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0, 4, 16, 36, 64, 100, 144, 196, 256, 324, 400]"
]
},
"execution_count": 109,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"squares"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.0\n",
"1.4142135623730951\n",
"1.7320508075688772\n",
"2.0\n",
"2.23606797749979\n",
"2.449489742783178\n",
"2.6457513110645907\n",
"2.8284271247461903\n",
"3.0\n",
"3.1622776601683795\n"
]
}
],
"source": [
"i = 0\n",
"while i < 10:\n",
" i += 1\n",
" print(i ** 0.5)"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.0\n",
"1.0\n",
"1.4142135623730951\n",
"1.7320508075688772\n",
"2.0\n",
"2.23606797749979\n",
"2.449489742783178\n",
"2.6457513110645907\n",
"2.8284271247461903\n",
"3.0\n"
]
}
],
"source": [
"for i in range(10):\n",
" print(i ** 0.5)"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {},
"outputs": [],
"source": [
"squares = []\n",
"for n in range(0, 21, 2):\n",
" squares.append(n ** 2)\n",
" # \"1,000s of lines more\""
]
},
{
"cell_type": "code",
"execution_count": 113,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0, 4, 16, 36, 64, 100, 144, 196, 256, 324, 400]"
]
},
"execution_count": 113,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"squares"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {},
"outputs": [],
"source": [
"res = [n ** 2 for n in range(0, 21, 2)]"
]
},
{
"cell_type": "code",
"execution_count": 115,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0, 4, 16, 36, 64, 100, 144, 196, 256, 324, 400]"
]
},
"execution_count": 115,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {},
"outputs": [],
"source": [
"no = 30"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 117,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"no > 250"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"bool"
]
},
"execution_count": 118,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(no > 250)"
]
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"number is below 250\n"
]
}
],
"source": [
"if no > 250:\n",
" print('number is above 250')\n",
"else:\n",
" print('number is below 250')"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {},
"outputs": [],
"source": [
"res = [n ** 2 for n in range(21) if n > 10]"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[121, 144, 169, 196, 225, 256, 289, 324, 361, 400]"
]
},
"execution_count": 121,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {},
"outputs": [],
"source": [
"no = 300"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"number is above 250\n"
]
}
],
"source": [
"if no > 250:\n",
" print('number is above 250')\n",
"elif no > 150:\n",
" print('number is above 150')\n",
"else:\n",
" print('number is below 150')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Prime Numbers"
]
},
{
"cell_type": "code",
"execution_count": 124,
"metadata": {},
"outputs": [],
"source": [
"N = 110\n",
"n = 10"
]
},
{
"cell_type": "code",
"execution_count": 125,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 125,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"N % n == 0"
]
},
{
"cell_type": "code",
"execution_count": 126,
"metadata": {},
"outputs": [],
"source": [
"N = 17"
]
},
{
"cell_type": "code",
"execution_count": 127,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"is a prime number\n"
]
}
],
"source": [
"prime = False\n",
"for n in range(2, N):\n",
" if N % n == 0:\n",
" print('not a prime number', n)\n",
" prime = True\n",
" break\n",
"if prime is not True:\n",
" print('is a prime number')"
]
},
{
"cell_type": "code",
"execution_count": 128,
"metadata": {},
"outputs": [],
"source": [
"def is_prime(N):\n",
" for n in range(2, N):\n",
" if N % n == 0:\n",
" return False\n",
" return True"
]
},
{
"cell_type": "code",
"execution_count": 129,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 8 µs, sys: 0 ns, total: 8 µs\n",
"Wall time: 12.9 µs\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 129,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%time is_prime(11)"
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"100000000"
]
},
"execution_count": 130,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"int(1e8)"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"5.0"
]
},
"execution_count": 131,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"float(5)"
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 59 µs, sys: 0 ns, total: 59 µs\n",
"Wall time: 62 µs\n"
]
},
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 132,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%time is_prime(int(1e8+3))"
]
},
{
"cell_type": "code",
"execution_count": 133,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 6.96 s, sys: 10 ms, total: 6.97 s\n",
"Wall time: 6.98 s\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 133,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%time is_prime(int(1e8+7))"
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {},
"outputs": [],
"source": [
"def is_prime_imp(N):\n",
" if N % 2 == 0: return False\n",
" for n in range(3, int(N ** 0.5) + 1, 2):\n",
" if N % n == 0:\n",
" return False\n",
" return True"
]
},
{
"cell_type": "code",
"execution_count": 135,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 708 µs, sys: 0 ns, total: 708 µs\n",
"Wall time: 714 µs\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 135,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%time is_prime_imp(int(1e8+7))"
]
},
{
"cell_type": "code",
"execution_count": 136,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 154 ms, sys: 3.38 ms, total: 157 ms\n",
"Wall time: 156 ms\n"
]
}
],
"source": [
"%%time\n",
"prime_numbers = []\n",
"for N in range(3, 100001):\n",
" if is_prime_imp(N) is True:\n",
" prime_numbers.append(N)"
]
},
{
"cell_type": "code",
"execution_count": 137,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[99877, 99881, 99901, 99907, 99923, 99929, 99961, 99971, 99989, 99991]"
]
},
"execution_count": 137,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"prime_numbers[-10:]"
]
},
{
"cell_type": "code",
"execution_count": 138,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 144 ms, sys: 2.62 ms, total: 147 ms\n",
"Wall time: 147 ms\n"
]
}
],
"source": [
"%time pn = [N for N in range(3, 100001) if is_prime_imp(N) is True]"
]
},
{
"cell_type": "code",
"execution_count": 139,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"9591"
]
},
"execution_count": 139,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(pn)"
]
},
{
"cell_type": "code",
"execution_count": 140,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[99877, 99881, 99901, 99907, 99923, 99929, 99961, 99971, 99989, 99991]"
]
},
"execution_count": 140,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pn[-10:]"
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 5.14 s, sys: 9.75 ms, total: 5.15 s\n",
"Wall time: 5.15 s\n"
]
}
],
"source": [
"%time pn = [N for N in range(int(1e8), int(1e8+200000)) if is_prime_imp(N) is True]"
]
},
{
"cell_type": "code",
"execution_count": 142,
"metadata": {},
"outputs": [],
"source": [
"import numba as nb"
]
},
{
"cell_type": "code",
"execution_count": 143,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 8.05 s, sys: 11.5 ms, total: 8.06 s\n",
"Wall time: 8.07 s\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 143,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%time is_prime(int(1e8+7))"
]
},
{
"cell_type": "code",
"execution_count": 144,
"metadata": {},
"outputs": [],
"source": [
"is_prime_nb = nb.jit(is_prime)"
]
},
{
"cell_type": "code",
"execution_count": 145,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 581 ms, sys: 11.8 ms, total: 593 ms\n",
"Wall time: 592 ms\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 145,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%time is_prime_nb(int(1e8+7))"
]
},
{
"cell_type": "code",
"execution_count": 146,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 425 ms, sys: 1.83 ms, total: 427 ms\n",
"Wall time: 426 ms\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 146,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%time is_prime_nb(int(1e8+7))"
]
},
{
"cell_type": "code",
"execution_count": 147,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 704 µs, sys: 1e+03 ns, total: 705 µs\n",
"Wall time: 711 µs\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 147,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%time is_prime_imp(int(1e8+7))"
]
},
{
"cell_type": "code",
"execution_count": 148,
"metadata": {},
"outputs": [],
"source": [
"is_prime_imp_nb = nb.jit(is_prime_imp)"
]
},
{
"cell_type": "code",
"execution_count": 149,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 86.2 ms, sys: 3.47 ms, total: 89.7 ms\n",
"Wall time: 88.3 ms\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 149,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%time is_prime_imp_nb(int(1e8+7))"
]
},
{
"cell_type": "code",
"execution_count": 150,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 28 µs, sys: 1e+03 ns, total: 29 µs\n",
"Wall time: 31 µs\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 150,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%time is_prime_imp_nb(int(1e8+7))"
]
},
{
"cell_type": "code",
"execution_count": 151,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 5.27 s, sys: 10.7 ms, total: 5.28 s\n",
"Wall time: 5.29 s\n"
]
}
],
"source": [
"%time pn = [N for N in range(int(1e8), int(1e8+200000)) \\\n",
" if is_prime_imp(N) is True]"
]
},
{
"cell_type": "code",
"execution_count": 152,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 304 ms, sys: 2.82 ms, total: 307 ms\n",
"Wall time: 306 ms\n"
]
}
],
"source": [
"%time pn = [N for N in range(int(1e8), int(1e8+200000)) \\\n",
" if is_prime_imp_nb(N) is True]"
]
},
{
"cell_type": "code",
"execution_count": 153,
"metadata": {},
"outputs": [],
"source": [
"import multiprocessing as mp"
]
},
{
"cell_type": "code",
"execution_count": 154,
"metadata": {},
"outputs": [],
"source": [
"pool = mp.Pool(processes=2)"
]
},
{
"cell_type": "code",
"execution_count": 155,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 13.3 ms, sys: 4.57 ms, total: 17.9 ms\n",
"Wall time: 111 ms\n"
]
}
],
"source": [
"%time res = pool.map(is_prime_imp, range(3, 100001))"
]
},
{
"cell_type": "code",
"execution_count": 156,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 146 ms, sys: 3.92 ms, total: 150 ms\n",
"Wall time: 148 ms\n"
]
}
],
"source": [
"%time pn = [N for N in range(3, 100001) if is_prime_imp(N) is True]"
]
},
{
"cell_type": "code",
"execution_count": 157,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"99998"
]
},
"execution_count": 157,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(res)"
]
},
{
"cell_type": "code",
"execution_count": 158,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[True, False, True, False, True, False, False, False, True, False]"
]
},
"execution_count": 158,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res[:10]"
]
},
{
"cell_type": "code",
"execution_count": 159,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"9591"
]
},
"execution_count": 159,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(pn)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Excursion: function parameters"
]
},
{
"cell_type": "code",
"execution_count": 160,
"metadata": {},
"outputs": [],
"source": [
"def f(x, y):\n",
" return x * y"
]
},
{
"cell_type": "code",
"execution_count": 161,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"150"
]
},
"execution_count": 161,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f(10, 15)"
]
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {},
"outputs": [],
"source": [
"def f(p):\n",
" x, y = p\n",
" return x * y"
]
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"150"
]
},
"execution_count": 163,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f((10, 15))"
]
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {},
"outputs": [],
"source": [
"def f(x):\n",
" return x[0] * x[1]"
]
},
{
"cell_type": "code",
"execution_count": 165,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"150"
]
},
"execution_count": 165,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f([10, 15])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Randomness"
]
},
{
"cell_type": "code",
"execution_count": 166,
"metadata": {},
"outputs": [],
"source": [
"import random"
]
},
{
"cell_type": "code",
"execution_count": 167,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8354021791271589"
]
},
"execution_count": 167,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"random.random()"
]
},
{
"cell_type": "code",
"execution_count": 168,
"metadata": {},
"outputs": [],
"source": [
"rn = [random.random() for _ in range(100)]"
]
},
{
"cell_type": "code",
"execution_count": 169,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0.9551492781521617,\n",
" 0.7411753686526652,\n",
" 0.4905104082189593,\n",
" 0.3232934089193372,\n",
" 0.17987036926148514]"
]
},
"execution_count": 169,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rn[:5]"
]
},
{
"cell_type": "code",
"execution_count": 170,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.2711504177673455"
]
},
"execution_count": 170,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"random.gauss(0, 1)"
]
},
{
"cell_type": "code",
"execution_count": 171,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"43669"
]
},
"execution_count": 171,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"random.choice(pn)"
]
},
{
"cell_type": "code",
"execution_count": 172,
"metadata": {},
"outputs": [],
"source": [
"from pylab import plt\n",
"plt.style.use('seaborn')\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 173,
"metadata": {},
"outputs": [],
"source": [
"N = 500"
]
},
{
"cell_type": "code",
"execution_count": 174,
"metadata": {},
"outputs": [],
"source": [
"x = [random.random() for _ in range(N)]"
]
},
{
"cell_type": "code",
"execution_count": 175,
"metadata": {},
"outputs": [],
"source": [
"y = [random.random() for _ in range(N)]"
]
},
{
"cell_type": "code",
"execution_count": 176,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nrkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10cc87b00>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(x, y, '.');"
]
},
{
"cell_type": "code",
"execution_count": 177,
"metadata": {},
"outputs": [],
"source": [
"x = [random.gauss(0, 1) for _ in range(N)]"
]
},
{
"cell_type": "code",
"execution_count": 178,
"metadata": {},
"outputs": [],
"source": [
"y = [random.gauss(0, 1) for _ in range(N)]"
]
},
{
"cell_type": "code",
"execution_count": 179,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAd8AAAHRCAYAAAArCrMoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3X+QHWd95/uPrCMJ4TPOjsl4NmXN\n2EayeoRDUAyzdnId2fjHei2bS5gKN1Wb5e5STsiPct21Xes4CZCb7F2KZcnaJnEIuTewN7UUyw3c\nCSSWiGOkKxQTBFNSxO4aTcvSAhq5HDHgEzzHCNlHnvvHOTPT58zpc/rH008/3f1+VbnQMDN9nn66\np7/9PM/3eZ4Ny8vLAgAA9lySdwEAAKgagi8AAJYRfAEAsIzgCwCAZQRfAAAsI/gCAGBZzdYHLS4u\npZ7TNDr6WjUaPzBRnFKgPtZQF2uoi27UxxrqolvW9TE2NrIh7HuFavnWahvzLoJTqI811MUa6qIb\n9bGGuuiWZ30UKvgCAFAGBF8AACwj+AIAYBnBFwAAywi+AABYRvAFAMAygi8AAJYRfAEAmfrc5z6r\nj3/8j/MuRl/33fceffvb37L+uQRfACiTZlO1o3NSs5l3STCAteUlAQAZazY1euctqj17Uq1rd6rx\n5CGpXk98uP37/1L79v2FXn31Vd177y/r29/+pr70pf9PrVZL9XpdH/jAh/XUU3+lr3zly7pw4Yd6\n7rmz+oVf+Jfau/dt+vrXj+sjH/k9XXbZZbrkko267roflyT9l//ySR048NfauHGj3vSmn9Sv/dr/\npo9//I/13HNn9Q//8A9aWvq+3vGOd+rQoYNaWPi23vve39WP//gbu8rU7/Puu+89euih39JVV12t\nz33us/re976nvXvfpt/+7d/U+Pi4nn/+ed122z/VN795WidP+vrpn75J73vfb0iS/uRPPqbvf/8f\ntGnTZr3vfb+r0dFRfexjj+vrXz+mV19d1s///C/o1ltv1333vUf/6B+NamlpSY888gfauDH5ClkE\nXwAoiZp/QrVnT7b//exJ1fwTar15OtUxR0ZG9O///SN69dVX9V//63E99thHdckll+jBB+/TiRPP\nSJJeeqmpRx55XAsLZ/Twww9o79636Q/+4BH9zu98QJOTV+n3fu+DkqTTp0/p4MGn9LGPfUIbN27U\ne9/76/ryl/9GkrRlyxY98sgf6D//5/9bX/nKl/Uf/sOj2rfvL3TgwF93Bd+wzwvz/PPP6dFH/1AX\nLvxQ73zn2/W5z+3Xli2v0c/93NtWg+/NN79Vt99+p2ZnP6NPfvI/6S1vuUHPP/+c/uiPPqELFy7o\nl3/53ZqevkGSdMcd/0w33/zWVHUqEXwBoDRa3i61rt252vJtebtSH3Ny8ipJ0iWXXKJNmzbpd37n\nvdq6dau+853vqNVqSZJ27NgpSbriinG9/PLLkqTFxe+s/u4b3/gmnT27oG9/+1u67ro3qlZrh543\nvWm3vvnN05KknTunJEkjI3VdffU1nX9fppdfvrCuTP0+L2g5sI3Pj/3YlarX69q0aZMuv/xyXXbZ\nj0iSNmxY2/Ng9+7rO+X8CX3lK0/r8stfJ9+f1333vUeS1Gq19Pd//3xXfaTFmC8AlEW9rsaTh9T4\nwoHUXc4rNmxoh4lTp57V4cOH9G//7Qf1wAO/ruXlVwM/s37znte97nX61re+KUk6ceIbkqSrrrpa\n3/jGf1er1dLy8rKOH/87TUxc1TlGnDKt/+HNm7foe9/7riTp5Mn5gT/b6xvfaLfgv/71v9M112zX\nVVddrZ/8ybfo8cf/T/3+739Mt956u6688kpJ7ZcQE2j5AkCZ1Oupu5r72bZtQlu3btW9975Lmzdv\n0ute96P67ncXQ3/+/e//P/SBD/zveu1rL9VrX/tajYyMaPv2Hbr11tv1q796r5aXl/UTP/Em7dlz\ni06dOpm6fO9858/rkUc+pCuuGNeP/uhYrN/9m785pD/7s0/p0ksv1Xvf+7saGRnR3/3dUf3ar/2i\nzp//gfbseate+9pLU5cxaMPycuptdiMxsZ/v2NiIFheXTBSnFKiPNdTFGuqiG/WxhrrolnV9lGY/\nXwAAyoDgCyAd5pUCsRF8ASTXmVc6etdtGr3zFgIwEBHBF0Bi/eaVAhiO4AsgsZV5pZKMzSsFqoCp\nRgCS68wrrfkn2oHXwLxSoAoIvgDSyWheKVBmdDsDAGAZwRcAAMsIvgAAWEbwBQDAMoIvAACWEXwB\nALCM4AsAgGUEXwAALCP4AgBgGcEXAADLCL4AAFhG8AUAwDKCLwAAlhF8ARRXs6na0Tmp2cy7JEAs\nBF8AxdRsavTOWzR6120avfMWAjAKheALoJBq/gnVnj3Z/vezJ1XzT+RcIiA6gi+QJ7pNE2t5u9S6\ndmf739fuVMvblXOJgOhqeRcAqKxOt2nt2ZNqXbtTjScPSfV63qUqjnpdjScPqeafaAde6g4FQssX\nyAndpgbU62q9eZrAi8Ih+AI5SdxtSlc1UHh0OwN5SdJtSld1MTWbdI+jCy1fIE8xu03pqi4gpkSh\nD4IvUCBk+BYPL0zoh25noEjI8C2clRemlaECXpggEXyB4lnpqkYx8MKEPgi+AJA1XpjQgzFfAAAs\nI/gCAGAZwRcAAMsIvgAAWEbwBQDAMoIvAACWEXyBImAzBaBUCL6A61gbGCgdgi/gONYGdhA9EUiJ\n4As4js0UHENPBAxgeUnAdawN7JR+PREsHYm4aPkCRRBz319kh54ImEDLFwDioCcCBiQKvp7nbZL0\nCUlXS9oi6d/5vv8XBssFoEyazXIFK3YpQkpJu53/haTv+b7/M5LukvS4uSIBJVTl7FgSlIB1kgbf\nz0h6f+DrloGyAOVU8eDDVClgvUTB1/f9pu/7S57njUj6rKT3mS0WUB5Wg0+zKX31q04FeBKUgPU2\nLC8vJ/pFz/MmJP25pI/6vv+JYT/fal1crtU2JvosoNCaTWl6Wpqfl6ampLm5bMY9bX1OEs2m9Mwz\n0nXXuVMmIHsbQr+RJPh6njcu6ZCk+3zfPxDldxYXl5JF+YCxsREtLi6lPUxpUB9rnK8LCwlHtaNz\nGr3rttWvG184QFKQCnBvWERddMu6PsbGRkKDb9Ix39+SNCrp/Z7nHer8tzXhsYDyszBPl+5doDgS\nTTXyff9fS/rXhsuCKirbFJQ8deafjn3njBpXTFKfgMNYZAP56WQB1549qda1O9V48hABI616Xbrm\nBomuRcBpLC+J3DAFBUBVEXyRG8YoAVQV3c7ID2vkAqgogi/yxRq5ACqIbmcAACwj+KLYqrxhAYDC\nIviiuAIbFmh6mgAMoDAIviis4FQlzc8zVQlAYRB8UVjBqUqammKqEoDCINsZxRWYqjR60z+Rzqfe\nuwMArKDli2KzsGEBAJhG8AUAwDKCLwAAlhF8AQCwjOALwD0snoKSI/gCcEtg8ZTRO2/pDsAEZZQE\nwRfVwEM7O4brNnSf50FBGSgYgi/Kj4d2djKo27B9nkODMlBABF+UnlMP7ZK1wDOp287iKY0vHFDj\nyUOrc7jDgnIqJbseKA5WuELprTy0a8+eNPfQTqLTSlwpRzCwFFXL26XWNa9X7Zv/Q61rXm+ubvvt\n8xxY0azl7UpfdyW8HigOWr4ov5CWlG3WWuA2W3MvvaSNCwuS1P7fl17K9vMMrmjmVI8IKofgi2pw\nYBnKTLpNezWb0vS0tfHtLV98Uhtar0iSNrRe0ZYvPpnp55lk5XoAIeh2Bmwx3W3aR80/Ic3Pt//d\nac2t67416MLtd2p502ZteOVlLW/arAu335nZZxln4XoAYWj5AjZl3AJvebukqan2v2205sbH9d1j\nz+jFRx/Xd489I42PZ/t5prvUHegRQTXR8kW+mk1aHibV69LcnBpPf81enY6P68Iv/K/Zfw4JUigR\nWr7ITxXn39pIhippay7zBCmmHcEigi9yU7ls0yq+bBiUaYIU1waWEXyRm6plm1buZcO0DKeMcW1g\nG2O+yE/Fsk2dWeyjyPotvmEA1wa2EXyRr4wepk4y8bJBglo2KvYiiPwRfIGs9QTMxC8bZPtmq0ov\ngsgdY75Algwm8jAuCZQHwRflF2UKSUbTTEwGzKolqAFlRvBFuUVpeWY4zcRowEyT7cscVsApBF+U\nWpSWZ6bduaanxyRZQIM5rIBzCL7Ih6WWWJSWZ+bduTmvOMVYcUL0FiBDZDtjsCymttjM2o0yhaSo\n00wiXhvmsCZAZjkyRssX4TLqrrTeEovS8kzTOo3bQjLRoopzbTJcGaqs6C1A1gi+VRUhAGT1ACpV\n1m7cFxRDLzSlCA4Od+uW6h6Fkwi+VRQxAGT2ACpRSyxuEDQVNGNdGxcTrlwsU1CJ7lG4ieBbQZED\nQJYPoJJsexf3BcXYC02Ma+NiK9nFMq1TknsUbiLhqoJiJeCw5N5gcZO1TCZ3Rbw2LiZcxS4Ta1qj\nZAi+VZRVdm9VH5BxX1Bsv9C4mM0dp0xZZB5X9V6FM+h2rirTXWquj+El4XBCUGwudqFGLJPxLuoy\n3qsoHIIvjCjEGF4/YQGWB7QzTCf+FfZejaNML44lRfCFEYWcmjEgwFbiAV0UhhP/CnmvxsGLYyEQ\nfGFGAadmDAqwAx/QeSyqUXUmu82zvldzvt68OBYDCVcwp2CZ0QMzbsMSguIm/7BMoZuyulcduN4u\nZrdjPVq+VVb1FtmwFlCf1lZei2qgGJy43gXshaoigm8eXAh6jAu1xezOzG1RDRSCM9fbxex2dKHb\n2TYHuqWk/m/oReoyzk2ei2rAfXGvN/ONK4uWr2VOdEvJoTf0KFzoKQiK26qgFVItUa83vU+VRvC1\nzJmgV5RxoaI/oEy+OLj2EoJUXHkRRz4Ivra5FPQK0CLrfUBt+fysO8FnWDA0+eJQ9JeQqonwouTM\nizhyQfDNQwGCniuCD6jlTZt12QP32Q8+/R6kEYKhyZYNraQCifqi5NKLOKwj+MJtnQfUi48+rg2v\nvCzJcvAJeZBGCYYmWza0kooj1osSL+KVRfCF++p1XXj7TPLgk2KsNOxBGikYmmzZpDmWC2PFLpTB\nEl6UEAVTjVAMSafsJJnaFZj+EbpaUNTymFxJKcmxXJja5kIZbGJ6GSKg5YviSNBFF3ustLebWVJj\ndp9efPRxNWb3dX92sDyOtuxcGCt2oQzW0Z2MIQi+KLVIXYCBwLkuUBw/ptGZu9uJXjN39w+uDmci\nu9AFarwMjr7oAHHQ7YxyG9YF2NslOruvq5tZ0vqVwLxdXcdzerUwF7pATZahal3YKK1ULV/P827w\nPO+QobIA2RjQBbgucJ4905XY1Np9fXerbdvkulause0Hs9qq0IUuUENlqGQXdlz0DBRC4pav53m/\nLuldkl4yVxzArr4JVT2JTcFWW1grN/X2g2xVGAnb5Q1R0fuiiNK0fE9LmjFVECAXUabwBFptoa3c\nlNsPslVhRCxMMVBl74sC2rC8vJz4lz3Pu1rSp33fv3HYz7ZaF5drtY2JPwtwRrMpPfOMdN11Q1un\nmp6W5uelqSlpbq7754PHkQb/bNxjo5q4L1yzIfQbtoLv4uJS8g/qGBsb0eLiUtrDlAb1scbZugjb\nMq5f96AULykp5NjG6qIk2905e29kZcB1q1xdDJF1fYyNjYQGX6YawW1FTR5ZKbfUN9Gob/egqa0K\nTdSZw9OnKinONXUhwQ5DEXzhrqIGgAjlzmz+bafbMXKdhTzUGTt0SFH/DjBQquDr+/63onQ5A0kU\nNQD0LfdKkDt3brVFnEXiUM0/0R7vU4Q6G/BQd2FxDrQV9e8Ag9HyRf5CWl9FDQDryh2YG/yj11/X\ntXSl6e7BlrernWij4XU28KFOVrEzivp3gMFY4Qr5GjQvMavVmZIkEgV/R0MSo3rKHQxyvdsiGl8J\nq16X5ubUePprQ89v6JxZk5tCIDkXVimDcQRf5Gro0oymA0DCXY5Wf2f7jnZZT59aXY6ydvbM+odi\noNzBILe8abM2vPJyti2YqHVm66Ee58UF/fEiVDoEX6SXYkqK7RWLkqzD3PU7p0+t/f/PntTle2/T\nxoUzgwN5MMhtm+wfrPOS9UN90IsL3dmoMMZ8kU7aTEzLY4tJxs+6fmf7jtUg0pqY0MaFM5IiJMKs\nBLnx8UpNA+l9cVl5eelbX0WdVgYkQMsXqRjZ0cdml9pKK/T4sfi/09t1um1SozN3J2u1l2QBi2G6\nejZ6Wr69G1CEDgdUpK5QLQRfpFLUhe5HHn4w3rhvzwvCyr8TjZk2mxq9Y087CG3focZTh90IKlkE\nubAXl57PCH2JY6MAlBTdzkingFNSjM6bTLCaUO34sbXu19On4rXCs5LlQg7BOgqpr7DhgELNcaXb\nHDEQfJFewZazCx33de3h2a88aco44HdzD3IhL3GFmePKKlSIiW5nVE+/cV+L3Zut3dertX3Hardz\na/f167t8QzZeSFzGwPEuTkzqhf0HpPHxtTKlGT4w1V3db+y/IHNcjeQ+oFJo+cI811qQIUYeflCj\nM/e0g9LxY/ZafvW6Gk8dbrfynjosSetaTf0e5mlap8Hf3bhwRqN7b+2+PkmHD2y0+ArQs1KYFjqc\nQfA1oSDBxoqCdL/1BjJJdh+egYDSt9XU52Ge5gHf8nbp4sTk6te1hYX1wTvJ+LWN7uoi/H0VMPcB\n+SL4plWQYGNL7mOHgwQe4usC2e7rc3t49g2q/R7maR7w9bpe2H9ArYmJ7s/JouymNJuqPX1Yo3fs\nKcbfVwFa6HBHMcd8HZr3V+qxngT1bHTqkcnr3GcMtd9YYi7XLmxcM2QMNHEZL71USx/5I0ntcWcj\nfzumxmQHjHmvyO3vy6HnDcqjeC1fx1qapR3rOXdOl998Y/x6TjF22NW1aPg6G9m8vshW6nPmHo08\n/KDZY4fVY9Tu4j7XOni9VuTy95X2PixClzlyUbjg61y3ZhnHeppNje69NfrSib3iBrUhD18T1znS\nS1JeD8rg+d+xR7WnDxsvg/W/mxhBa+iY9/Ydasw+kcvfV6p6c6yhALcULvg62dIsWQuq5p9QbWFh\n9euLE5OZ1nPUhKNU+r0kBYPtoAdlxkG5d/3jlQxsk59n5e8mUE9xgtbQMe+nDqt1055c/r5i11vC\nOkD1FG/MtyDz/oqsa9x2YkKN/QfC69nAeFjfceIsrnNwvLRnDHjpQ4/ktrxh8PxXGB/fzPrvpree\nZvdFH/sfNObd2Q85t7/1OPUWrIOJCTU++5eFXHoVdhQv+ErsbZm1qA+cNIGpJ2hHTjgyJGyqUe+D\ncmBCncHFJVYW/Rh56P7+Gw+YYLE+a2fPxAv2/co27P5KWv9xfy9ivXXVwcKCLv+5/1kv7D/g1haS\ncEbhup1hSW9Xep+u18Tdav26eCN8nklRpxoNWorS+Hje1q1qfO4LhcwfCOs6TjMcM/D+Slr/GY7D\ntrxdq1O5pPZiJrWzZ0o1JAVzCL4YLuSBlXQccWjQNvWAHBTAQ+bRrntQhiTUGR3PC57vzN3FbCVl\nkHg46P5KWv+ZjsPW62rsP7i6mAldzRiE4IuhQh9YCR+4w4K2kQdklAAetWXW5+dMJjCVJjHHdOLh\ngPsraf1nnng2Pq4XvnSkkL0XsKuYY76wauDCGUnGEYeMKZtYqCPzxU8MJjAVdU9kK8Lur6T13+/3\nTC+iQU4KIiD4Yrh6XY3ZfdryxSd14fY7s39AGQhsVgKaqYdsVTP40wa9pPU/IOud1ipsIfhiuGZT\nozN3h25Hl4m0gS2LF4YsVa215EjQK/XysHAaY74Yauh2dC7qvDBc9sB9Gp252/3yVowr49zrxoC3\nTQ7PsmfJSBhA8MVQkbajc4wrD3frmk3pq19dXbXL1SDhzEp1waSu2X0anbl7cJJelEQ+h+sd7iD4\nYriV7eiu3Capvdau60lBzjzcbeoEBt14Y3sbPpe34rO9JvqQaWetN0+rdvbM0Bc2a9PkUHoEX0Rz\n6aXSa16TdymiK+OGF0P0rhFdO32q/W9XW/621kSPGBCjvLANWnSldnROtePHqtnjgthIuEIkNf/E\n2sP89KliJKZULImpK8N7+w5Jym6pyiKZm4uWVBUl6zxkqtJq8tj2HWpt30G9YyiCLyIxOnWHzcmz\n0QkMY985o8YV7TH6ytdzsyn9yq+sfjl0yCTKC1vPz/T2ODRmn5C2bq12vWMoup3LzlTyh6lu3KzG\nxGwnuZj8PJPHqtelG24IXy6zYmr+Cenk2m5RSx9+LLNdqaS1dcKrXu8YjuBbZqYDnYGHeSZZyM2m\nND1t5jyjBEKTe/82m2uJUXfsIUHHsJa3S5qaav+7ExiNq2B+AdIj+JZYrEBnqeXY2jZpfOH5mn9C\nmp9v/ztNQI/4shJarwledmrHj3WPpR8/lqzsVRTlnq3Xpbm57AMjvQyIieBbYpGn29iaHtFZ+GLj\nwpn2ZuOz+4ztfrPautm+Qzp/PtE5RH1ZCavXQs4tLmp3fZx7lsAIBxF8yyxid5itoNG72Xjt7Jnh\nvxSndTP7hCRpdOaeRC8RkV9WQuq15e1azTKOOhe6tfv67t/Jols0jO05qXG72Adc+0K+6AABBN+y\ni/DWb2tBitifE7N1o61bk89t7WRgN2b3ReuiNNWaqtfVeOpw+zOfOry2y46F1qjpPYmHlTlWF/uQ\na1/JRVT6YTWtwmKqEeztqhPzc+Iuep94OpShRf4Tz4XOaZcdY9PHMijz0Gs/6F6qylQ2RzanQDK0\nfNFma1wsxufEbt0kzDo11QI00RpLVJakrZ/Ozk8vPvp4qvH3yGPlMbrYI9Vlv3upQss70vVebLR8\n4a4kLfIEq1oZawH2lldS7ehcrBZY7LL0a/2MjUQrb2CryDQtp8hl7nSxR7qeCXtj+gaka34s7im1\nOd6CtrJnNTJD8IXbbCwRGedBP+yBvFLeOF2CPcdM2zUfNdgY28s2TpnjXM88X6SK0KVra7gImaDb\nGZCidYfH6NKM3CUYPObNN0jnzmXbNR/3dwd1aQe/Z3GThIFd7IYWvChMly7TqAqL4NsPGYTocw/E\neSBHDYq9068u33tbvPsuTbAZ9rtDVvLq+t65c9n/zUR9+TEQkMimzhjPWILvOmVZexjJhdwDsR7I\nEYNiy9ul1sTE6tcbF87Eb2WlCTYDfnfQy0bv90b33pp5kpPV1ihLRmanQklxgxB8e2S19jA3W3GE\n3gNxH8hRgmK9rsb+g2tLbvau0JXjS9ugl43g9y5OTKq2sCAp26BovTUa56WGl+vICtOlnzGCb48s\n/sC52Ypl4D2QxRjb+Lhe+NKR9St0nTu39tJ2xx7Vnj4c/+GeJigMetkIfO+F/QfMB8V+5c6rNTqs\nDnm5joUu/TaynXtlkEHIlICCWbkHbG5y0GeFri1ffLJrn9jRmXviZd6ayNgdlHEc+J7Rv5lB5baR\n/R61LB3GssargixtSbR8+zPdumH8qJBGHn4w8TrRSfS2CC7cfufq1yvi9JwY73EZ1AKM+jcTZRlK\nh3qKopSFllwCZGkTfK1x5WbLemyqJGNfuQSA3pe08fH217NPrK0MFePhbjQomOhajXgMl4JZ1JW2\neLlGXHQ7V0nWCwcUYWGCiHIbKujtVq3X1bppT/SVoXqO1bd7L8HKTb0vI1s+P6sLb5+Jnozkn5DO\nn4/WPetSt2TUstjuDkfh0fKtkKxbcy51F6bmWmsmac9J7+8Nmbsb1msRbAEub9qsyx64L1oLOPB5\nIw/dr9Y1r28fb9iWi670FLlWlqIqSY+YSQTfCsm6O890N2fuf6xpH7ounEOP0Bekc+c0evMN4V3C\nnZeRFx99XBteeXn970f5vNOnpJdfNno+XRysb4hs8BAE3yrJujUX9fhlmroRdi6OnkPfF6RmU5fv\nvW34XN16XRfePhPrBWvdfODnzrY/o7PlojGO1jdK1iNmEMG3KlaChJRtF9qw1mKEh2Rh/lgHnIuz\n59DnBanmn9DGhTOrP9KamBi8M1HMhUYynQ/c0be+aQk7waUEOpcQfKvAoVZBmaZuDDqX1JsWZKnn\nBam3ddrYfzDazkQxEr9ab57uyt5e+tAjac+iy7r63ja5es9repoAnCfX8iccQbZzBQxdBMDkvqVD\njhUpi9ilbNcBBp7LsHNIseWgcZbre+ThB81nxPecQ/Ce1/w8C1/kjWzwdWj5VsDAVpjJVnGUY0V9\nCzaVYZpl63LYuSTctKCLrV6LLDN6A9cg0+74wDkE73lNTTnbe4LqIvhWwYAgYfJhGPlYtqZu2Ahc\nCc8l0ZaDeY4d977ERH2p6bkGrW2TdoYUAve85uaMz2dnLBlpEXyrIiRIDGsVx3nIuDZWmzpw5dVq\nDnxupnWaMIB2bfgw5KVm3TU4eyb5+F/c65HFS55D+RMoNoJv1YUFgSQPGccSK1IFrrxazb2fK0UK\n0mHnEPr9GOe3bnWr4IYPQ15q+l6DJEHRVtAbUqfO9ESg8Ai+6PswTPyQcWk1oBQvA6Hnn3GXY9/P\njRKkY84zjnN9B234MPSlxtALWaZBb+WaRmjRu9a7g+JKnO3sed4lkj4q6U2SLkj6Rd/3T5kqGAyL\nmTFbmm0QE2ZZ9j1/C2tXR633dcHo+DG1btoT/v2ebN9Y17dPNnSs7GgDma6tbZNa3rRZG155Wcub\nNqu1bTLV8VYFrunFicnV+c6ha08XJBMf7kvT8v1ZSa/xff+nJP2GpP9opkgwrgRdyNaFLEaReZdj\nxHpvebtWdzqSpJGH7u+6rkNbaAkWy+hqfVvu4aidPbO6rOWGV15W7eyZIb8R8biBa7px4YxaV26T\nNGTtaUuZ4Si3NMH3Jkl/JUm+7x+R9BYjJYJxxrqQq/ZgGLAYRdaZukMf7vW6lj782OqX65ZrjBJc\nXRoikCJv7BC57leO9/d/H+2423dImzenO4c0SOaqlDSLbFwm6fuBry96nlfzfb+VskwwLFIX47Bu\n6RJtF5iYY12Ord3XD76uRVrYYNj9FbfuA8dTrabRVmvocXX+vEZn7pG09jJjs/6GLoaDclleXk70\n386dOx/ZuXPn/xL4+uygn3/lldYycrS0tLx85Ej7f/t9b2pqeVlq/2+/nzlypP39lf+OHMm+zHEE\nz2/QuZbFyjk+/3xxznXQdTE4fKKdAAAgAElEQVR9f/Ueb+W/gwcHl2/Y30GW8v78qsvmuREaE9O0\nfL8s6W2S/szzvBsl/bdBP9xo/CDFR7WNjY1ocXEp9XHKInZ9vP4N0vll6Xz379SOzml0fr79xfy8\nGk9/bf0b9xWTGg20shpXTEqLS9kvfRhFs6mxvbdK8/Or46C106fcb6Enrbt+rcTAdTX2d2J42dGB\nLduw+yupKyY1OjGxulPTitYvvUeNpw6Hn8/+g2vn3OdvZSAT9ZXm8yPgGdpttT4y6tkbGxsJ/V6a\nMd8/l/RDz/P+VtKjkh5IcSzkKNJ4Wr8xREfGqGr+Canz8lA7faq9b6wcnYcZY1pLGCuJX4av7dAy\nm07wq9fV2H9QFye6s6KHbmWYdBzcVH25Ng5fEXnM304cfH3ff9X3/V/xff+nfd//Kd/3500WDBYl\nXG/ZlQUHWt4uaWqq/e/tO1Zbv5klRSVNPAs8oC/fe1v3whWfn412vGZTOn8+83M0fW2jvuAZDTzj\n43rhS0ekgwcLV1+wK4/52+xqhLYEyTnOzAWu16W5uXZ3eacMqbr/BnUfpuieWjetpdMturxpsy57\n4D61Pvr7Q3c3Wv3s7TvUmH1Crd3Xm28lBQJ87fSp9v6+aefV5pWsVq9Lb32rGk8dzvSznflbQDI5\n3J+scIXkXJoLHGw1pWlBGVwZqve4vS3Wxv6DevHRx1fnrw47Xtdnnz4lbd1qfhrYyvnP3CO9+qou\nXrlNtYUFjc7cnf7YgRe82GVNe35Zd+e69LeAZCx3+RN8kU7JxqiGBdek801XA5qkxuwT7Qf0+Lgu\nvH1m/fFCAs3KKk+Suld5Mjg+23X+3/wf2vjc2fa/e+vCQNd75LI6klswVNjfQtXmxyMSgi8QYHxl\nKA1psfYeTwoNNOtWeXrWX3/8Z09KzzyT8OzXLzrRd6w0RTBM0nNQiPHUsABblBcHWEfwBYIyWBkq\nSkBfOd6gDR10/rxa17x+9ddWlpTsPb6uuy7eOfeUZfX8nzrc/q+nLtIEwyQ9B85vZjAgwBbixQG5\nIOGqilyYm+tyeUyvDBUjmWPohg6dtYel7lWYgscfq9fTzQ/tOf/euki1yUGSxJa0yTCdVmlW99eg\nlalIxEIYWr5V41o32LlzGr35BnfKk5WoreVhGzo8d3Z17mrXw9zi2HvqTQ6SlDXK7/Tr+m02penp\n2GPMccZoB7bMkyZiMU5cegTfinGqG6zZbM937axClHt50jL1wByyocML+w/0f5hbemA72Q3cbGr0\njj3tIHvHntU66FqAJcr9lcUOYFFfNgwswILioNu5YlzqBqv5J1b3T5XUnk/qwoM8iSw3nujT7doa\nHw/9fE1NSfsPZj6txqWhgtrxY2srm50+tbq/8eoCLPPzke73xJsbpB2qCN4/gWUx2WChvGj5Vo1D\n8xGDLaiLE5Nq7D8oKcEcUAdk3qMwpPUU/HzNz4d/fkjXbOw6L8oUs5UFWCLe73m16rvun4WF/kML\nKBVavlWU51ZzPclVXS0oqbDbFmbSoxAjES34+ZqaCt02cl39akCdu5YIN0Br9/VrK3Jt39Fe+WtF\nnPt9UKs+w/rovX8as/tUO3umEHWPZAi+sCekaza46pFz+5lGfeCa7oqN240d+PzRm/5Je0ecHmGt\n8751XrT9m+v1bJeQzLo+ogwtoFTodoY1mawelaVg8s3NN0jnzg3+eYNdsYm6sev1dp0980zfLuSW\nt2tt0YztO9pfh9S5U4l5UZmo/5CEq976iLwRRhxF6cqHEQRfWJPF6lGRJMwC7h2Hu3zvbUbWTo5S\nljTLWOrGG1Nn6ubyIhSlbjLO6A576QjWx8pGGFYzkZl6VDoEX9iTwepRQ6WY19zydqk1MbH69caF\nM+lagHHKknYZyz6t1Zp/ojsjeOX7/ercdmJelLqxMEc99KWjUx9xNsIwxrW5+TCC4Au7b9WWu9ZS\ndZ/WuzdkT9sCjF0Ww8tYxm7N2ly4I0LdWOkKH/TSUa/33wgjY4UcAsBQBN+qK/lb9bqAs20yXtdm\nZ0P2RC3AnpeazLtyO4FDR46ELvbgyjSzXlHqxlpX+KCXjhzq0LlcCBixYXl5fVZkFhYXl1J/0NjY\niBYXU6xZWzIm6qN2dE6jd922+nXjCwfyzzBOYGBdrGQsb5vU6MzdgzNWTWW1hh0nmD0tZZKdW9i/\nkyiZ5Qmm+xS2PoKGnXfEeilFXRiUdX2MjY1sCPseLd+Kq8RbdaclUzt7JnbXZtKs1tCuwsDUKid7\nHGwNQfT7nCjd3FXNCB503iXvvSorgm/VOdwVaVrcrs00Wa29++Lq/Hm3t5prNlV7+vDa+shZPsQJ\nFkY5dy8hEoIvqtOa6Pei0dsCM5XVuvJZs09IkkZn7ukKNLF6HLJuja4Ew5l71rKhe/YSNvn5BAuz\nKtF7VUIEX1RL8EUjrAUWN6s1LDjV69LWrf0DWtQeh7AyDgqIMYNl17rQHb17CZvcko9gYViFeq/K\nhOCLfOW4eMDAFlja4NgxbK/XYT0Ofcs46DMT7F/b20XemH2i/17CprbkK1KwKMriFlXpvSoRgi/y\nk/PYX5QVtxIFxx5LH3qkK6ClLeOgzxy4f+2AFvpqMHzqsFo37Um80lXkYD2sbl0IeoxNI0ME36px\n4aHWYWTsr/d84pyfgRbYwOAUGEsdefjB2McOK+Ogz1zdv7b3e8O6r6X+wTBmHRnpUo4b9DK6pxmb\nRpbY1ahKHNupJvU2fIHz0dSU9Jm/HD6Pt1fa7RUH7GaUeGP2fmXstHj7bsXYswqT5ubUePprXd/r\nWxZvV7T7wdSWfBHFqrcM7+lMtokEOmj5Vkjt+DG33uRTtjx7N5Df8sUn+59f1q39kC7U0FZg3PL0\nawkOWYWp93txu69TSTn+GKf1nGnrtEhj0ygcgm9VNJsaeej+1S9XtpSzXYZECyuECD6kNTWlC7ff\nuf6hnee4XcjUprjlSR1gOqsfNWb3Re6+zlWMoGdjyc7cEpkcGiKCeXQ7V0RwRxtJWvrwY3YfKFl0\nDwa6OEd3v0G1499QY3afamfPrHZ51o7Omen67XM+tePHJEmt3deHn0tPl22SruhU3Z+D6t1AF3Fm\nonZ1u3wOaQz7e0mwzCbcQsu3Ita1EHZfb/XzM+3i9HZJb31ruzU5c3fXA8loy2ilJXLuXHslqJl7\n2v/dsSdy66RveYa1cFJ0fw6t9zJMUSnDOfQYeN3Iwi4FWr5VkXMLIcvklX7Ta1ZbTabOO9ASuTgx\nqY0LZ9Y+v7M3bqKWmmQ+6SmApKFiGnTdjCXyIVe0fKskzxZChskrodNrAp+d9ryDD7yNC2fUuvLK\ntc+PO34eKE+sHoEkY4AkDWUn7HqYGKsdcN2cHatHLLR8YU/aaT0Djttvek2XlGNkvS2Rxuw+1Z71\n298bNOYb87ihD9I0Y+ZZ1XuWXB/THLBlpLHchrDrVtZx7ooh+KIcBgWY3gdiT1JW1OP3PvBa4+NG\nyh3lQWqlq9GVgOfYfPR+wq6HtS7hIr5QoQvdzii93gfi5XtvS5asklW3fYTjZt7V6FASTxFWlgq7\nHnQJIyqCb5kwL7CvrgfixMRqspSRB3ucOk9zfTIeu+0NeFs+P5vbfVSIABZ2PRhjR0QE37JwqOXi\nnOADcf9Bo1OPIte5ieuTYcJcMOAtb9qsyx64L7/7qCgBLOx6lHDqE8wj+LrAQIu1CF11uVp5II6P\nG3uwx6lz569PJ+C9+Ojj2vDKy5IyKmfUe50AFq7sPVxlP78Ogm/eDLVYC9FV5wpDD/Y4dV6I61Ov\nt5fonJiQlEE56Z1Jr+x1WPbzCyD45sxYi6goXXVlEqfOi3B9ms32rlALC7o4ManG7D6j5XS+9V8A\nZa/Dsp9fEME3Z0ZbRHl31dnqLjL9OSkToSLXuePXp3chkdrZM31/LqlCtP4dV/Y6LPv5BTHPN282\nJ8xnOY/T1txM05/j+pxSU9cswnlmvhRlknvdlbnHrij7Ahv1uhqz+7Tli0/qwu13lu/8Amj5usBG\niyjjsRRb3UWhn5Ow9Wqs3FlMOTJ4zSKdp42u8Tj3eoXG/2LJuwclS52hj8seuE+jM3eX+poTfCsi\n6+Boq7sobFcgTU8nekgbKXdGU45MXrPI5+nQg71K439oq9I1J/hWhI1NxzNrNQVbin0+p9+uRpmX\nO1CmrKYcmc4HcD7hK6jZlM6fV2v7DkklHP+ryHSauBjzRfnYGCvKYr3ZkLHK4Oes7mo0P5/sDzZu\nufusFR11rDTWuKrpa5bk+uQx5hqs3+071Jh9ItXmFWnKkcm5u55nkKeyj2kH0PItm0Fv1GFdig6/\nhUcdq9Tc3PBWnaHzXFems2eym3KUZzdwTmOuXfV7+pS0dWv4TlVZ3bcZnnuVulYTcWjoI0sE3zJJ\n8sBwPKnF2Fhl1POMsEdr3zIVacpRRHkFiUjXvMAJhFXqWkU4gm+JJHlgOP8WbmisMtJ5hj3Qe/9/\nKbxMefYiGP7s3IJEhGte6ATCoo2/IxME3xJJ8sAoxFt4kpZiTyBad57bJtcFqrAHeu34sfX/f78y\n5dmLEPhsTU+b+ew8g8SQa17oBMLO8YvQ+4HskHBVJkmSFcqY4BCS0LJ6ntsm28so9iZx9UuGajY1\n8tD9q4dubd/R/aAPJOVY20i9j+Bna37e3GfHSdKymZxV1ARCoIOWb9kkeaMu2Vt4aJdk5zxrZ8+E\nfr/fNKba6VOrx1768GNr9dTT0m1tm8ytFyHYEtTUVLTPNtlNnUerP4/7dlCdOZy4CPcQfFE6w7ok\nB36/54G+7md3X7/6o6myntPo95APvDhobm74ZxsOls7nDpgwqM4cT1yEewi+KJ9h43WGdiMytTrW\nwNZS7/cHPeRjtARNB8tC5A6kNKjOKvHyAaMIvshPlt10wwKRialBvYFZitf6GdZa6vN9Uw9548Gy\nAhm8g+qsCi8fMIuEK+Rj0Co/RdrJJpCUUzs6FyvhamCCVrOpLZ+fXf/9pDsP9dZpFglLZU9QGlRn\nZUxcRKYIvkV60JdIaOAp8NJ7cQNj6M8H6mB502ZteOXlrsU8kmzL17dOyx4sszCozqhPxFDtbmeS\nJLpZzNYM66Zzauwsbn0kWDqy388H62DDKy/rxUcf7z5ezCxfp+o0DrKHUWKVDr6FfShlwfaLSEjg\ncWbsLGl9xJ3+0ufnu+pg+w5dvOrqSOUNC1TO1GkcvBij5CodfAv5UMpILi8i/QKVI4k7ub6YrdTB\n7BOSpNGZe9YCUL8gOyxQ9UkMc71FyYsxyq7SwdeVB70LnHoRidJ6zLhLMvf6qNelrVtXF/ioPXtS\ntePH1gfZPolZeuaZvsdbGY8sQosy9/oHMkbCFUkSbUXK1uyXQDQ2YvYzHKiP3oQsSd2twePHNPLw\ng+sSs2rXXSedX+57zDyXwOwyLNHRgfoHspSq5et53js8z/uUqcIgZyaX68uwZWqtSzLvZTfrdTVm\n97UTrmb3qbX7+q7WoKTBiVl9RN2uL9Nu6ajjuQW5H4EkEgdfz/M+IumDaY4BB2TxUMo4WWZgACnT\nQ7bZ1OjM3brsgfs0OnO3pO6tDHuD8YW3z7R/76tfHRjQBg61mLx2IdfC+nguyVtwUJrA+beSftVU\nQZCDjB5KmT9cwwJIGR6ygYDVtx6DrcGQFbZ0442JW5TGrt2Aa2F9PPeZZ0jegnuWl5cH/rdz5857\nd+7c+d97/pvufO+WnTt3fnrYMZaXl/XKK61lOObIkeVlae2/I0fMHHdpaXl5aqp9zKmp9tc2ZHU+\ntvTW2/PPx6tHE+dv6toNK8vSUvv/Wzl+79cm5XU/wpws749shcbEoQlXvu9/XNLH0wb5RuMHaQ+h\nsbERLS4upT5OWaSujysmNRpI6GlcMSmZqt/9B9eSZc4vS+ezvW5jYyNazPJ8LKgdndPo/Hz7i/l5\nNY5/Q6049Wjq/E1cu0BZLk5M6oVLX7e+LK9/Q/v4i89nuqrZ2NiIFi3fj64q5DM0w1Xvsq6PsQGJ\noIzXVlmWU63ySFYq+NSxvt2xMTeAaDx5SDpyJN18XhPXrpMs1pqY0MaFM+0x65ByWBkDzjt5DomV\ndc43wbfqyvZQKtL59CYkJXl56HMM3XCDpPzn89bOnlFtYaH97wEPTafn9JYpga+gnL4/Ukg1z9f3\n/UOSDhkpCexgI4m2vOvBxGYHA7rjcp/P22xK58+rtX2HaqdPDX5oujqnt8CbfJSKq/dHSrR8q8T1\nbOAsWxnBYztQDya60gYdw2hrIe51WanfmXskSY3ZJ4YHLgd7LMra3VlIDt4faRF8K8Tph0mWAbHn\n2LXjx3KvBxPBceAxTI1/J7guXffZ6VPS1q2FfGgmukZ0UyMigm9VBLoBJffGTrJ8Meg9tqT8x5BM\nBMd+x2g21xbZMNBaSHJdSjNGF/canTuny2++0d2eJTiFtZ2rIDh2tX2HGrNPqLX7eqdaI3E3ok91\n7N3XuzGGZGJd8eAxOtdZz57UqKExykTXpUxjdFGvUbOp0b23amNPghnrxiMMwbcCCtENmOUDO+TY\nZXswZpJklfS6VGzDkpp/YjWzW5IuTkwWt8UPK+h2roDCdANmmVSRdcKGrbG+AZ9j7Dr3mb4Uu+4q\nNvbZVfcTE3ph/4Fct8SE+2j5VkGZugFdlPWUlJVpUdsmNTpzd/jndK7z2HfOtFe3SlIGE+cS9xh5\nT/syIc7fGFOYIFq+1VHCVH2jUrREMs0iD2Yb7711+OesLLKR8DpnPQVqHRvTvmy1MiP+jTk96wDW\nEHyBlAEgk279TsDomha1sKCLE5NmP6dH5lOgemQeiJpNaXraqQzkwgwDIVN0O6PyUicqme7W78lO\nD64S1Zjdp9rZM+a6aHu7fE2cS4xjZJnlLrWvrTqbVTiTgcwwEETwBcwEAIPZvb3Z6Y3ZJ6StW9c2\nWhgfH36QKOOoJpa4DBP1GBkHopa3S5qakubn3WplmrpfyjBeXlEEX8Cxlki/eclxM42DLeelDz/W\n9xi5r/+8IstpSfW6NDenxtNfc+LaGkXiVqEx5gtIbiWkpV396plnulrOozP3aPSOPao9fbhrzNPq\n2GOeU2tcurYGkbhVbARfVFuaoBD1d5N8RpqAcd11q0F1xWoQDiYdRQnyJoKmAxtZlBGJW8VG8EV1\npQkKUX83j8CzElRnn1hdy3vFuhbSoCDfr+wJgjEttIyY2P8ZuSH4orLSBIWov5tb4KnX1bppjxpP\nHe4KwnFaSOvKfvzY8BeJPg93WmgJRA2ScXpIHJx2VWUEX1RWmqAQ9XdzDzzBIBxzDLm37Dp/fvCL\nRFgr39T2hlURVo8pW639pl0hP2Q7o7rSZDlH/V1XMqmTZBQHy75tUqM/e9fqt1rbd6x7kRiYPd3v\n85km01e/HgdJGnno/rX53gleYpyddlVRtHxRbWkSm/r9br/WSVGzbQPBsXb2THtHrI6lDz+27nxi\ntfJJwgrVVY/bd2jkofs1OnPPav0nbrWuTLuiB8IJtHwBU8o077L3XGb3rZ973CtGK9+ZOcYuCtSj\nzp/X6Mw9Xd9O1Wqt2FaPLqPlCxjKAC1TVu+6czl7Jtq4bcRWfu5j4a7r1GNr9/VdreDG7BPFfqnD\nKlq+MKto43gGW6tZr1NsU99zMdlqcmUs3HXUU2kRfGFOAbtdjXZ/mnxQ5v0SY+OhTxdoNNRTKdHt\nDGOK2O1qvPvTRHKVK8lIRU0UAwqA4AtjCjmO5+Ac1CK+xACIh25nmFPU8SnHuvXKNHYMoD+CL8xy\nLJAVUlFfYmBf3rkBSIzgC7iIlxgMU8AER6xhzBdwCbvOtFEPQ5EbUGwEX8AVrmQ55416iKSQCY5Y\nRfAFHEFLpo16iMjBTH1ER/AFHEFLpo16iIG52IVFwhXgiiRZzmXMdiXbGxVAyxdwSZyWTJnHRl1o\n0ZH0hQwRfIEsZfgATzw2SlAZrswvNnACwRfISsYP8HVjo9smhwdVgkokJH0hawRfICOZP8CD2a6z\n+zQ6c7dG77pNmp4ODaoElWhI+kLWCL4wh+7MLlYe4J2x0drZM6tBVfPzoUGVoKJo9ynTeJAxsp1h\nBkvdrWcxaze4GYOmpsKDatUziePcpyzxiQzR8oURdGeGsJW1G2ipaW5u8Oe5kEmcE+5TuILgCyPo\nznRAhYNqVNyncAXdzjCj6t2ZKAbuUziC4AtzGCNDEXCfwgF0OyM/cbKjyaQGUCIEX+QjzmIPLAwB\noGQIvlXjSAsyTtZppJ915LwAIAqCb5U41IKMk3U69GebTWl62onzAoAoSLiqkH4tyNwST+JknQ75\n2Zp/Qpqfb/877/NCOZVx60bkipZvhTg3xzHOvNQBP9vydklTU+1/u3BecF/MZD9XeoxQHrR8q6Ss\ncxzrdWluTo2nv1au80I2Yi6F6lSPEUqDlm/VlHUVpLKeF4yLu8Skcz1GKAWCL6rNZpY0GdlOiB1M\n2eEIGaDbGdVlcycmdn1yR5Lhl7xWxSLRq7Ro+aKybO5ww246jinCMAWJXqVG8EVl2RzLY9wQcfHC\nVm50O6O6bGZ/lzXTHJlZeWFbGargha1cCL6oNptjeeymgzh4YSs1gi8AuIoXttJizBcAAMsIvgAA\nWEbwRTZYUAIAQiUa8/U870ckfVLSZZI2S3rQ9/2vmCwYCowFJQBgoKQt3wclHfB9/2ZJ/0rSHxor\nEQqP+YkAMFjSbOdHJV0IHOOHZoqDMmB+IgAMNjT4ep53r6QHev7vd/u+P+d53j9Wu/v5/iwKh4Ji\nfiJYkxgYaMPy8nKiX/Q8742SPi3p3/i+/4VhP99qXVyu1TYm+iwABdJsStPT0vy8NDUlzc0RgFFV\nG8K+kTTh6g2SPiPp533f/3qU32k0fpDko7qMjY1ocXEp9XHKgvpYQ12sybsuakfnNDo/3/5ifl6N\np7+W60IRedeHS6iLblnXx9jYSOj3kiZcfVDSayR9xPO8Q57nfT7hcQCUDJtIAMMlavn6vv920wUB\nUBJJxvwZI0bFsLYzAPPirEnMvHBUECtcAchV6LxwVklDiRF8AeSq7xhxpzU8etdtGr3zFgIwSodu\nZwD56jNGXDs6t641zNZ6KBNavgDytzJG3BnrJWMaZUfLF4B7WCUNJUfLF4CbelrDhUXiGPog+AK2\n8BCuHhLHEILgC9jAQ7iS2F4TYQi+gAU8hKuJxDGEIeEKsIA9jiuKxDGEIPgCNvAQrq44S22iMgi+\ngC08hAF0MOYLAIBlBF8AACwj+MIe5rkCgCSCL2xhnisArCL4wgrmuQLAGoIvrGCxAQBYw1Qj2ME8\nVwBYRfCFPcxzBQBJdDsDAGAdwRcAAMsIvgAAWEbwBQDAMoIvAACWEXwBALCM4AsAgGUEXwAALCP4\nAgBgGcEXAADLCL5AFti7GMAABF/ANPYuBjAEwRcwjL2LAQxD8AWCDHQXs3cxgGHYUhBY0ekurj17\nUq1rd6rx5KFk+w6zdzGAIWj5Ah1Gu4tX9i4m8ALog+ALdNBdDMAWup2BFXQXA7CE4AsErXQXA0CG\n6HYGAMAygi8AAJYRfAEAsIzgCwCAZQRfAAAsI/gCAGAZwRcAAMsIvgAAWEbwBQDAMoIvAACWEXwB\nALCM4AsAgGUEXwAALCP4AgBgGcEXAADLCL4AAFhG8AUAwDKCLwAAlhF8AQCwjOALAIBlBF8AACwj\n+AIAYFktyS95nneppE9JulzSS5Le5fv+osmCAQBQVklbvr8k6ajv+z8j6dOS3meuSAAAlFui4Ov7\n/mOSPtD5clLSOWMlglnNpmpH56RmM++SAAA6NiwvLw/8Ac/z7pX0QM///W7f9+c8zzso6Y2S7vB9\n//ig47RaF5drtY2pCouYmk1pelqan5empqS5Oalez7tUAFAVG0K/MSz4DuN53pSkfb7vbx/0c4uL\nS+k+SNLY2IgWF5fSHqY0htVH7eicRu+6bfXrxhcOqPXmaRtFs457Yw110Y36WENddMu6PsbGRkKD\nb6JuZ8/zftPzvHd1vnxJ0sUkx0G2Wt4uta7d2f73tTvV8nblXCIAgJQw21nSJyT9aadLeqOkd5sr\nEoyp19V48pBq/ol24KXLGQCckCj4+r5/TtI/M1wWZKFeL21XMwAUFYtsAABgGcEXAADLCL4AAFhG\n8AUAwDKCLwAAlhF8AQCwjOALAIBlBF8AACwj+AIAYBnBFwAAywi+AABYRvAFAMAygi8AAJYRfAEA\nsIzgCwCAZQRfAAAs27C8vJx3GQAAqBRavgAAWEbwBQDAMoIvAACWEXwBALCM4AsAgGUEXwAALKvl\nXYA4PM+7VNKnJF0u6SVJ7/J9fzHfUuXD87wfkfRJSZdJ2izpQd/3v5JvqfLned47JL3T9/1/nndZ\nbPM87xJJH5X0JkkXJP2i7/un8i1VvjzPu0HSh3zfvyXvsuTJ87xNkj4h6WpJWyT9O9/3/yLXQuXE\n87yNkv4vSZ6ki5Le7fv+advlKFrL95ckHfV9/2ckfVrS+3IuT54elHTA9/2bJf0rSX+Yb3Hy53ne\nRyR9UMW7r035WUmv8X3/pyT9hqT/mHN5cuV53q9L+hNJr8m7LA74F5K+13l23iXp8ZzLk6e3SZLv\n+/+TpN+W9EgehSjUQ8r3/cckfaDz5aSkczkWJ2+PSvrjzr9rkn6YY1lc8beSfjXvQuToJkl/JUm+\n7x+R9JZ8i5O705Jm8i6EIz4j6f2Br1t5FSRvvu9/TtJ7Ol9epZziiLPdzp7n3SvpgZ7/+92+7895\nnndQ0hsl3WG/ZPYNqYt/rHb38/32S5aPAfXx/3ied0sORXLFZZK+H/j6oud5Nd/3K/mg9X3///U8\n7+q8y+EC3/ebkuR53oikz6ravYbyfb/led6fSnqHpJ/LowzOBl/f9z8u6eMh37vV87wpSfskbbda\nsByE1YXneW9Uu/v93/i+/yXrBcvJoHuj4l6UNBL4+pKqBl6s53nehKQ/l/RR3/c/lXd58ub7/r/0\nPO9hSV/1PO8Nvu+/ZLMPy3AAAADpSURBVPPzC9Xt7Hneb3qe967Oly+pPVheSZ7nvUHtrqR/7vv+\nF/IuD5zwZUl7JcnzvBsl/bd8iwNXeJ43LumvJT3s+/4n8i5PnjzPe5fneb/Z+fIHkl5VDrHE2ZZv\niE9I+tNOt+NGSe/OuTx5+qDaiSQf8TxPkr7v+/7b8y0Scvbnku7wPO9vJW1Qtf8+0O23JI1Ker/n\neStjv3f5vn8+xzLlZVbSf/I877CkTZLu933fes4MuxoBAGBZobqdAQAoA4IvAACWEXwBALCM4AsA\ngGUEXwAALCP4AgBgGcEXAADLCL4AAFj2/wN/whHcMpGQwAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1161b26a0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(8, 8))\n",
"plt.plot(x, y, 'r.', label='random number')\n",
"plt.legend(loc=0);"
]
},
{
"cell_type": "code",
"execution_count": 180,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAW8AAAD3CAYAAADSftWOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAADZJJREFUeJzt3W+MXOdVx/HvxmsnuJpYWzEtqhQS\nWtBBlaoigtRAcL0ySYpRg0kpvIga2hhaCflFQwOJXTkVSEV1UWoIKhGRk63DnwhUpy4VlWmkWnJd\nCgFKKtXCnKihiHfVKlqHrd1SOV5e7FhaO+v5Pztzxt+PZGnuvb4z5+zO/ObZZ+e5O7OysoIkqZbr\nxl2AJKl3hrckFWR4S1JBhrckFWR4S1JBsxvxIIuLyz1/pGVubitLS+dHUc6Gs5fJMy19wPT0Mi19\nwPB6aTYbM1c7NrEj79nZTeMuYWjsZfJMSx8wPb1MSx+wMb1MbHhLkq7O8JakggxvSSrI8Jakggxv\nSSrI8JakggxvSSrI8JakggxvSSpoQ5bHS53sOXhioPMX9u0cUiVSDY68Jakgw1uSCnLaRFNhkGkX\np1xUUVfhHRH7gV8GtgCPAyeBI8AKcBrYm5kXR1SjJOkKHadNImIe+DngdmAHcBNwCDiQmduBGWD3\nCGuUJF2hm5H3u4BvAseAG4HfAz7I6ugb4DhwV+v4uubmtvZ1fdtms9HzOZPKXibXNPQzDT3A9PQB\no++lm/D+YeBm4N3AjwFfAK7LzEt/HWcZ2NbuDvr5ixLNZoPFxeWez5tE9jLZqvczLd+TaekDhtdL\nuzeAbsL7ZeA/M/MHQEbE91mdOrmkAZwdqEJJUk+6+ajgV4FfjIiZiHgT8Drgy625cIBdwKkR1SdJ\nWkfHkXdm/n1EvBP4F1bDfi/wbeBwRGwBzgBHR1qlJOkyXX1UMDMfWmf3jiHXIknqkissJakgw1uS\nCjK8Jakgw1uSCjK8Jakgw1uSCjK8Jakgw1uSCjK8Jakgw1uSCjK8Jakgw1uSCjK8Jakgw1uSCurq\nkrBSN/YcPDHuEqRrhiNvSSrI8JakggxvSSrI8JakggxvSSrI8JakggxvSSrI8JakggxvSSrIFZa6\n5g2yMnRh384hViJ1r6vwjogXgFdam98GngAeAy4Az2XmH4ymPEnSejqGd0TcAJCZ82v2fQP4VeC/\ngC9GxE9n5r+PqkhJ0uW6GXm/HdgaEc+1/v/vA9dn5ksAEfEl4BcAw1uSNkg34X0eeBR4EvgJ4Dhw\nds3xZeDN7e5gbm4rs7Obei6u2Wz0fM6kspfpNClfi0mpY1DT0geMvpduwvtF4FuZuQK8GBGvAK9f\nc7zB5WH+GktL53surNlssLi43PN5k8heptckfC2m5XsyLX3A8Hpp9wbQzUcF9wCfAoiINwFbgXMR\n8ZaImAHeBZwauEpJUte6GXk/BRyJiK8CK6yG+UXgr4FNrH7a5PnRlShJulLH8M7MHwD3rnPotuGX\nI0nqhissJakgw1uSCjK8Jakgw1uSCjK8Jakgw1uSCjK8Jakgw1uSCjK8Jakgw1uSCjK8Jakgw1uS\nCjK8Jakgw1uSCjK8Jakgw1uSCjK8Jakgw1uSCjK8Jakgw1uSCjK8Jakgw1uSCpoddwFSZXsOnuj7\n3IV9O4dYia41jrwlqSDDW5IKMrwlqaCu5rwj4g3A14E7gQvAEWAFOA3szcyLoypQkvRaHUfeEbEZ\neAL4XmvXIeBAZm4HZoDdoytPkrSebkbejwJ/Duxvbd8KnGzdPg7cBRxrdwdzc1uZnd3Uc3HNZqPn\ncyaVvehKw/w6Tsv3ZFr6gNH30ja8I+IDwGJmfikiLoX3TGautG4vA9s6PcjS0vmeC2s2GywuLvd8\n3iSyF61nWF/HafmeTEsfMLxe2r0BdBp57wFWIuIO4KeAvwDesOZ4Azg7aIGSpN60nfPOzHdm5o7M\nnAe+AfwGcDwi5lv/ZRdwaqQVSpJeo58Vlg8ChyNiC3AGODrckqRrg6szNYiuw7s1+r5kx/BLkSR1\ny0U6klSQ4S1JBRneklSQ4S1JBRneklSQ4S1JBRneklSQ4S1JBRneklSQ4S1JBRneklSQ4S1JBRne\nklSQ4S1JBRneklSQ4S1JBRneklSQ4S1JBRneklSQ4S1JBRneklRQ1389XnXsOXhi3CVIGjFH3pJU\nkOEtSQUZ3pJUUMc574jYBBwGAngVuB+YAY4AK8BpYG9mXhxdmZKktboZed8NkJm3Ax8DDrX+HcjM\n7awG+e6RVShJeo2O4Z2Znwc+1Nq8GfgOcCtwsrXvOHDHSKqTJK2rq48KZuaFiHgauAd4L/DuzFxp\nHV4GtrU7f25uK7Ozm3ourtls9HzOpJqmXjR+Vz6fpuX5NS19wOh76fpz3pn5/oh4GHge+KE1hxrA\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1161c3278>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.hist(x, bins=20);"
]
},
{
"cell_type": "code",
"execution_count": 181,
"metadata": {},
"outputs": [],
"source": [
"csum = [x[0]]\n",
"for i in range(1, len(x)):\n",
" csum.append(x[i] + csum[i - 1])"
]
},
{
"cell_type": "code",
"execution_count": 182,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x108125a20>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(csum);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Numerical Operations"
]
},
{
"cell_type": "code",
"execution_count": 183,
"metadata": {},
"outputs": [],
"source": [
"import math\n",
"import statistics"
]
},
{
"cell_type": "code",
"execution_count": 184,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"20"
]
},
"execution_count": 184,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"4 * 5"
]
},
{
"cell_type": "code",
"execution_count": 185,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.7320508075688772"
]
},
"execution_count": 185,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"3 ** 0.5"
]
},
{
"cell_type": "code",
"execution_count": 186,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.0986122886681098"
]
},
"execution_count": 186,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"math.log(3)"
]
},
{
"cell_type": "code",
"execution_count": 187,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.1411200080598672"
]
},
"execution_count": 187,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"math.sin(3)"
]
},
{
"cell_type": "code",
"execution_count": 188,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"54.598150033144236"
]
},
"execution_count": 188,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"math.exp(4)"
]
},
{
"cell_type": "code",
"execution_count": 189,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.7320508075688772"
]
},
"execution_count": 189,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"math.sqrt(3)"
]
},
{
"cell_type": "code",
"execution_count": 190,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[-0.7720570053225426,\n",
" -0.7388026760048504,\n",
" -1.5651339831362587,\n",
" 0.4802485909263546,\n",
" -0.38668808508035285]"
]
},
"execution_count": 190,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x[:5]"
]
},
{
"cell_type": "code",
"execution_count": 191,
"metadata": {},
"outputs": [],
"source": [
"sl = [math.sin(number) for number in x]"
]
},
{
"cell_type": "code",
"execution_count": 192,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[-0.6976105108865696,\n",
" -0.6734032423899983,\n",
" -0.9999839689749782,\n",
" 0.46199966016035,\n",
" -0.3771231155087461]"
]
},
"execution_count": 192,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sl[:5]"
]
},
{
"cell_type": "code",
"execution_count": 193,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-29.54447855707872"
]
},
"execution_count": 193,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sum(x)"
]
},
{
"cell_type": "code",
"execution_count": 194,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-24.08949883997174"
]
},
"execution_count": 194,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sum(sl)"
]
},
{
"cell_type": "code",
"execution_count": 195,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-0.05908895711415744"
]
},
"execution_count": 195,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sum(x) / len(x) # mean value"
]
},
{
"cell_type": "code",
"execution_count": 196,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-0.048178997679943464"
]
},
"execution_count": 196,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"statistics.mean(sl)"
]
},
{
"cell_type": "code",
"execution_count": 197,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-0.05908895711415743"
]
},
"execution_count": 197,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"statistics.mean(x)"
]
},
{
"cell_type": "code",
"execution_count": 198,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.0059073121521374"
]
},
"execution_count": 198,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"statistics.stdev(x)"
]
},
{
"cell_type": "code",
"execution_count": 199,
"metadata": {},
"outputs": [],
"source": [
"N = 500"
]
},
{
"cell_type": "code",
"execution_count": 200,
"metadata": {},
"outputs": [],
"source": [
"rn = [random.gauss(0, 1) for _ in range(N)]"
]
},
{
"cell_type": "code",
"execution_count": 201,
"metadata": {},
"outputs": [],
"source": [
"sub = [number for number in rn if number > 0.5]"
]
},
{
"cell_type": "code",
"execution_count": 202,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[1.4077362847639932,\n",
" 0.82625216757337,\n",
" 0.667471889321759,\n",
" 1.783756189032484,\n",
" 1.1245508965658202]"
]
},
"execution_count": 202,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sub[:5]"
]
},
{
"cell_type": "code",
"execution_count": 203,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.322"
]
},
"execution_count": 203,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(sub) / N"
]
},
{
"cell_type": "code",
"execution_count": 204,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"1.1650361663785402"
]
},
"execution_count": 204,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"statistics.mean(sub)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Estimating a Numerical Integral by Simulation"
]
},
{
"cell_type": "code",
"execution_count": 205,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"47.209093934213584"
]
},
"execution_count": 205,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"math.exp(4) - math.exp(2)"
]
},
{
"cell_type": "code",
"execution_count": 206,
"metadata": {},
"outputs": [],
"source": [
"a = 2\n",
"b = 4"
]
},
{
"cell_type": "code",
"execution_count": 207,
"metadata": {},
"outputs": [],
"source": [
"rn = [(b - a) * random.random() + 2 for _ in range(100000)]"
]
},
{
"cell_type": "code",
"execution_count": 208,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[3.245095779020102,\n",
" 3.8876713556430813,\n",
" 3.7099634212691974,\n",
" 3.61106877615054,\n",
" 3.181941104636926]"
]
},
"execution_count": 208,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rn[:5]"
]
},
{
"cell_type": "code",
"execution_count": 209,
"metadata": {},
"outputs": [],
"source": [
"exp_values = [math.exp(n) for n in rn]"
]
},
{
"cell_type": "code",
"execution_count": 210,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"23.591615587277886"
]
},
"execution_count": 210,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"av = statistics.mean(exp_values)\n",
"av"
]
},
{
"cell_type": "code",
"execution_count": 211,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"47.18323117455577"
]
},
"execution_count": 211,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"av * (b - a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<img src='http://hilpisch.com/tpq_logo.png' width=\"300px\" align=\"right\">"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment