{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Deep Learning Course 2021\n",
"\n",
"# P1: Practical (Python + Numpy + Matplotlib)\n",
"\n",
"This Jupyter Notebook consists of the following parts:\n",
"1. [**Introduction to Jupyter**](#intro_jupyter)\n",
"2. [**Introduction to Python**](#intro_python)\n",
" 1. [Basic Notions](#basic_notions)\n",
" 1. [Expressions](#expressions)\n",
" 2. [Instructions](#instructions)\n",
" 3. [Definitions](#definitions)\n",
" 1. [Functions](#functions)\n",
" 2. [Classes](#classes)\n",
" 2. [Structured types in Python](#structured_types)\n",
" 1. [Strings](#strings)\n",
" 2. [Lists](#lists)\n",
" 3. [Tuples](#tuples)\n",
" 4. [Dictionaries](#dictioneries)\n",
" 5. [Structured types and for loops](#for)\n",
" 3. [Modules and namespaces in Python](#modules)\n",
"3. [**Numpy**](#numpy)\n",
" 1. [Creating arrays](#creating_arrays)\n",
" 2. [Basic operations](#basic_operations)\n",
" 3. [Indexing](#indexing)\n",
" 4. [Examples](#examples)\n",
"4. [**Matplotlib**](#matplotlib)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"# Introduction to Jupyter\n",
"\n",
"A jupyter notebook document has the .ipynb extension and is composed of a number of cells. In cells, you can write program code, make marked and unmarked notes. These three types of cells correspond to:\n",
" \n",
" 1. code\n",
" 2. markdown\n",
" 3. raw"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To work with the contents of a cell, use *Edit mode* (turns on by pressing **Enter** after selecting a cell), and to navigate between cells, use *command mode* (turns on by pressing **Esc**).\n",
"\n",
"The cell type can be set in command mode either using hotkeys (**y** to code, **m** to markdown, **r** to edit raw text), or in the menu *Cell -> Cell type* ... "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:33.931951Z",
"start_time": "2021-10-27T20:55:33.929263Z"
}
},
"outputs": [],
"source": [
"# cell with code\n",
"a = 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## cell with markdown text"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"cell with raw text"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"After filling the cell, you need to press *Shift + Enter*, this command will process the contents of the cell: \n",
"interpret the code or lay out the marked-up text."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:33.982241Z",
"start_time": "2021-10-27T20:55:33.979690Z"
}
},
"outputs": [],
"source": [
"a = 1"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:33.990269Z",
"start_time": "2021-10-27T20:55:33.987024Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\n"
]
}
],
"source": [
"print(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## A few words about layout\n",
"[Here](https://athena.brynmawr.edu/jupyter/hub/dblank/public/Jupyter%20Notebook%20Users%20Manual.ipynb) is not a big note on the Markdown markup language. It allows you to:\n",
"\n",
"0. Make ordered lists\n",
"1. #to do ##headers ###different levels\n",
"3. Highlight *text* when **necessary**\n",
"4. Add [links](https://athena.brynmawr.edu/jupyter/hub/dblank/public/Jupyter%20Notebook%20Users%20Manual.ipynb)\n",
"\n",
"* Create unordered lists\n",
"\n",
"Make inserts with LaTex:\n",
" \n",
"$$\n",
"\\sin(-\\alpha)=-\\sin(\\alpha) \\\\\n",
"\\arccos(x)=\\arcsin(u) \\\\\n",
"\\log_n(n)=1 \\\\\n",
"\\tan(x) = \\frac{\\sin(x)}{\\cos(x)}\n",
"$$\n",
"\n",
"You can also insert images:\n",
"\n",
"\n",
"\n",
"
\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"# Introduction to Python\n",
"\n",
"**Python** is a high-level programming language that found wide applicability in artificial intelligence, machine learning and data science thanks to the wide range of modules that are available. \n",
"\n",
"We provide a quick primer of the language that is (hopefully) enough to get you started in your way to more complex programming. If you have prior programming experience, you will find that the language is quite accessible and easy to work with.\n",
"\n",
"\n",
"\n",
"## Basic notions\n",
"\n",
"Python code comes in the form of _scripts_ that are typically not _compiled_, but _interpreted_. A script is a sequence of _commands_ which are intepreted sequentially. You can think of the code blocks in a Jupyter notebook as forming a Python script, consisting of the sequence of commands in the code blocks in the order you evaluate them.\n",
"\n",
"There are three types of commands in Python: **expressions**, **instructions**, and **definitions**. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"### Expressions\n",
"\n",
"_Expressions_ are commands that have a _value_. When Python interprets an expression it returns the corresponding value. Expressions can correspond to _constants_ (such as numbers, logical values, or strings), _compound expressions, function evaluations,_ or _names_. "
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-26T13:53:13.794981Z",
"start_time": "2021-10-26T13:53:13.789248Z"
}
},
"source": [
"#### Constant expressions"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.035256Z",
"start_time": "2021-10-27T20:55:34.026421Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"12345"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Integer number\n",
"12345"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.042105Z",
"start_time": "2021-10-27T20:55:34.038007Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"1.2"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Floating point number\n",
"1.2"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.049071Z",
"start_time": "2021-10-27T20:55:34.045265Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'Hello, world!'"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# A string (strings are delimited either by ' ' or by \" \")\n",
"'Hello, world!'"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.055580Z",
"start_time": "2021-10-27T20:55:34.051894Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Logical values\n",
"True"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The character `#` marks a comment: Python ignores everything following that character. Note that, when you evaluate a cell where the last command is an expression, you get the value of the expression as a result.\n",
"\n",
"#### Compound expressions\n",
"\n",
"Let's now see examples of _compound expressions,_ which typically consist of operations involving simpler expressions."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.062305Z",
"start_time": "2021-10-27T20:55:34.058682Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Operations with numbers\n",
"1 + 2"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.068855Z",
"start_time": "2021-10-27T20:55:34.064790Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"-1.0"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2 - 3."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.077288Z",
"start_time": "2021-10-27T20:55:34.072728Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"2.5"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"5 / 2"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.084499Z",
"start_time": "2021-10-27T20:55:34.080030Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"-2.2857142857142856"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2 - (3 + 4.5 * 6) / 7"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.091529Z",
"start_time": "2021-10-27T20:55:34.087080Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'Hello, world!'"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Operations with strings\n",
"'Hello,' + ' ' + 'world!'"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.099132Z",
"start_time": "2021-10-27T20:55:34.094827Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'Hello! Hello! Hello! '"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"'Hello! ' * 3"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.105455Z",
"start_time": "2021-10-27T20:55:34.101810Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Logical operations\n",
"not (True and False)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.112220Z",
"start_time": "2021-10-27T20:55:34.108324Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"True or False"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.118386Z",
"start_time": "2021-10-27T20:55:34.114697Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2 > 3.0"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.124631Z",
"start_time": "2021-10-27T20:55:34.120549Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"'abc' == 'a'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Function evaluation expressions"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.131657Z",
"start_time": "2021-10-27T20:55:34.127499Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"3.0"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Function: abs (computes the absolute value of a number)\n",
"abs(-3.)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.137851Z",
"start_time": "2021-10-27T20:55:34.134286Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Function: len (returns the length of a structured type - in this case, a string)\n",
"len('abc')"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:55:34.143869Z",
"start_time": "2021-10-27T20:55:34.140256Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"5"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Function: max (returns the maximum of its arguments)\n",
"max(1, 2, 3, 4, 5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A useful function to get data from the keyboard is `input`. This function returns as its value a _string_ corresponding to the sequence of keys inserted by the user in the keyboard. For example:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:03.233878Z",
"start_time": "2021-10-27T20:55:34.146297Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"abc\n"
]
},
{
"data": {
"text/plain": [
"'abc'"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"input()"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-26T14:21:34.819005Z",
"start_time": "2021-10-26T14:21:34.812813Z"
}
},
"source": [
"You can also pass it as a parameter a string to be printed before waiting for the user's input. You could have an interaction like the following:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:05.586346Z",
"start_time": "2021-10-27T20:56:03.236774Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Please type something: abc\n"
]
},
{
"data": {
"text/plain": [
"'abc'"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"input('Please type something: ')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Name expressions\n",
"\n",
"To provide an example of a name expression, let's first talk about _names._ You can think of names as \"variables\" in Python, and these are defined through the _assignment instruction,_ using the symbol `=`. You create a name by _assigning it to the value of an expression._ For example, if you write:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:05.597582Z",
"start_time": "2021-10-27T20:56:05.592734Z"
}
},
"outputs": [],
"source": [
"a = 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"you are assigning the name `a` to the value of the expression `2`. Names can be any sequence of letters, numbers and underscore not starting with a number. For example, `abc123_` and `_123abc` are valid names, but `123abc` is not. For example, if you try to run the cells below, you will get an error in the third cell."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:05.606667Z",
"start_time": "2021-10-27T20:56:05.603596Z"
}
},
"outputs": [],
"source": [
"abc123_ = 1"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:05.613405Z",
"start_time": "2021-10-27T20:56:05.609650Z"
}
},
"outputs": [],
"source": [
"_123abc = 2"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:05.621550Z",
"start_time": "2021-10-27T20:56:05.617017Z"
}
},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "invalid syntax (, line 1)",
"output_type": "error",
"traceback": [
"\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m 123abc_ = 3\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
]
}
],
"source": [
"123abc_ = 3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that an assignment _is not an expression_ and, as such, it has no value. We can finally provide examples of name expressions."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:16.948160Z",
"start_time": "2021-10-27T20:56:16.943931Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The value of a name expression is the value of the expression assigned to the name.\n",
"\n",
"Putting everything together, you could have the following interaction:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.360962Z",
"start_time": "2021-10-27T20:56:16.958881Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"What's your name? Andre\n",
"How old are you, Andre? 43\n"
]
},
{
"data": {
"text/plain": [
"'Andre, in 10 years you will be 53'"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"name = input(\"What's your name? \")\n",
"age = input(\"How old are you, \" + name + \"? \")\n",
"name + \", in 10 years you will be \" + str(int(age) + 10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"### Instructions\n",
"\n",
"_Instructions_ are commands that do not have a value, and are mostly used to control the flow of a program.\n",
"\n",
"For example, when you want to write something to the screen, you can use the `print` instruction. \n",
"`print` receives as arguments any sequence of expressions (separated by commas) and prints them on the screen. \n",
"For example, you can have:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.369258Z",
"start_time": "2021-10-27T20:56:26.363357Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"12345 1.2 Hello, world! True\n",
"3 -1.0 2.5 -2.2857142857142856\n",
"Hello, world! Hello! Hello! Hello! \n",
"True True False False\n",
"3.0 3 5\n",
"2\n"
]
}
],
"source": [
"print(12345, 1.2, 'Hello, world!', True)\n",
"\n",
"print(1 + 2, 2 - 3., 5 / 2, 2 - (3 + 4.5 * 6) / 7)\n",
"\n",
"print('Hello,' + ' ' + 'world!', 'Hello! ' * 3)\n",
"\n",
"print(not (True and False), True or False, 2 > 3.0, 'abc' == 'a')\n",
"\n",
"print(abs(-3.), len('abc'), max(1, 2, 3, 4, 5))\n",
"\n",
"print(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can also add an argument `sep=`, to have a separator between the values (space by default), and `end=`, to append a certain string after the last value (newline by default):"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.377129Z",
"start_time": "2021-10-27T20:56:26.373198Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"hello_world_!\n",
"\n",
"hello\n",
"world\n",
"!\n"
]
}
],
"source": [
"print('hello', 'world', '!', sep='_', end='\\n\\n')\n",
"\n",
"print('hello', 'world', '!', sep='\\n')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that each `print` statement prints to a new line. You can also distinguish that the previous expressions are outputs to the screen and not returned values as there is no `Out[XX]` on the left of the cell. \n",
"\n",
"Other type of instructions include conditionals:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.385614Z",
"start_time": "2021-10-27T20:56:26.381122Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2 is larger than 1.\n"
]
}
],
"source": [
"if a > 1:\n",
" print(a, 'is larger than 1.')\n",
"elif a == 1:\n",
" print(a, 'is equal to 1.')\n",
" print('This is the best possible case!')\n",
"else: \n",
" print(a, 'is smaller than or equal to 1.')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that, inside each condition in the `if` statement is a block of instructions that is _indented._ Indentation, in Python, is used to delimit blocks of instructions (much like curly brackets in C), and Python will throw an error if the code is not properly indented.\n",
"\n",
"Other type of instructions are loops:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.396174Z",
"start_time": "2021-10-27T20:56:26.388429Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 radians correspond to 0.0 degrees.\n",
"0.5 radians correspond to 14.32 degrees.\n",
"1.0 radians correspond to 28.65 degrees.\n",
"1.5 radians correspond to 42.97 degrees.\n",
"2.0 radians correspond to 57.3 degrees.\n",
"2.5 radians correspond to 71.62 degrees.\n",
"3.0 radians correspond to 85.95 degrees.\n",
"3.5 radians correspond to 100.27 degrees.\n",
"4.0 radians correspond to 114.59 degrees.\n",
"4.5 radians correspond to 128.92 degrees.\n",
"5.0 radians correspond to 143.24 degrees.\n",
"5.5 radians correspond to 157.57 degrees.\n",
"6.0 radians correspond to 171.89 degrees.\n"
]
}
],
"source": [
"a = 0\n",
"\n",
"while a < 2 * 3.1415: \n",
" print(a, \"radians correspond to\", round(a * 90 / 3.1415, 2), \"degrees.\")\n",
" a = a + 0.5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"### Definitions\n",
"\n",
"Definitions are used to define new functions and classes."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"#### Functions\n",
"\n",
"Functions are defined using the primitive _def._ An example of a function that returns the square of a number is:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.406772Z",
"start_time": "2021-10-27T20:56:26.401989Z"
}
},
"outputs": [],
"source": [
"def square(x):\n",
" return x ** 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that the body of the function is also indented. Python uses the indentation to figure out where the function definition ends.\n",
"\n",
"As soon as we define a function, we can use it. For example, if the function returns a value (as is the case of the function `square` above) we can use it in expressions:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.427890Z",
"start_time": "2021-10-27T20:56:26.411565Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"11"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2 + square(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A function that computes the mean of two numbers could be:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.446242Z",
"start_time": "2021-10-27T20:56:26.438573Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"2.5"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def mean(x, y):\n",
" return (x + y) / 2\n",
"\n",
"mean(2, 3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that Python is dynamically typed. The same function can work with arguments of different types, as long as the commands in it make sense. Consider, for example, the following function:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.458374Z",
"start_time": "2021-10-27T20:56:26.452187Z"
}
},
"outputs": [],
"source": [
"def add(x, y):\n",
" return x + y"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-26T14:34:59.138673Z",
"start_time": "2021-10-26T14:34:59.134831Z"
}
},
"source": [
"We can have the natural interaction:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.466103Z",
"start_time": "2021-10-27T20:56:26.461404Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"5"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"add(2, 3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"However, we can also have the maybe not so natural interaction:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.474139Z",
"start_time": "2021-10-27T20:56:26.468699Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'abcdef'"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"add('abc', 'def')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Although we do not go over that topic in this brief tutorial, Python allows for functional programming. If you are interested, you may find more [here](https://realpython.com/python-functional-programming/).\n",
"\n",
"Functions can access names defined in outer scopes. However, if an assignment is made inside a function using a name that exists outside, it is treated as a new name. For example, you can have the following interaction:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.482854Z",
"start_time": "2021-10-27T20:56:26.477816Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Value of a before calling the functions: 2\n"
]
}
],
"source": [
"def example1():\n",
" print('Value of a inside function \"example1\":', a)\n",
"\n",
"def example2():\n",
" a = 3\n",
" print('Value of a inside function \"example2\":', a)\n",
" \n",
"a = 2\n",
"print('Value of a before calling the functions:', a)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Value of a inside function \"example1\": 2\n",
"Value of a inside function \"example2\": 3\n",
"Value of a after calling the functions: 2\n"
]
}
],
"source": [
"example1()\n",
"example2()\n",
"\n",
"print('Value of a after calling the functions:', a)"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-26T14:45:58.133250Z",
"start_time": "2021-10-26T14:45:58.129085Z"
}
},
"source": [
"\n",
"#### Classes\n",
"\n",
"To define a new class, we use the primitive `class`. The first method to be defined is tipically the method `__init__` which is called with the constructor of the class. An example of a class definition for complex numbers could be:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.493182Z",
"start_time": "2021-10-27T20:56:26.485403Z"
}
},
"outputs": [],
"source": [
"class complex():\n",
" def __init__(self, r, i):\n",
" self.r = r\n",
" self.i = i\n",
" \n",
" def real(self):\n",
" return self.r\n",
" \n",
" def imag(self):\n",
" return self.i\n",
" \n",
" def add(self, c):\n",
" return complex(self.r + c.real(), self.i + c.imag())\n",
" \n",
" def __str__(self):\n",
" return str(self.r) + ' + ' + str(self.i) + ('i')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the definition above, `__init__` is typically used to initialize all data fields of the class (in this case, `self.r` and `self.i`), and the remaining functions correspond to the methods of the class. All methods receive, as a first parameter, the current object (`self`). \n",
"\n",
"We can now have the interaction:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.503013Z",
"start_time": "2021-10-27T20:56:26.497111Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2 + 3i\n",
"4 + 5i\n",
"6 + 8i\n"
]
}
],
"source": [
"a = complex(2, 3)\n",
"b = complex(4, 5)\n",
"print(a)\n",
"print(b)\n",
"print(a.add(b))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As a curiosity, the special method `__str__`, which must return a string, is called by `print` when writing to the screen an instance of a class. You can know more about object-oriented programming in Python [here](https://realpython.com/python3-object-oriented-programming/).\n",
"\n",
"\n",
"## Structured types in Python\n",
"\n",
"Let's now go over 4 of the most used structured types in Python. Structured types are composed of elements that you can access individually."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"### Strings\n",
"\n",
"The first structured type, strings, you've already met. A _string_ is an _immutable_ structured type consisting only of characters. You can recognize a string since it is delimited by `' '` or `\" \"`. Below you can find some examples of operations you can perform on strings:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"abcdefghiabcdefghi\n",
"abcdefghiabcdefghi\n",
"9\n"
]
}
],
"source": [
"string = 'abcdefghi'\n",
"\n",
"# Concatenation\n",
"print(string + string)\n",
"\n",
"# Replication\n",
"print(2 * string)\n",
"\n",
"# Length\n",
"print(len(string))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`Note that indices in Python are 0-based (they are 1-based in Matlab)`"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"a\n",
"d \n",
"\n",
"i\n",
"e\n"
]
}
],
"source": [
"# Indexation\n",
"print(string[0]) # Note that indices start in 0!\n",
"print(string[3], '\\n')\n",
"\n",
"print(string[-1]) # Negative indices count from the end of the string\n",
"print(string[-5])"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"abc\n",
"abcdefghi\n",
"abc\n",
"bcdefgh\n"
]
}
],
"source": [
"print(string[0:3]) # You can have slices, also\n",
"print(string[0:])\n",
"print(string[:3])\n",
"print(string[1:-1])"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.517593Z",
"start_time": "2021-10-27T20:56:26.507152Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n",
"False\n",
"True\n",
"False\n"
]
}
],
"source": [
"# Inclusion\n",
"print('bc' in string) # Returns True if the string 'a' is part of string\n",
"print('bcc' in string)\n",
"\n",
"print('z' not in string) # Returns True if the string 'a' is not part of string\n",
"print('abc' not in string)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"### Lists\n",
"\n",
"The second structured type, _lists,_ consist of _mutable_ sequences of arbitrary elements (including other lists). You can recognize a list since it is delimited by `[ ]`. You can perform on lists all operations that you can perform on tuples and strings. Additionally, since it is a mutable type, you can perform _element assignment._"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.540436Z",
"start_time": "2021-10-27T20:56:26.532247Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"lst + lst: [5.0, 'a', 3.1415, [3, 4], (1, 2), 5.0, 'a', 3.1415, [3, 4], (1, 2)] \n",
"\n",
"2 * lst: [5.0, 'a', 3.1415, [3, 4], (1, 2), 5.0, 'a', 3.1415, [3, 4], (1, 2)]\n",
"2 * [lst]: [[5.0, 'a', 3.1415, [3, 4], (1, 2)], [5.0, 'a', 3.1415, [3, 4], (1, 2)]]\n"
]
}
],
"source": [
"lst = [5., 'a', 3.1415, [3, 4], (1, 2)]\n",
"\n",
"# Concatenation\n",
"print('lst + lst: ', lst + lst, '\\n')\n",
"\n",
"# Replication\n",
"print('2 * lst: ', 2 * lst) # one list \n",
"print('2 * [lst]: ', 2 * [lst]) # list of two lists"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"lst[0]: 5.0\n",
"lst[3]: [3, 4] \n",
"\n",
"lst[-1]: (1, 2)\n",
"lst[-5]: 5.0 \n",
"\n",
"lst[0:3]: [5.0, 'a', 3.1415]\n",
"lst[0:]: [5.0, 'a', 3.1415, [3, 4], (1, 2)]\n",
"lst[:3]: [5.0, 'a', 3.1415]\n",
"lst[1:-1]: ['a', 3.1415, [3, 4]]\n"
]
}
],
"source": [
"# Indexation\n",
"print('lst[0]: ', lst[0]) # Note that indices start in 0!\n",
"print('lst[3]: ', lst[3], '\\n')\n",
"\n",
"print('lst[-1]: ', lst[-1]) # Negative indices count from the end of the list\n",
"print('lst[-5]: ', lst[-5], '\\n')\n",
"\n",
"# Slices\n",
"print('lst[0:3]: ', lst[0:3])\n",
"print('lst[0:]: ', lst[0:])\n",
"print('lst[:3]: ', lst[:3])\n",
"print('lst[1:-1]: ', lst[1:-1])"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n",
"False\n",
"False\n",
"True\n"
]
}
],
"source": [
"# Inclusion\n",
"print('a' in lst) # Returns True if 'a' is an element of the list\n",
"print(1 in lst) \n",
"\n",
"print(5 not in lst) # Returns True if the string 'a' is not an element of the list\n",
"print('abc' not in lst)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"List after assigning first element: [2.0, 'a', 3.1415, [3, 4], (1, 2)]\n"
]
}
],
"source": [
"# Assignment\n",
"lst[0] = 2.\n",
"print('List after assigning first element:', lst)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There are many useful list methods. For more details please see [Python documentation](https://docs.python.org/3/tutorial/datastructures.html).\n",
"\n",
"Here are a few examples:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2.0, 'a', 3.1415, [3, 4], (1, 2), 'hello']\n"
]
}
],
"source": [
"lst.append('hello') # adds an element \n",
"print(lst)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2.0, 'a', 3.1415, [3, 4], (1, 2)]\n",
"[2.0, 'a', [3, 4], (1, 2)]\n"
]
}
],
"source": [
"lst.pop() # removes and returnes last element in the list\n",
"print(lst)\n",
"\n",
"lst.pop(2) # removes item at the given position in the list, and returns it\n",
"print(lst)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"### Tuples\n",
"\n",
"The third structured type, _tuples,_ consist of _immutable_ sequences only arbitrary elements (including other tuples). You can recognize a tuple since it is delimited by `( )`. The operations you can perform on tuples are similar to those you can perform on strings."
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.529469Z",
"start_time": "2021-10-27T20:56:26.520744Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Concatenation: (5.0, 'a', 3.1415, 'z', (1, 2))\n",
"2 * tup: (5.0, 'a', 3.1415, 'z', (1, 2), 5.0, 'a', 3.1415, 'z', (1, 2))\n",
"Length: 5\n"
]
}
],
"source": [
"tup = (5.,)\n",
"\n",
"# Concatenation\n",
"tup = tup + ('a', 3.1415, 'z', (1, 2)) # This creates a new tuple and assigns it to the name \"tup\"\n",
"print('Concatenation: ', tup)\n",
"\n",
"# Replication\n",
"print('2 * tup: ', 2 * tup)\n",
"\n",
"# Length\n",
"print('Length: ', len(tup))"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tup[0]: 5.0\n",
"tup[3]: z \n",
"\n",
"tup[-1]: (1, 2)\n",
"tup[-5]: 5.0 \n",
"\n",
"tup[1:3]: ('a', 3.1415)\n",
"tup[0:]: (5.0, 'a', 3.1415, 'z', (1, 2))\n",
"tup[:3]: (5.0, 'a', 3.1415)\n",
"tup[1:-1]: ('a', 3.1415, 'z')\n"
]
}
],
"source": [
"# Indexation\n",
"print('tup[0]: ', tup[0]) # Note that indices start in 0!\n",
"print('tup[3]: ', tup[3], '\\n')\n",
"\n",
"print('tup[-1]: ', tup[-1]) # Negative indices count from the end of the tuple\n",
"print('tup[-5]: ', tup[-5], '\\n')\n",
"\n",
"# Slices\n",
"print('tup[1:3]: ', tup[1:3]) \n",
"print('tup[0:]: ', tup[0:])\n",
"print('tup[:3]: ', tup[:3])\n",
"print('tup[1:-1]: ', tup[1:-1])"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n",
"False \n",
"\n",
"False\n",
"True\n"
]
}
],
"source": [
"# Inclusion\n",
"print('a' in tup) # Returns True if 'a' is an element of the tuple\n",
"print(1 in tup, '\\n') \n",
"\n",
"print('a' not in tup) # Returns True if the string 'a' is not an element of the tuple\n",
"print('abc' not in tup)"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-26T15:08:36.068628Z",
"start_time": "2021-10-26T15:08:36.064313Z"
}
},
"source": [
"Note that a tuple with a single element `el` is defined as `(el,)` and not `(el)`. Note also that the expression `1 in tup` returns `False` since 1 is not an element of `tup` (although it is an element of a tuple within `tup`). "
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-26T15:08:47.908433Z",
"start_time": "2021-10-26T15:08:47.902500Z"
}
},
"source": [
"\n",
"### Dictionaries\n",
"\n",
"Finally, the last structured type, _dictionaries,_ consist of _mutable_ sequences of key : value pairs, where a value can be of any type, and a key can be any _hashable_ expression. You can recognize a dictionary since it is delimited by `{ }`. Much like lists, since a dictionary is a mutable type, you can perform _element assignment._"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.553851Z",
"start_time": "2021-10-27T20:56:26.545297Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Length: 2 \n",
"\n",
"dct['a']: (1, 2)\n",
"dct[1]: str \n",
"\n"
]
}
],
"source": [
"dct = {'a': (1, 2), 1: 'str'}\n",
"\n",
"# Length\n",
"print('Length: ', len(dct), '\\n')\n",
"\n",
"# Indexation\n",
"print(\"dct['a']: \", dct['a']) # Note that indexation is through keys\n",
"print('dct[1]: ', dct[1], '\\n')"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n",
"False\n",
"False\n",
"True\n",
"Dictionary after modification: {'a': 2, 1: 'str', 'b': 3.0}\n"
]
}
],
"source": [
"# Inclusion\n",
"print('a' in dct) # Returns True if 'a' is a key in dct\n",
"print('str' in dct) \n",
"\n",
"print('a' not in lst) # Returns True if 'a' is not a key in dct\n",
"print('str' not in lst)\n",
" \n",
"# Assignment\n",
"dct['a'] = 2 # To modify the value of an existing key\n",
"dct['b'] = 3. # To create a new key : value pair\n",
" \n",
"print('Dictionary after modification:', dct)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A few examples of dict methods:"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"dict_items([('a', 2), (1, 'str'), ('b', 3.0)]) \n",
"\n",
"dict_keys(['a', 1, 'b']) \n",
"\n",
"dict_values([2, 'str', 3.0]) \n",
"\n"
]
}
],
"source": [
"print(dct.items(), '\\n') # returns all the items in the dict\n",
"\n",
"print(dct.keys(), '\\n') # returns all the keys \n",
"\n",
"print(dct.values(), '\\n') # # returns all the values"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-26T15:17:42.757007Z",
"start_time": "2021-10-26T15:17:42.752421Z"
}
},
"source": [
"We conclude by noting that mutable structured types (such as lists and dictionaries) are passed to functions _by reference:_ if you modify them inside the function, those modifications are visible outside. \n",
"\n",
"Example:"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.563820Z",
"start_time": "2021-10-27T20:56:26.557784Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"List before function call: [0, 1]\n",
"List after function call: [2, 1]\n"
]
}
],
"source": [
"def change_first(lst_arg):\n",
" lst_arg[0] = 2\n",
" \n",
"lst = [0, 1]\n",
"print('List before function call:', lst)\n",
"change_first(lst)\n",
"print('List after function call:', lst)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"### Structured types and `for` loops\n",
"\n",
"Structured types such as strings, lists, tuples, etc., enable a second type of cyclic instruction: the `for` loop. These loops are used to _traverse_ structured types, as in the following examples:"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.575142Z",
"start_time": "2021-10-27T20:56:26.568293Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"a belongs to the string abcdefghi\n",
"b belongs to the string abcdefghi\n",
"c belongs to the string abcdefghi\n",
"\n",
"5.0 is an element of the tuple (5.0, 'a', 3.1415, 'z', (1, 2))\n",
"a is an element of the tuple (5.0, 'a', 3.1415, 'z', (1, 2))\n",
"3.1415 is an element of the tuple (5.0, 'a', 3.1415, 'z', (1, 2))\n"
]
}
],
"source": [
"for letter in string[:3]:\n",
" print(letter, 'belongs to the string', string)\n",
" \n",
"print()\n",
"for elem in tup[:3]:\n",
" print(elem, 'is an element of the tuple', tup)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The syntax for the `for` loop takes the form \n",
"\n",
"```\n",
"for in : \n",
" \n",
"```\n",
"\n",
"and, in each iteration of the cycle, `` takes the value of each element of ``. We can use the `for` loop to do a standard counted cycle using the function `range`, which returns a structure that can be traversed by a `for` loop, as follows:"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 1 2 3 4 5 6 7 8 9 "
]
}
],
"source": [
"for i in range(10):\n",
" print(i, end=' ')"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The character in position 0 of abcdefghi is a\n",
"The character in position 1 of abcdefghi is b\n",
"The character in position 2 of abcdefghi is c\n"
]
}
],
"source": [
"for i in range(len(string[:3])):\n",
" print('The character in position', i, 'of', string, 'is', string[i])"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:26.585686Z",
"start_time": "2021-10-27T20:56:26.578499Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 is an even integer\n",
"1 is an odd integer\n",
"2 is an even integer\n"
]
}
],
"source": [
"for i in range(3):\n",
" if i%2 == 0: \n",
" print(i, 'is an even integer')\n",
" else: \n",
" print(i, 'is an odd integer')"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 is an even integer\n",
"2 is an even integer\n",
"4 is an even integer\n"
]
}
],
"source": [
"for i in range(7):\n",
" if i == 5: # stop running if i equals 5\n",
" break\n",
" elif i%2 != 0: # not printing odd numbers\n",
" continue\n",
" else: \n",
" print(i, 'is an even integer')"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"squares: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]\n",
"even squares: [0, 4, 16, 36, 64]\n"
]
}
],
"source": [
"# List comprehensions\n",
"\n",
"squares = [x**2 for x in range(10)]\n",
"print('squares: ', squares)\n",
"\n",
"newlist = [x for x in squares if x%2 == 0]\n",
"print('even squares: ', newlist)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"## Modules and namespaces in Python\n",
"\n",
"You can extend the basic functionality of Python by _importing modules. Modules_ are collections of functions, classes and names that, when imported, are added to Python's current namespace (the set of all names that Python knows).\n",
"\n",
"A module import can be done using the instruction `import` followed by the name of the module. For example, to import `numpy` (which you'll be doing shortly), we can do:"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.442546Z",
"start_time": "2021-10-27T20:56:26.588513Z"
}
},
"outputs": [],
"source": [
"import numpy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can now access the functions and classes in the module `numpy`, referring to them by adding the prefix `numpy.`. For example: "
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.453230Z",
"start_time": "2021-10-27T20:56:27.449845Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The cosine of 0 is: 1.0\n",
"Pi is the constant 3.141592653589793\n"
]
}
],
"source": [
"print('The cosine of 0 is:', numpy.cos(0))\n",
"print('Pi is the constant', numpy.pi)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For long module names (for example, `matplotlib.pyplot`) it is inconvenient to type such a long name when calling a function or class from the imported module. Using the `import` instruction, you can still signal Python to import the module with a shorthand name. For example, for `numpy` it is customary to use:"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.461758Z",
"start_time": "2021-10-27T20:56:27.458561Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The cosine of 0 is: 1.0\n",
"Pi is the constant 3.141592653589793\n"
]
}
],
"source": [
"import numpy as np\n",
"\n",
"\n",
"print('The cosine of 0 is:', np.cos(0))\n",
"print('Pi is the constant', np.pi)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sometimes, we may want to import only a specific function, class or name from a module. We can do it by using the alternative import instruction `from import `. For example, if we wanted only to import the value of $\\pi$ from `numpy` we could do:"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.467980Z",
"start_time": "2021-10-27T20:56:27.464809Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3.141592653589793\n"
]
}
],
"source": [
"from numpy import pi\n",
"\n",
"print(pi)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that, using this form of import, the imported name is added directly to Python's current namespace. This form of import should be used with care, as it may overwrite other previously defined names. \n",
"\n",
"In structuring a Python program/script, it is usually a good idea to follow the template:\n",
"\n",
"* Imports\n",
"* Definitions (classes, functions)\n",
"* Unstructured code"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"# NumPy\n",
"\n",
"**NumPy** – Python library that allows to [conveniently] work with multidimensional arrays and matrices, containing mathematical functions. In addition, NumPy can vectorize many of the computations that take place in machine learning.\n",
"\n",
" - [numpy](http://www.numpy.org)\n",
" - [numpy tutorial](http://cs231n.github.io/python-numpy-tutorial/)\n",
" - [100 numpy exercises](http://www.labri.fr/perso/nrougier/teaching/numpy.100/)\n",
" - [numpy for matlab users](https://numpy.org/doc/stable/user/numpy-for-matlab-users.html)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The main NumPy data type is a multidimensional array of elements of the same type - [numpy.ndarray](http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.array.html). Each such array has several *dimensions* or *axes* - in particular, a vector is a one-dimensional array and has 1 axis, a matrix is a two-dimensional array and has 2 axes, etc."
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.479385Z",
"start_time": "2021-10-27T20:56:27.475287Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"vec = np.array([1, 2, 3])\n",
"vec.ndim # number of dimensions"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.486642Z",
"start_time": "2021-10-27T20:56:27.482280Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mat = np.array([[1, 2, 3], [4, 5, 6]])\n",
"mat.ndim"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To find out the length of the array along each of the axes, you can use the shape attribute:"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.492951Z",
"start_time": "2021-10-27T20:56:27.489542Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(3,)"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"vec.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To find out the type of elements and their size in bytes:"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.499391Z",
"start_time": "2021-10-27T20:56:27.495224Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'int64'"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mat.dtype.name"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.505214Z",
"start_time": "2021-10-27T20:56:27.501670Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"8"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mat.itemsize"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"## Creating Arrays\n",
"\n",
"* Pass an iterable object as a parameter to the array function (you can also explicitly specify the type of elements):"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.513143Z",
"start_time": "2021-10-27T20:56:27.508213Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([1, 2, 3])"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A = np.array([1, 2, 3])\n",
"A"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.519676Z",
"start_time": "2021-10-27T20:56:27.515619Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([1., 2., 3.])"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A = np.array([1, 2, 3], dtype = float)\n",
"A"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.527656Z",
"start_time": "2021-10-27T20:56:27.522645Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[1, 2],\n",
" [3, 4]])"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"B = np.array([(1, 2), (3, 4)])\n",
"B"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Arrays of a special kind using the functions zeros, ones, identity, empty:"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.535030Z",
"start_time": "2021-10-27T20:56:27.529886Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([0., 0., 0.])"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.zeros((3,))"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.541638Z",
"start_time": "2021-10-27T20:56:27.537440Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[1., 1., 1., 1.],\n",
" [1., 1., 1., 1.],\n",
" [1., 1., 1., 1.]])"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.ones((3, 4))"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.549052Z",
"start_time": "2021-10-27T20:56:27.543809Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[1., 0., 0.],\n",
" [0., 1., 0.],\n",
" [0., 0., 1.]])"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.identity(3) # np.eye()"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.556449Z",
"start_time": "2021-10-27T20:56:27.551332Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 3.10503618e+231, -2.32035395e+077, 3.95252517e-323,\n",
" 0.00000000e+000, 0.00000000e+000],\n",
" [ 0.00000000e+000, 0.00000000e+000, 0.00000000e+000,\n",
" 0.00000000e+000, 0.00000000e+000]])"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.empty((2, 5))"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-2. , 1. ],\n",
" [ 1.5, -0.5]])"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.linalg.inv(B) # inverse of a matrix B"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that the contents of an array created with the empty function are **not initialized**, which means it **may contain random numbers** as values."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Creating sequences using the arange function (takes the left and right boundaries of the sequence and **step** as parameters) and linspace function (takes the left and right boundaries and **number of elements**):"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.563967Z",
"start_time": "2021-10-27T20:56:27.559277Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 2, 5, 8, 11, 14, 17])"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.arange(2, 20, 3) # similar to standard python range function, right border is not included"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.570646Z",
"start_time": "2021-10-27T20:56:27.565967Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([2.5, 3.4, 4.3, 5.2, 6.1, 7. , 7.9])"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.arange(2.5, 8.7, 0.9) # but can work with real numbers too"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.577999Z",
"start_time": "2021-10-27T20:56:27.573476Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 2. , 3.23076923, 4.46153846, 5.69230769, 6.92307692,\n",
" 8.15384615, 9.38461538, 10.61538462, 11.84615385, 13.07692308,\n",
" 14.30769231, 15.53846154, 16.76923077, 18. ])"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.linspace(2, 18, 14) # right border included (by default)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Creating arrays of given shapes with random values from a uniform distribution over \\[0,1\\):"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[0.18039145, 0.33028426],\n",
" [0.62656605, 0.95219006],\n",
" [0.46088324, 0.90161331]])"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.random.rand(3,2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Creating a sample (or samples) from the “standard normal” (Gaussian) distribution of mean 0 and variance 1. "
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[-1.30338372, 0.48303574, 0.25580217],\n",
" [ 0.23628497, -0.04529129, -0.45199477]])"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.random.randn(2,3) # randn(N, M) generates N arrays of shape M, filled with random floats"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* To resize an existing array, you can use the reshape function (while the number of elements must remain unchanged):"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.585092Z",
"start_time": "2021-10-27T20:56:27.580609Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 1, 2],\n",
" [3, 4, 5],\n",
" [6, 7, 8]])"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.arange(9).reshape(3, 3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Instead of the length value of the array for one of the dimensions, you can put -1 - in this case, the value will be calculated automatically:"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.592070Z",
"start_time": "2021-10-27T20:56:27.587674Z"
},
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 1, 2, 3],\n",
" [4, 5, 6, 7]])"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.arange(8).reshape(2, -1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Transpose an existing array:"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.598837Z",
"start_time": "2021-10-27T20:56:27.594199Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 1, 2],\n",
" [3, 4, 5]])"
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"C = np.arange(6).reshape(2, -1)\n",
"C"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.605364Z",
"start_time": "2021-10-27T20:56:27.601192Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 3],\n",
" [1, 4],\n",
" [2, 5]])"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"C.T"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Combining existing arrays along a given axis:"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.612951Z",
"start_time": "2021-10-27T20:56:27.607398Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2, 0, 1, 4],\n",
" [ 3, 4, 5, 9, 16, 25]])"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A = np.arange(6).reshape(2, -1)\n",
"np.hstack((A, A**2))"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.619466Z",
"start_time": "2021-10-27T20:56:27.615433Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2],\n",
" [ 3, 4, 5],\n",
" [ 0, 1, 4],\n",
" [ 9, 16, 25]])"
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.vstack((A, A**2))"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.626380Z",
"start_time": "2021-10-27T20:56:27.621944Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2, 0, 1, 4],\n",
" [ 3, 4, 5, 9, 16, 25]])"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.concatenate((A, A**2), axis = 1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Repeating an existing array:"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.633508Z",
"start_time": "2021-10-27T20:56:27.628665Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 1, 2, 0, 1, 2],\n",
" [0, 1, 2, 0, 1, 2]])"
]
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.arange(3)\n",
"np.tile(a, (2, 2))"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.639735Z",
"start_time": "2021-10-27T20:56:27.635529Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 1, 2],\n",
" [0, 1, 2],\n",
" [0, 1, 2],\n",
" [0, 1, 2]])"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.tile(a, (4, 1))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"## Basic operations\n",
"\n",
"* Basic arithmetic operations on arrays are performed element-wise:"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.644966Z",
"start_time": "2021-10-27T20:56:27.641719Z"
}
},
"outputs": [],
"source": [
"A = np.arange(9).reshape(3, 3)\n",
"B = np.arange(1, 10).reshape(3, 3)"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.651109Z",
"start_time": "2021-10-27T20:56:27.647684Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[0 1 2]\n",
" [3 4 5]\n",
" [6 7 8]]\n",
"[[1 2 3]\n",
" [4 5 6]\n",
" [7 8 9]]\n"
]
}
],
"source": [
"print(A)\n",
"print(B)"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.657632Z",
"start_time": "2021-10-27T20:56:27.653799Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1, 3, 5],\n",
" [ 7, 9, 11],\n",
" [13, 15, 17]])"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A + B"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.664222Z",
"start_time": "2021-10-27T20:56:27.660070Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0. , 0.5 , 0.66666667],\n",
" [0.75 , 0.8 , 0.83333333],\n",
" [0.85714286, 0.875 , 0.88888889]])"
]
},
"execution_count": 82,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A * 1.0 / B"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.670518Z",
"start_time": "2021-10-27T20:56:27.666392Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[1, 2, 3],\n",
" [4, 5, 6],\n",
" [7, 8, 9]])"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A + 1"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.677015Z",
"start_time": "2021-10-27T20:56:27.673034Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 3, 6],\n",
" [ 9, 12, 15],\n",
" [18, 21, 24]])"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"3 * A"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.683293Z",
"start_time": "2021-10-27T20:56:27.679296Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 4],\n",
" [ 9, 16, 25],\n",
" [36, 49, 64]])"
]
},
"execution_count": 85,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A ** 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that multiplication of arrays is also **element-wise**, and not matrix:"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.689734Z",
"start_time": "2021-10-27T20:56:27.685572Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 2, 6],\n",
" [12, 20, 30],\n",
" [42, 56, 72]])"
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A * B"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To perform matrix multiplication, use the dot function:"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.696134Z",
"start_time": "2021-10-27T20:56:27.691840Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 18, 21, 24],\n",
" [ 54, 66, 78],\n",
" [ 90, 111, 132]])"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A.dot(B)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since operations are performed element-wise, the operands of binary operations must be the same size. However, the operation can be performed correctly if the sizes of the operands are such that they can be expanded to the same size. This feature is called [broadcasting](http://www.scipy-lectures.org/intro/numpy/operations.html#broadcasting):\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.703327Z",
"start_time": "2021-10-27T20:56:27.698518Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2],\n",
" [10, 11, 12],\n",
" [20, 21, 22],\n",
" [30, 31, 32]])"
]
},
"execution_count": 88,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.tile(np.arange(0, 40, 10), (3, 1)).T + np.array([0, 1, 2])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Functions as sin, cos, exp, etc. are also applied element-wise:"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.709690Z",
"start_time": "2021-10-27T20:56:27.705811Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[1.00000000e+00, 2.71828183e+00, 7.38905610e+00],\n",
" [2.00855369e+01, 5.45981500e+01, 1.48413159e+02],\n",
" [4.03428793e+02, 1.09663316e+03, 2.98095799e+03]])"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.exp(A)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Some operations on arrays (for example, calculating the minimum, maximum, sum of elements) are performed on all elements regardless of the shape of the array, however, when specifying the axis, they are performed along it (for example, to find the maximum of each row or each column):"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.716343Z",
"start_time": "2021-10-27T20:56:27.711964Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 1, 2],\n",
" [3, 4, 5],\n",
" [6, 7, 8]])"
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.722625Z",
"start_time": "2021-10-27T20:56:27.718672Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 91,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A.min()"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.729164Z",
"start_time": "2021-10-27T20:56:27.724881Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([6, 7, 8])"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A.max(axis = 0)"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.735222Z",
"start_time": "2021-10-27T20:56:27.731415Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 3, 12, 21])"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A.sum(axis = 1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"## Indexing\n",
"\n",
"[Many different ways](http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html) can be used to access the elements, let's take a look at the main ones.\n",
"\n",
"* Specific index values and slices can be used for indexing, as in standard Python types. For multidimensional arrays, the indices for the different axes are separated by commas. If indices are specified for a multidimensional array for not all dimensions, the missing ones are filled with a full slice (:)."
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.744727Z",
"start_time": "2021-10-27T20:56:27.737926Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = np.arange(10)\n",
"a"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.752249Z",
"start_time": "2021-10-27T20:56:27.747812Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([2, 3, 4])"
]
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[2:5]"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.769944Z",
"start_time": "2021-10-27T20:56:27.765862Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([3, 5, 7])"
]
},
"execution_count": 96,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a[3:8:2]"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.778828Z",
"start_time": "2021-10-27T20:56:27.774723Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8],\n",
" [ 9, 10, 11, 12, 13, 14, 15, 16, 17],\n",
" [18, 19, 20, 21, 22, 23, 24, 25, 26],\n",
" [27, 28, 29, 30, 31, 32, 33, 34, 35],\n",
" [36, 37, 38, 39, 40, 41, 42, 43, 44],\n",
" [45, 46, 47, 48, 49, 50, 51, 52, 53],\n",
" [54, 55, 56, 57, 58, 59, 60, 61, 62],\n",
" [63, 64, 65, 66, 67, 68, 69, 70, 71],\n",
" [72, 73, 74, 75, 76, 77, 78, 79, 80]])"
]
},
"execution_count": 97,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A = np.arange(81).reshape(9, -1)\n",
"A"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.784849Z",
"start_time": "2021-10-27T20:56:27.781188Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[18, 19, 20, 21, 22, 23, 24, 25, 26],\n",
" [27, 28, 29, 30, 31, 32, 33, 34, 35]])"
]
},
"execution_count": 98,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A[2:4]"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.791170Z",
"start_time": "2021-10-27T20:56:27.787254Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 2, 3],\n",
" [11, 12],\n",
" [20, 21],\n",
" [29, 30],\n",
" [38, 39],\n",
" [47, 48],\n",
" [56, 57],\n",
" [65, 66],\n",
" [74, 75]])"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A[:, 2:4]"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.798328Z",
"start_time": "2021-10-27T20:56:27.793434Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[20, 21],\n",
" [29, 30]])"
]
},
"execution_count": 100,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A[2:4, 2:4]"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.804630Z",
"start_time": "2021-10-27T20:56:27.800180Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([72, 73, 74, 75, 76, 77, 78, 79, 80])"
]
},
"execution_count": 101,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A[-1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Indexing can also be done by using index lists (on each axis):"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.812598Z",
"start_time": "2021-10-27T20:56:27.807660Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8],\n",
" [ 9, 10, 11, 12, 13, 14, 15, 16, 17],\n",
" [18, 19, 20, 21, 22, 23, 24, 25, 26],\n",
" [27, 28, 29, 30, 31, 32, 33, 34, 35],\n",
" [36, 37, 38, 39, 40, 41, 42, 43, 44],\n",
" [45, 46, 47, 48, 49, 50, 51, 52, 53],\n",
" [54, 55, 56, 57, 58, 59, 60, 61, 62],\n",
" [63, 64, 65, 66, 67, 68, 69, 70, 71],\n",
" [72, 73, 74, 75, 76, 77, 78, 79, 80]])"
]
},
"execution_count": 102,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A = np.arange(81).reshape(9, -1)\n",
"A"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.819859Z",
"start_time": "2021-10-27T20:56:27.815415Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([18, 37, 48])"
]
},
"execution_count": 103,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A[[2, 4, 5], [0, 1, 3]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Boolean indexing can also be applied (using boolean arrays):"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.826834Z",
"start_time": "2021-10-27T20:56:27.822481Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])"
]
},
"execution_count": 104,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A = np.arange(11)\n",
"A"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.833402Z",
"start_time": "2021-10-27T20:56:27.828912Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 1, 2, 4, 5, 6, 7, 9, 10])"
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A[A % 5 != 3]"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.840838Z",
"start_time": "2021-10-27T20:56:27.835424Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 1, 2, 4, 5, 6, 9, 10])"
]
},
"execution_count": 106,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A[np.logical_and(A != 7, A % 5 != 3)] # boolean operations can also be used"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"## Examples"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.848646Z",
"start_time": "2021-10-27T20:56:27.843290Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],\n",
" [ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23],\n",
" [ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35],\n",
" [ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47],\n",
" [ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59],\n",
" [ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71],\n",
" [ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83],\n",
" [ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95],\n",
" [ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107],\n",
" [108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119]])"
]
},
"execution_count": 107,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A = np.arange(120).reshape(10, -1)\n",
"A"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1. Select all even rows of matrix A.\n",
"2. Make a one-dimensional array of all elements that are not divisible by 3, that come only from odd columns of A.\n",
"3. Calculate the sum of the diagonal elements of A."
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:27.853400Z",
"start_time": "2021-10-27T20:56:27.850967Z"
}
},
"outputs": [],
"source": [
"# Your code here"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Why?\n",
"\n",
"Why use NumPy when standard lists/tuples and loops exist?\n",
"\n",
"The reason lies in the speed of work. Let's try to calculate the sum of element-wise products of 2 large vectors:"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:28.039983Z",
"start_time": "2021-10-27T20:56:27.855808Z"
}
},
"outputs": [],
"source": [
"import time\n",
"\n",
"A_quick_arr = np.random.normal(size = (1000000,))\n",
"B_quick_arr = np.random.normal(size = (1000000,))\n",
"\n",
"A_slow_list, B_slow_list = list(A_quick_arr), list(B_quick_arr)"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:28.453409Z",
"start_time": "2021-10-27T20:56:28.042004Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 279 ms, sys: 3.17 ms, total: 282 ms\n",
"Wall time: 281 ms\n"
]
}
],
"source": [
"%%time\n",
"\n",
"ans = 0\n",
"for i in range(len(A_slow_list)):\n",
" ans += A_slow_list[i] * B_slow_list[i]"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:28.850178Z",
"start_time": "2021-10-27T20:56:28.456367Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 293 ms, sys: 3.24 ms, total: 296 ms\n",
"Wall time: 316 ms\n"
]
}
],
"source": [
"%%time\n",
"\n",
"ans = 0\n",
"for i in range(len(A_slow_list)):\n",
" ans += A_slow_list[i] * B_slow_list[i]"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:29.267558Z",
"start_time": "2021-10-27T20:56:28.851944Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 220 ms, sys: 21.4 ms, total: 241 ms\n",
"Wall time: 240 ms\n"
]
}
],
"source": [
"%%time\n",
"\n",
"ans = sum([A_slow_list[i] * B_slow_list[i] for i in range(1000000)])"
]
},
{
"cell_type": "code",
"execution_count": 113,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:29.287850Z",
"start_time": "2021-10-27T20:56:29.269796Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 3.92 ms, sys: 1.99 ms, total: 5.91 ms\n",
"Wall time: 3.35 ms\n"
]
}
],
"source": [
"%%time\n",
"\n",
"ans = np.sum(A_quick_arr * B_quick_arr)"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:29.294464Z",
"start_time": "2021-10-27T20:56:29.290006Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 2.46 ms, sys: 787 µs, total: 3.25 ms\n",
"Wall time: 784 µs\n"
]
}
],
"source": [
"%%time\n",
"\n",
"ans = A_quick_arr.dot(B_quick_arr)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"# Matplotlib"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"* [matplotlib](http://matplotlib.org)\n",
"* [matplotlib - 2D and 3D plotting in Python](http://nbviewer.jupyter.org/github/jrjohansson/scientific-python-lectures/blob/master/Lecture-4-Matplotlib.ipynb)\n",
"* [visualization in pandas](http://pandas.pydata.org/pandas-docs/stable/visualization.html)\n",
"\n",
"**Matplotlib** is a Python library used for visualization."
]
},
{
"cell_type": "code",
"execution_count": 115,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:42.986251Z",
"start_time": "2021-10-27T20:56:42.982711Z"
}
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:42.991799Z",
"start_time": "2021-10-27T20:56:42.988527Z"
}
},
"outputs": [],
"source": [
"x = np.linspace(1, 10, 20)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To plot graphs in matplotlib, we use figures and axes assigned to them, which is quite convenient in the case when it is necessary to plot several graphs or when their location is non-standard."
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:43.355720Z",
"start_time": "2021-10-27T20:56:42.994018Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 117,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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xcAnqajU18Prr8MOO6TWu/vvh09+En7+czj8cCgpybpCSWp7Bj5JRWHhQvjVr+CGG1Jr3pw5aWLkv/8dunbNujpJypaDNiQVtDfegC9/GQYOhG9+M42mnTAhjbAFw54kgYFPUoFoWOps7ty0vNns2el6TQ384Q9w8snw4ovw5JNp3jyDniQ1sktXUkEYNw6eeCKta/vOO+l5vDvugJ12StOolJdnXaEktV8GPkntWnl5mvy4wSuvpP3vf7/qayRJa2aXrqR2Z/ZsuO66NK3KW2+lEbcNc+WVl6cu27ffzrZGSSoktvBJahfmzIHf/Q7uvDM9hwew666w335pe/319FzeihUudSZJ68vAJykzMaaWu2efhcrKdL7LLul5vf/9X9huu/S6BQvSEmejRqURuFVV2dYtSauoq0sPE8+e3fzWtWuaFDRDBj5JbWr+fLjnntSSt/vucMUVqSXvBz+AL3wBdtzxo++5557G4/Hj265WSfrPtABr2+bOTaGvqc6dYcCANGfUFltkU3vTcrIuQFLHcMst8Otfw6OPptUwttsOjjwy3SspgW9/O8vqJHU4dXXpX6DrCnMffPDR9/bsmYLcwIHpX6kNx023fv2gU/sZKmHgk9QqFi6EBx+E4cNTt+1DD6XpVC64AI49FnbeuXEghiTlTX19+gHUsOROw9bc+eqtciUlja1yO+yQ5oFqLsx165bN17YRDHySNkhVVQpzEyc2DqBYtChNgnznnfC3v8HKlemZvJ13hp/9DCoqDHmSNlCM8N57aw5xDcdVVWmI/+p6905dq1tskcLcmlrlinTBbQOfpA0yblwaTXvJJSnMPfYYHHpo+jk7ZAicc05qydtpp/T6AvwHsaS20BDkmga2NQW6mpqPvn/TTVOIGzAADjywMdQNGNB43L9/43qLHVSIMWZdQ95VVlbGqVOnZl2GVJRWnwi5QdeuMHZsGl1bWWlLntThVVenkatz56awNnfuqsdNrzXXIter16qhbfUQN2BA2px5/T9CCM/EGCubu2cLn6QWO+ss6NsXZs5svFZamlryrrjCufGkotfQGre28NZwvGjRR98fQvoh0r9/Cms77th43L//qmGuoqLtv74iZuCT9BE1NfDUU2mgRVUV3HRTuj5zJuy2GwweDP/4R2rVq6lxImSpoMWYph6ZN++jW3NBrrnWuPLyxha3HXeE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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10, 6))\n",
"\n",
"axes = fig.add_axes([0.1, 0.1, 0.8, 0.8])\n",
"\n",
"axes.plot(x, x ** 2, 'r')\n",
"axes.plot(x, x ** 3, 'b*--')\n",
"\n",
"axes.set_xlabel('x')\n",
"axes.set_ylabel('y')\n",
"axes.set_title('title')\n",
"axes.legend([r'$x^2$', 'x^3'], loc = 0)"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:43.518556Z",
"start_time": "2021-10-27T20:56:43.357348Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'title')"
]
},
"execution_count": 118,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10, 6))\n",
"\n",
"axes = fig.add_axes([0.1, 0.1, 0.8, 0.8])\n",
"\n",
"axes.scatter(x, x ** 2, color='red', marker='*', s=80)\n",
"axes.scatter(x, x ** 3)\n",
"\n",
"axes.set_xlabel('x')\n",
"axes.set_ylabel('y')\n",
"axes.set_title('title')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Matplotlib allows you to customize the details of the generated plots:"
]
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:43.705815Z",
"start_time": "2021-10-27T20:56:43.520760Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 119,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10, 6))\n",
"\n",
"axes = fig.add_axes([0.1, 0.1, 0.8, 0.8])\n",
"\n",
"axes.plot(x, x ** 2, 'r^-', label = r'$y = x^2$', markersize=8, markerfacecolor=\"yellow\", \n",
" markeredgewidth=1, markeredgecolor=\"green\")\n",
"axes.plot(x, x ** 3, 'b*--', label = r'$y = x^3$', alpha = 0.5)\n",
"\n",
"axes.set_xlabel('x')\n",
"axes.set_ylabel('y')\n",
"axes.set_title('title')\n",
"axes.legend(loc = 0, fontsize = 18)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As mentioned, matplotlib provides a certain amount of freedom in the layout of the subplots:"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:44.090174Z",
"start_time": "2021-10-27T20:56:43.708003Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'insert title')"
]
},
"execution_count": 120,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"\n",
"axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # main axes\n",
"axes2 = fig.add_axes([0.2, 0.5, 0.4, 0.3]) # inset axes\n",
"\n",
"# main figure\n",
"axes1.plot(x, x ** 2, 'r')\n",
"axes1.set_xlabel('x')\n",
"axes1.set_ylabel('y')\n",
"axes1.set_title('title')\n",
"\n",
"# insert\n",
"axes2.plot(x ** 2, x, 'g')\n",
"axes2.set_xlabel('y')\n",
"axes2.set_ylabel('x')\n",
"axes2.set_title('insert title')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can also use one of the classic configurations:"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:44.744377Z",
"start_time": "2021-10-27T20:56:44.093212Z"
}
},
"outputs": [
{
"data": {
"image/png": "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eOYZGDAgfbz2Wnp+rbXgwgth551hxRWzRpQkVYnvv59RyBk0CF54IU1sAzRtCpttloo566+f2lPUq5c1rqTaU50FnnffhTZt0kkld96ZKtaSJM2uadPSbOiAAfDYY6kx/+TJqVHyv/6Vjort0AFWWy13UklSpZo8GUaMgOHD4c030+fXX0893iDtTGjeHA46KBV0NtjAFaRShau+As8zz6Sb7nr14Mkn05J5SZL+yEcfzVih8/jj8N136fk11ki9CrbYAjbcMB0dK0lSbZk0Cd577+eFnOHD06T11KnpNSGklaJ/+1s66WqDDWCddWChhfJml1RU1VXgufVW2HffdPF76CH4y19yJ5IklarRo+GJJ9IKnQED0iwpwLLLptNEttgCWrWCpZbKGlOSVAFihG++gU8/TYWbmQs5772XVo5CKuT89a+pkNO+PTRrlh6vuqoTDJKqpMATI5x/Ppx+ejq55J57YPHFc6eSJJWK8eNT35yXX05br156CV59NZ20uPDCsMkmM1bprLaaPdskSbMvxrTq89NPYeTI9Pm3Hk+aNOPPzDMPrLRSKuDssEP63KxZKuQssEC+fxZJJa3yCzxTpqQTsnr2TMsVe/SA+ebLnUqSlMuYMfDKK6mY81NB5623UjEHYIklYO2106TAFlukE0Xq188aWZIqQQhha+BKoB5wfYzxwsyR5tyUKamZ8fffp+LNT5+/+y4d5vLLIs5PTY5/Uq9eWhG63HLQogVst1163KRJKuyssgrMP3+efzZJZauyCzxjxqQGyo89BmecAf/+t7OuklRNRo2aUcT5qaDz/vszvr/ssqkB5Q47pKLO2munm2vHCkmqVSGEesA1wBbASODFEEK/GOPwogSIESZOTCs2J0yY8fFbX48fn7bp/lSw+a0izo8/zvpnzTNPama83HLpNMV27dLjnwo4yy2Xtvd6epWkWla5BZ4vv4TNN4d33oFevWCffXInkiRRpBnc669PRf2RI2c895e/pALOfvulz82b2z9HkopnXWBEjPEDgBDC7UB7oPYLPJtskk7LnbmAM3Fizf+eBg1SW4fFF4dGjVJhZs010+OZn5/58+KLQ8OGFm8kZVG5BZ5GjVIDsiuvTE0wJUnZFW0Gd6mlYOONUxFn7bXTDGqjRrX6IyRJNbIs8OlMX48E1vvli0IIBwEHASy//PJz9pNWXjmt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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig, axes = plt.subplots(nrows=1, ncols=3, figsize = (16, 5))\n",
"\n",
"for pow_num, ax in enumerate(axes):\n",
" ax.plot(x, x ** (pow_num + 1), 'r')\n",
" ax.set_xlabel('x')\n",
" ax.set_ylabel('y')\n",
" ax.set_title(r'$y = x^' + str(pow_num + 1)+ r'$', fontsize = 18)\n",
"fig.tight_layout() # борьба с пересечением подграфиков"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The resulting graph can be saved to a file:"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:45.032684Z",
"start_time": "2021-10-27T20:56:44.746440Z"
}
},
"outputs": [],
"source": [
"fig.savefig(\"pows.png\", dpi=200)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Matplotlib also allows you to plot a surface plot using the function values at the grid points:"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:45.044125Z",
"start_time": "2021-10-27T20:56:45.035345Z"
}
},
"outputs": [],
"source": [
"alpha = 0.7\n",
"phi_ext = 2 * np.pi * 0.5\n",
"\n",
"def flux_qubit_potential(phi_m, phi_p):\n",
" return 2 + alpha - 2 * np.cos(phi_p) * np.cos(phi_m) - alpha * np.cos(phi_ext - 2*phi_p)\n",
"\n",
"phi_m = np.linspace(0, 2*np.pi, 100)\n",
"phi_p = np.linspace(0, 2*np.pi, 100)\n",
"X,Y = np.meshgrid(phi_p, phi_m)\n",
"Z = flux_qubit_potential(X, Y).T"
]
},
{
"cell_type": "code",
"execution_count": 124,
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-27T20:56:45.911182Z",
"start_time": "2021-10-27T20:56:45.576821Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from mpl_toolkits.mplot3d import Axes3D\n",
"\n",
"fig = plt.figure(figsize=(14,6))\n",
"\n",
"ax = fig.add_subplot(111, projection='3d')\n",
"\n",
"p = ax.plot_surface(X, Y, Z, rstride=4, cstride=4, linewidth=0, cmap='jet')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note, that Matplotlib allows you to use many other types of visualization, you can read more about them, for example, [here](http://matplotlib.org/gallery.html) or [here](http://nbviewer.jupyter.org/github/jrjohansson/scientific-python-lectures/blob/master/Lecture-4-Matplotlib.ipynb)."
]
}
],
"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.9.2"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
"autoclose": false,
"autocomplete": true,
"bibliofile": "biblio.bib",
"cite_by": "apalike",
"current_citInitial": 1,
"eqLabelWithNumbers": true,
"eqNumInitial": 1,
"hotkeys": {
"equation": "Ctrl-E",
"itemize": "Ctrl-I"
},
"labels_anchors": false,
"latex_user_defs": false,
"report_style_numbering": false,
"user_envs_cfg": false
}
},
"nbformat": 4,
"nbformat_minor": 1
}