{ "cells": [ { "cell_type": "markdown", "id": "d9978e48", "metadata": {}, "source": [ "# Jupyter notebook a základy Pythonu" ] }, { "cell_type": "markdown", "id": "9b3b7853", "metadata": {}, "source": [ "
On-line interaktivní verze: Pro spuštení interaktivní verze této stránky klikněte ve vrchním menu na a zvolte Binder, ve kterém lze Jupyter notebook (JP) upravovat a následně uložit na disk.
" ] }, { "cell_type": "markdown", "id": "fd0e6a02", "metadata": {}, "source": [ "
Tip: Tento soubor je možné stáhnout kliknutím na , a to ve formě *.ipynb pro pozdější off-line editaci v prostředí Anaconda, nebo pro on-line editaci v Google Colab.
" ] }, { "cell_type": "markdown", "id": "c5252b08", "metadata": {}, "source": [ "## Interaktivní Jupyter notebook" ] }, { "cell_type": "markdown", "id": "42f2669a", "metadata": {}, "source": [ "Napište `print('Hello, World!')` a stiskněte `Shift` `+` `Enter` (nebo `Ctrl` `+` `Enter`)" ] }, { "cell_type": "code", "execution_count": 1, "id": "b0648bc0", "metadata": { "scrolled": true }, "outputs": [], "source": [ "# print\n" ] }, { "cell_type": "markdown", "id": "b721cc85", "metadata": {}, "source": [ "Pomocí klávesy `b` vložíte další řádek do JP.\n", "* Stiskněte `b`." ] }, { "cell_type": "markdown", "id": "6ee35abd", "metadata": {}, "source": [ "Odstranění řádku: vyberte řádek v JP a stiskněte `d` `+` `d`" ] }, { "cell_type": "markdown", "id": "90db19d6", "metadata": {}, "source": [ "Klávesou `a` vložíte nový řádek nad právě vybraný.\n", "1. Stiskněte `a`. \n", "2. Vyberte tento nový řádek a stiskněte `m`. Nyní lze do řádku místo kódu zapisovat text,\n", "3. Zadávání ukončíte stisknutím kombinace `Shift` `+` `Enter`.\n", "4. Pokud chcete řádek převést na kód, stiskněte `y`.\n" ] }, { "cell_type": "markdown", "id": "b9d676c5", "metadata": {}, "source": [ "**Pro nápovědu stiskněte `h`.**" ] }, { "cell_type": "markdown", "id": "af3c3908", "metadata": {}, "source": [ "## Python" ] }, { "cell_type": "markdown", "id": "da9593e8", "metadata": {}, "source": [ "Jednořádkový komentář se zadává za znak `#`, více řádků lze zakomentovat pomocí `\"\"\"` a `\"\"\"`:" ] }, { "cell_type": "code", "execution_count": 2, "id": "3c111cdf", "metadata": { "scrolled": true }, "outputs": [], "source": [ "# toto je komentar\n" ] }, { "cell_type": "markdown", "id": "0f57beed", "metadata": {}, "source": [ "Inicializace proměnných `a`, `b`, základní aritmetické operace a výpis výsledku pomocí funkce `print()`:" ] }, { "cell_type": "code", "execution_count": 6, "id": "fd430961", "metadata": { "scrolled": true }, "outputs": [], "source": [ "# zakladni aritmeticke operace\n" ] }, { "cell_type": "markdown", "id": "d7072c21", "metadata": {}, "source": [ "
Cvičení 01.01: Vypočtěte objem jehlanu o stranách 3 a 4 majiícího výšku 7.
" ] }, { "cell_type": "code", "execution_count": 2, "id": "f8e7c0b1", "metadata": { "scrolled": false }, "outputs": [], "source": [ "# Cviceni 01.01\n" ] }, { "cell_type": "markdown", "id": "6838de97", "metadata": {}, "source": [ "## Podmínkové cykly" ] }, { "cell_type": "markdown", "id": "b2d380fc", "metadata": {}, "source": [ "### If ... else" ] }, { "cell_type": "markdown", "id": "14d141a1", "metadata": {}, "source": [ "
Pozor: vnitřní části kódu je nutné odsadit, obvykle se používají čtyři mezery.
" ] }, { "cell_type": "markdown", "id": "ea6851c8", "metadata": {}, "source": [ "Za klíčovými slovy `if` a `else` musíme psát `:`." ] }, { "cell_type": "code", "execution_count": 9, "id": "0fb89fd4", "metadata": {}, "outputs": [], "source": [ "# if, else\n" ] }, { "cell_type": "markdown", "id": "8c21a903", "metadata": {}, "source": [ "### For ..." ] }, { "cell_type": "markdown", "id": "666cc6c5", "metadata": {}, "source": [ "Zde využijeme funkci `range(min,max,krok)`, která vytvoří sekvenci celých čísel od `min` po `max` ***(prvek max není v sekvenci obsažen)*** s uvedeným krokem. Výchozí hodnoty jsou `min = 0` a `krok = 1`." ] }, { "cell_type": "code", "execution_count": 10, "id": "579b2696", "metadata": {}, "outputs": [], "source": [ "# for\n" ] }, { "cell_type": "markdown", "id": "da5a3417", "metadata": {}, "source": [ "### While..." ] }, { "cell_type": "code", "execution_count": 11, "id": "73794ecf", "metadata": {}, "outputs": [], "source": [ "# while\n" ] }, { "cell_type": "markdown", "id": "04c65198", "metadata": {}, "source": [ "### Break" ] }, { "cell_type": "markdown", "id": "f01a45e2", "metadata": {}, "source": [ "Pomocí příkazu `break` se ukončí probíhající cyklus. Pokud je cyklus vnořený, ukončí se pouze tento vnořený cyklus. V následujícím příkladu využijeme funkci `len()` která nám vrátí délku seznamu vytvořeného pomocí `range()`." ] }, { "cell_type": "code", "execution_count": 12, "id": "0af09a98", "metadata": {}, "outputs": [], "source": [ "# Ze seznamu cislic 0,1,2,... chci vypsat pouze prvni dve cislice. \n" ] }, { "cell_type": "markdown", "id": "593dafc2", "metadata": {}, "source": [ "### Continue" ] }, { "cell_type": "markdown", "id": "810aec7e", "metadata": {}, "source": [ "Příkaz `continue` ukončí aktuální iteraci v cyklu a pokračuje další iterací." ] }, { "cell_type": "code", "execution_count": 13, "id": "bc4a9d66", "metadata": {}, "outputs": [], "source": [ "# Ze seznamu cislic 0,1,2,... chci vypsat vsechny cislice, krome dvojky. \n" ] }, { "cell_type": "markdown", "id": "d6963427", "metadata": {}, "source": [ "## Funkce" ] }, { "cell_type": "markdown", "id": "b8c532be", "metadata": {}, "source": [ "Funkce se definuje příkazem `def`. Následuje jméno funkce, seznam vstupních parametrů a vše je zakončené `:`. Tělo funkce musí být odsazené. Funkce může vrátit hodnotu pomocí příkazu `return`." ] }, { "cell_type": "code", "execution_count": 15, "id": "8d4d1368", "metadata": {}, "outputs": [], "source": [ "# funkce\n" ] }, { "cell_type": "markdown", "id": "752c4109", "metadata": {}, "source": [ "
Cvičení 01.02: Napište funkci, která rozhodne, zda zadané číslo je liché, nebo sudé, a vypište výsledek.
" ] }, { "cell_type": "code", "execution_count": 3, "id": "89ca0f09", "metadata": {}, "outputs": [], "source": [ "# Cviceni 01.02\n" ] }, { "cell_type": "markdown", "id": "851a4b83", "metadata": {}, "source": [ "## Numerická knihovna numpy" ] }, { "cell_type": "markdown", "id": "311930d4", "metadata": {}, "source": [ "Pro import numerické knihovny `numpy` použijeme příkaz:" ] }, { "cell_type": "code", "execution_count": 12, "id": "2a728d2b", "metadata": {}, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "id": "e1228e67", "metadata": {}, "source": [ "### Maticové operace" ] }, { "cell_type": "markdown", "id": "e85e1683", "metadata": {}, "source": [ "Pole (vektor, matice) lze vytvářet pomocí funkce `array()`:" ] }, { "cell_type": "code", "execution_count": 4, "id": "a86dcef2", "metadata": {}, "outputs": [], "source": [ "# vektor\n", "\n", "# matice (pole)\n" ] }, { "cell_type": "markdown", "id": "cbecdd4f", "metadata": {}, "source": [ "
Pozor: v poli arrayprvní prvek index 0!
" ] }, { "cell_type": "markdown", "id": "0f5b486f", "metadata": {}, "source": [ "Rozměry pole zjistíme pomocí funkce `shape`:" ] }, { "cell_type": "code", "execution_count": 5, "id": "89ce0972", "metadata": {}, "outputs": [], "source": [ "# shape\n" ] }, { "cell_type": "markdown", "id": "03db48e9", "metadata": {}, "source": [ "Funkce `size` vrátí počet prvků v poli:" ] }, { "cell_type": "code", "execution_count": 7, "id": "6e6cf36f", "metadata": {}, "outputs": [], "source": [ "# size\n" ] }, { "cell_type": "markdown", "id": "e876c0e1", "metadata": {}, "source": [ "Matici lze transponovat funkcí `transpose()`:" ] }, { "cell_type": "code", "execution_count": 8, "id": "58b0d0a8", "metadata": {}, "outputs": [], "source": [ "# transpose\n" ] }, { "cell_type": "markdown", "id": "0a9e7136", "metadata": {}, "source": [ "Pro vytváření polí lze používat následující generátory:" ] }, { "cell_type": "markdown", "id": "45f68d25", "metadata": {}, "source": [ "* Pomocí funkce `arange()` vytvoříme pole s prvky od 0 do 10 **(poslední prvek není obsažen)** a krokem 1:" ] }, { "cell_type": "code", "execution_count": 9, "id": "ef8a07f8", "metadata": {}, "outputs": [], "source": [ "# arange\n" ] }, { "cell_type": "markdown", "id": "d420d75b", "metadata": {}, "source": [ "* Pomocí funkce `linspace()` vygenerujeme pole s prvky od 0 do 10 **(včetně)**, přičemž počet prvků je 20:" ] }, { "cell_type": "code", "execution_count": 11, "id": "c93f7c06", "metadata": {}, "outputs": [], "source": [ "# linspace\n" ] }, { "cell_type": "markdown", "id": "9661621c", "metadata": {}, "source": [ "* Příkazem `logspace()` vytvoříme pole od 0 do 10 s počtem prvků 20 v logaritmickém měřítku ($\\log_{10}$):" ] }, { "cell_type": "code", "execution_count": 12, "id": "1f9a2653", "metadata": {}, "outputs": [], "source": [ "# logspace\n" ] }, { "cell_type": "markdown", "id": "c3d2f675", "metadata": {}, "source": [ "* Pomocí funkce `zeros()` vytvoříme nulovou matici 2x2:" ] }, { "cell_type": "code", "execution_count": 13, "id": "3ef71059", "metadata": { "scrolled": true }, "outputs": [], "source": [ "# zeros\n" ] }, { "cell_type": "markdown", "id": "9d49bbbf", "metadata": {}, "source": [ " * Funkcí `ones()` vytvoříme jednotkovou matici 3x3:" ] }, { "cell_type": "code", "execution_count": 14, "id": "ae248187", "metadata": {}, "outputs": [], "source": [ "# ones\n" ] }, { "cell_type": "markdown", "id": "d0fe6941", "metadata": {}, "source": [ "* Pomocí funkce `eye()` vytvoříme matici 3x3 s jedničkami na diagonále, ostatní hodnoty jsou nulové:" ] }, { "cell_type": "code", "execution_count": 15, "id": "4a4d939e", "metadata": {}, "outputs": [], "source": [ "# eye\n" ] }, { "cell_type": "markdown", "id": "e5284f01", "metadata": {}, "source": [ "* Pole náhodných čísel v rozmezí 0 az 1 se vygeneruje pomocí funkce `np.random.rand()`:" ] }, { "cell_type": "code", "execution_count": 16, "id": "240b2c29", "metadata": {}, "outputs": [], "source": [ "# random\n" ] }, { "cell_type": "markdown", "id": "5b230398", "metadata": {}, "source": [ "Pro přístup k prvkům pole `A` používáme syntaxi `A[i,j]`, kde `i` je index řádku a `j` je index sloupce:" ] }, { "cell_type": "code", "execution_count": 17, "id": "344bf690", "metadata": {}, "outputs": [], "source": [ "# pole\n" ] }, { "cell_type": "markdown", "id": "227daf0a", "metadata": {}, "source": [ "Pro přístup k prvkům pole používáme syntaxi `[min:max:krok]`. Mějme vektor $\\mathbf{v}=(0,1,2,3,4,5,6)$. Nyní z něj vyjmeme první (\"0\") až šestý prvek (\"5\"), a to s krokem 2:" ] }, { "cell_type": "code", "execution_count": 18, "id": "af21ccc2", "metadata": {}, "outputs": [], "source": [ "# pole - vyber\n" ] }, { "cell_type": "markdown", "id": "4b156f32", "metadata": {}, "source": [ "Podobně u matice $A$ vybereme např. poslední dva prvky ve třetím sloupci." ] }, { "cell_type": "code", "execution_count": 20, "id": "3a201f17", "metadata": {}, "outputs": [], "source": [ "# pole - vyber\n" ] }, { "cell_type": "markdown", "id": "6fa37749", "metadata": {}, "source": [ "U matice $A$ vybereme první řádek:" ] }, { "cell_type": "code", "execution_count": 21, "id": "ddf0d009", "metadata": {}, "outputs": [], "source": [ "# pole - vyber\n" ] }, { "cell_type": "markdown", "id": "c51631f5", "metadata": {}, "source": [ "U matice $A$ vybereme první sloupec:" ] }, { "cell_type": "code", "execution_count": 22, "id": "41e5a359", "metadata": {}, "outputs": [], "source": [ "# pole - vyber\n" ] }, { "cell_type": "markdown", "id": "911af449", "metadata": {}, "source": [ "Násobení matic a vektorů se provádí pomocí operátoru `dot`:" ] }, { "cell_type": "code", "execution_count": 23, "id": "132db16a", "metadata": {}, "outputs": [], "source": [ "# matice 2x3\n", "\n", "# matice 3x2\n", "\n", "# vysledek\n" ] }, { "cell_type": "markdown", "id": "8f346e85", "metadata": {}, "source": [ "
Pozor: operace C*C násobí matice po prvcích (není to maticové násobení)
" ] }, { "cell_type": "code", "execution_count": 25, "id": "3adc6bd1", "metadata": { "scrolled": true }, "outputs": [], "source": [ "# maticove nasobeni\n", "\n", "# nasobeni po prvcich\n" ] }, { "cell_type": "markdown", "id": "ef73e5a6", "metadata": {}, "source": [ "### Funkce" ] }, { "cell_type": "markdown", "id": "4bb7f2ac", "metadata": {}, "source": [ "`numpy` obsahuje často používané funkce a konstanty (napr. `sqrt()`, `log()`, `log10()`, `sin()`, `abs()`, `e`, `pi`, ...):" ] }, { "cell_type": "code", "execution_count": 26, "id": "e2bf71fc", "metadata": {}, "outputs": [], "source": [ "# numpy - funkce\n" ] }, { "cell_type": "markdown", "id": "ecbd8c5e", "metadata": {}, "source": [ "Součet prvků v poli je dán funkcí `sum()`:" ] }, { "cell_type": "code", "execution_count": 27, "id": "8a9e5b9b", "metadata": {}, "outputs": [], "source": [ "# soucet prvku v poli\n" ] }, { "cell_type": "markdown", "id": "3205a20c", "metadata": {}, "source": [ "Minimální a maximální hodnotu v poli určíme funkcí `min()` a `max()`:" ] }, { "cell_type": "code", "execution_count": 28, "id": "2e7c9570", "metadata": {}, "outputs": [], "source": [ "# maximalni hodnota v poli\n", "\n", "# minimalni hodnota v poli\n" ] }, { "cell_type": "markdown", "id": "98b853d4", "metadata": {}, "source": [ "Funkce `average()` vrací průměrnou hodnotu; `std()` je směrodatná odchylka a `var()` je rozptyl:" ] }, { "cell_type": "code", "execution_count": 29, "id": "25288dcf", "metadata": {}, "outputs": [], "source": [ "# prumerna hodnota\n", "\n", "# smerodatna odchylka\n", "\n", "# rozptyl\n" ] }, { "cell_type": "markdown", "id": "2da1cf4f", "metadata": {}, "source": [ "Index prvku v poli lze najít pomocí funkce `argwhere()`:" ] }, { "cell_type": "code", "execution_count": 30, "id": "3c5c3d53", "metadata": {}, "outputs": [], "source": [ "# argwhere\n" ] }, { "cell_type": "markdown", "id": "4567bce0", "metadata": {}, "source": [ "
Tip: Další příklady a návody pro práci s knihovnou numpy lze nalézt na https://numpy.org/.
" ] }, { "cell_type": "markdown", "id": "919d65ad", "metadata": {}, "source": [ "## Visualizace dat" ] }, { "cell_type": "markdown", "id": "64414525", "metadata": {}, "source": [ "Pro kreslení grafů využijeme knihovnu `matplotlib.pyplot`:" ] }, { "cell_type": "code", "execution_count": 36, "id": "2e20aa46", "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "id": "4fea083a", "metadata": {}, "source": [ "### Graf jedné proměnné" ] }, { "cell_type": "markdown", "id": "f4e29513", "metadata": {}, "source": [ "Vygenerujeme $x$ a $y$ hodnoty pro funkci `sin()`:" ] }, { "cell_type": "code", "execution_count": 31, "id": "368b41d6", "metadata": {}, "outputs": [], "source": [ "# hodnoty x a y\n" ] }, { "cell_type": "markdown", "id": "3a3b05c7", "metadata": {}, "source": [ "Nejdříve je potřeba vytvořit obrázek pomocí `fig`. Vykreslení dat provedeme příkazem `plot()`:" ] }, { "cell_type": "code", "execution_count": 32, "id": "4653055f", "metadata": {}, "outputs": [], "source": [ "# vykresleni x,y\n" ] }, { "cell_type": "markdown", "id": "ed4fe7ec", "metadata": {}, "source": [ "Přidáme popisky os pomocí `set_xlabel()`, `set_ylabel()` a název grafu pomocí `set_title()`:" ] }, { "cell_type": "code", "execution_count": 33, "id": "9fd2fa6f", "metadata": {}, "outputs": [], "source": [ "# popisky os, nazev grafu\n" ] }, { "cell_type": "markdown", "id": "fa6ca77e", "metadata": {}, "source": [ "Přidáme funkci `cos()`, nastavíme barvu (`color`), styl (`linestyle`) a šířku (`linewidth`) linky. Průhlednost se nastavuje parametrem `alpha`. Legendu zobrazíme příkazem `legend()`:" ] }, { "cell_type": "code", "execution_count": 34, "id": "c1619906", "metadata": {}, "outputs": [], "source": [ "# funkce cos()\n", "\n", "# vykreslime funkci cos()\n" ] }, { "cell_type": "markdown", "id": "bba2d973", "metadata": {}, "source": [ "Na závěr obrázek uložíme příkazem `savefig()`:" ] }, { "cell_type": "code", "execution_count": 36, "id": "b1f2d97d", "metadata": {}, "outputs": [], "source": [ "# ulozeni obrazku\n" ] }, { "cell_type": "markdown", "id": "0e1500cd", "metadata": {}, "source": [ "### Visualizace závislosti dvou proměnných" ] }, { "cell_type": "markdown", "id": "4a562496", "metadata": {}, "source": [ "Mějme funkci $z(x,y)$, která závisí na dvou proměnných $z(x,y)=\\exp(-\\sqrt{x^2+y^2})\\cos(2x)\\sin(2y)$, a vykreslíme její závislost v 2D grafu." ] }, { "cell_type": "markdown", "id": "c37b2d03", "metadata": {}, "source": [ "Vytvoříme mřížku $x\\times y$ pomocí funkce `meshgrid()`:" ] }, { "cell_type": "code", "execution_count": 37, "id": "83a35717", "metadata": {}, "outputs": [], "source": [ "# meshgrid\n" ] }, { "cell_type": "markdown", "id": "acb7ce7e", "metadata": {}, "source": [ "Spočítáme hodnoty funkce $z(x,y)$:" ] }, { "cell_type": "code", "execution_count": 38, "id": "18bb8b31", "metadata": {}, "outputs": [], "source": [ "# hodnoty z\n" ] }, { "cell_type": "markdown", "id": "28340d59", "metadata": {}, "source": [ "2D graf vykreslíme pomocí funkce `pcolor()` s parametrem `shading='auto'`:" ] }, { "cell_type": "code", "execution_count": 39, "id": "1f1c4670", "metadata": {}, "outputs": [], "source": [ "# vykresleni dat\n" ] }, { "cell_type": "markdown", "id": "acbb8891", "metadata": {}, "source": [ "Kontury získáme použitím funkce `contour()`:" ] }, { "cell_type": "code", "execution_count": 40, "id": "cc9d3f28", "metadata": {}, "outputs": [], "source": [ "# contour\n" ] }, { "cell_type": "markdown", "id": "3ea48595", "metadata": {}, "source": [ "### 3D visualizace" ] }, { "cell_type": "markdown", "id": "3375491d", "metadata": {}, "source": [ "Máme stejnou funkci $z(x,y)=\\exp(-\\sqrt{x^2+y^2})\\cos(2x)\\sin(2y)$, kterou nyní chceme vykreslit v 3D grafu. Nejdříve vytvoříme trojrozměrnou osu:" ] }, { "cell_type": "code", "execution_count": 41, "id": "5bd8cf3e", "metadata": {}, "outputs": [], "source": [ "# 3D graf\n" ] }, { "cell_type": "markdown", "id": "764c6aaa", "metadata": {}, "source": [ "Vytvoříme mřížku $x\\times y$ pomocí funkce `meshgrid`:" ] }, { "cell_type": "code", "execution_count": 42, "id": "288e3065", "metadata": {}, "outputs": [], "source": [ "# meshgrid\n" ] }, { "cell_type": "markdown", "id": "37509518", "metadata": {}, "source": [ "Spočítáme hodnoty funkce $z(x,y)$:" ] }, { "cell_type": "code", "execution_count": 43, "id": "20d9e183", "metadata": {}, "outputs": [], "source": [ "# hodnoty z\n" ] }, { "cell_type": "markdown", "id": "c0d125e3", "metadata": {}, "source": [ "3D data vykreslíme pomocí funkce `plot_surface()` a přidáme popisky os:" ] }, { "cell_type": "code", "execution_count": 44, "id": "981cfb7e", "metadata": { "scrolled": true }, "outputs": [], "source": [ "# vykresleni dat - plot_surface\n" ] }, { "cell_type": "markdown", "id": "b8eda923", "metadata": {}, "source": [ "
Cvičení 01.03: Vykreslete průběh funkce log(x) pro x od 0.1 do 10. Osy grafu popište, přidejte legendu a obrázek uložte ve formátu *.jpg.
" ] }, { "cell_type": "code", "execution_count": 45, "id": "c91c0296", "metadata": {}, "outputs": [], "source": [ "# Cviceni 01.03" ] }, { "cell_type": "markdown", "id": "1398abec", "metadata": {}, "source": [ "
Tip: Další příklady a návody pro práci s knihovnou matplotlib lze nalézt na https://matplotlib.org/.
" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.13" } }, "nbformat": 4, "nbformat_minor": 5 }