Pole E 3011 Jan Böhm RECETOX April 5, 2023 Jan Böhm (RECETOX) Přednáška VII April 5, 2023 1 / 15 Co nás dnes čeká 1 Pole 2 Vektory Jan Böhm (RECETOX) Přednáška VII April 5, 2023 2 / 15 Pole - definice Pole Pole (anglicky list) je datová struktura v Pythonu. Je to posloupnost hodnot. Vytváří se pomocí hranatých závorek. 1 # list init 2 listNumeric = [3, 0, 1, 9] 3 listString = ["apple", "banana", "cherry"] 4 listBool = [True, True, False, True] 5 emptyList = [] Jan Böhm (RECETOX) Přednáška VII April 5, 2023 3 / 15 Pole - vlastnosti Pole - indexování Python indexuje prvky od 0. Tzn. že první hodnota má index 0, druhá má index 1, atd. Pokud chceme brát hodnoty od konce, poslední je -1, předposlední -2, … 1 listString = ["apple", "banana", "cherry"] 2 print(listString[1]) 3 print(listString[0]) 4 print(listString[3]) 5 6 print(listString[-2]) 7 8 # change value at given index 9 listString[1] = "beer" 10 print(listString[1]) Jan Böhm (RECETOX) Přednáška VII April 5, 2023 4 / 15 Pole - vlastnosti Pole - přidávání hodnot Existuje více způsobů, jak přidávat hodnoty do pole. Ukážeme si dva z nich: list.append(value) – přidá value na konec pole list.insert(index, value) – přidá value na pozici před index 1 listString = ["apple", "banana", "cherry"] 2 3 listString.append("dragonfruit") 4 listString.insert(1,"avocado") 5 6 print(listString) Jan Böhm (RECETOX) Přednáška VII April 5, 2023 5 / 15 Pole - vlastnosti Pole - odstraňování hodnot Existuje více způsobů, jak odstraňovat hodnoty z pole. Ukážeme si tři z nich: del list[index] – odstraní hodnotu na pozici index list.remove(value) – odstraní první výskyt value z pole list.pop(index = -1) – odstraní hodnotu na pozici index a vrátí ji 1 listString = ["apple", "banana", "cherry", 2 "banana", "dragonfruit"] 3 del listString[2] 4 listString.remove("banana") 5 fruit = listString.pop() 6 7 print(listString) 8 print(fruit) Jan Böhm (RECETOX) Přednáška VII April 5, 2023 6 / 15 Pole - vlastnosti Pole - několik dalších užitečností. list1 + list2 – spojení (concat) dvou listů len(value) – počet prvků v poli (délka pole) list.sort(reverse = False) – seřadí pole (s reverse = True pozpátku 1 fruits = ["apple", "banana", "cherry"] 2 veggies = ["pepper", "potato", "carrot", "onion"] 3 4 food = fruits + veggies 5 print(len(food)) 6 food.sort() 7 print(food) 8 food.sort(reverse = True) 9 print(food) Jan Böhm (RECETOX) Přednáška VII April 5, 2023 7 / 15 Posloupnost Funkce range(start, stop, step) vytváří aritmetickou posloupnost od start (inclusive) po stop (exclusive) z krokem step. Výsledkem je objekt typu range, který ale můžeme pomocí list() převést na pole: 1 print(list(range(5))) 2 print(list(range(1,5))) 3 print(list(range(10,0,-1))) Jan Böhm (RECETOX) Přednáška VII April 5, 2023 8 / 15 Aplikování funkce na každý prvek v poli 1 L = [1,2,3] 2 L = L + 2 Jan Böhm (RECETOX) Přednáška VII April 5, 2023 9 / 15 Aplikování funkce na každý prvek v poli 1 L = [1,2,3] 2 L = L + 2 Tento kus kódu ohlásí chybu, protože dělení je operace která potřebuje dvě čísla, ne list a číslo. Pokud chceme nějakou operaci provést s každým prvkem v poli, existuje na to typicky ”pythonovská” konstrukce: Jan Böhm (RECETOX) Přednáška VII April 5, 2023 9 / 15 Aplikování funkce na každý prvek v poli 1 L = [1,2,3] 2 L = L + 2 Tento kus kódu ohlásí chybu, protože dělení je operace která potřebuje dvě čísla, ne list a číslo. Pokud chceme nějakou operaci provést s každým prvkem v poli, existuje na to typicky ”pythonovská” konstrukce: 1 L = [1,2,3] 2 L = [l + 2 for l in L] 3 print(L) Nebo pokud například si chceme připravit posloupnost od 0 do 1 s krokem 0.1, tak můžeme takto: 1 seq = [x/10 for x in list(range(11))] Jan Böhm (RECETOX) Přednáška VII April 5, 2023 9 / 15 Statistiky Statistiky Nad polem čísel L můžeme chtít spočítat statistiky. Např. minimum min(L) a maximum max(L) součet sum(L) počet prvků len(L) … Jan Böhm (RECETOX) Přednáška VII April 5, 2023 10 / 15 Co nás dnes čeká 1 Pole 2 Vektory Jan Böhm (RECETOX) Přednáška VII April 5, 2023 11 / 15 Vektory Vektory v Pythonu Pro práci s vektory existují specializované moduly do Pythonu, např. numpy. My si však vystačíme se základním Pythonem a potřebné funkce si naimplementujeme. Co je vektor? Vektorem budeme v Pythonu rozumět pole čísel u = [1, -2, 1/3]. Jan Böhm (RECETOX) Přednáška VII April 5, 2023 12 / 15 Vektorová algebra Co umíme dělat s vektory I Umím vytvořit nulový vektor 0 = (0, 0, . . . , 0) libovolné délky n. Pro libovolný vektor u mohu spočítat jeho (euklidovskou) velikost u = u2 1 + u2 2 + · · · + u2 n Pro libovolný vektor u ∈ Rn a skalár c ∈ R mohu spočítat c · u = (cu1, cu2, . . . , cun). Dva vektory u a v stejné délky můžeme sečíst (nebo odečíst): u ± v = (u1 ± v1, u2 ± v2, . . . , un ± vn). Pro libovolnou dvojici stejně dlouhých vektorů umím spočítat jejich euklidovskou vzdálenost u − v Lineární kombinace cu + dv + . . . Jan Böhm (RECETOX) Přednáška VII April 5, 2023 13 / 15 Vektorová algebra Co umíme dělat s vektory II: násobení Je více způsobů, jak násobit vektory stejné délky. Skalární součin u · v = u1v1 + u2v2 + . . . unvn. Odchylka vektorů ∠uv = θ, kde cos θ = u·v u v Vektorový součin (v R3) u × v = n u v sin θ. kde θ je odchylka ∠uv a n je vektor kolmý na u a v. Smíšený součin u · (v × w). Jan Böhm (RECETOX) Přednáška VII April 5, 2023 14 / 15 Vektorová algebra Skalární součin Skalární součin u · v nám umožňuje poznat, zda jsou 2 vektory na sebe kolmé (když je 0). Vektorový součin Velikost vektorového součinu v R3 u × v je obsah rovnoběžníku tvořeného vektory u a v Smíšený součin Smíšený součin v R3 u · (v × w) je objem rovnoběžnostěnu tvořeného vektory u, vaw. Jan Böhm (RECETOX) Přednáška VII April 5, 2023 15 / 15