Jupyter notebook a základy Pythonu
Contents
1. Jupyter notebook a základy Pythonu#
*.ipynb
pro pozdější off-line editaci v prostředí Anaconda, nebo pro on-line editaci v Google Colab.1.1. Interaktivní Jupyter notebook#
Napište print('Hello, World!')
a stiskněte Shift
+
Enter
(nebo Ctrl
+
Enter
)
print('Hello, World')
Hello, World
Pomocí klávesy b
vložíte další řádek do JP.
Stiskněte
b
.
Odstranění řádku: vyberte řádek v JP a stiskněte d
+
d
Klávesou a
vložíte nový řádek nad právě vybraný.
Stiskněte
a
.Vyberte tento nový řádek a stiskněte
m
. Nyní lze do řádku místo kódu zapisovat text,Zadávání ukončíte stisknutím kombinace
Shift
+
Enter
.Pokud chcete řádek převést na kód, stiskněte
y
.
Pro nápovědu stiskněte h
.
1.2. Python#
Jednořádkový komentář se zadává za znak #
, více řádků lze zakomentovat pomocí """
a """
:
# toto je komentar
"""
Komentar
na vice
radku...
"""
print("Hello, World!")
Hello, World!
Inicializace proměnných a
, b
, základní aritmetické operace a výpis výsledku pomocí funkce print()
:
a=43
b=5.0
soucet=a+b
rozdil=a-b
soucin=a*b
podil=a/b
mocnina=a**b
zbytek_po_deleni = a%b
# vypis
print('Soucet ',soucet)
print('Rozdil ',rozdil)
print('Soucin ',soucin)
print('Podil ',podil)
print('Mocnina ',mocnina)
print('Zbytek po deleni ',zbytek_po_deleni)
Soucet 48.0
Rozdil 38.0
Soucin 215.0
Podil 8.6
Mocnina 147008443.0
Zbytek po deleni 3.0
a=3.0
b=4.0
v=7.0
S=a*b
V=1/3*S*v
print(V)
28.0
1.3. Podmínkové cykly#
1.3.1. If … else#
Za klíčovými slovy if
a else
musíme psát :
.
cislo = 0
if cislo > 0:
print(cislo, "je kladne.")
elif cislo <0:
print(cislo, "je zaporne")
else:
print("musi to byt nula")
print("Tento text se vypise vzdy.")
musi to byt nula
Tento text se vypise vzdy.
1.3.2. For …#
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
.
for x in range(10):
print(x)
0
1
2
3
4
5
6
7
8
9
1.3.3. While…#
cislo = 0
while cislo < 10:
print(cislo)
cislo = cislo+1 # ekvivalenti zapis je take: cislo += 1
0
1
2
3
4
5
6
7
8
9
1.3.4. Break#
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()
.
# Ze seznamu cislic 0,1,2,... chci vypsat pouze prvni dve cislice.
seznam_cislic = range(0,5)
for cislo in range(0, len(seznam_cislic)):
if cislo == 2:
break
else:
print('Cislo: ',seznam_cislic[cislo])
print('Pocitadlo: ',cislo)
print("Hotovo")
Cislo: 0
Pocitadlo: 0
Cislo: 1
Pocitadlo: 1
Hotovo
1.3.5. Continue#
Příkaz continue
ukončí aktuální iteraci v cyklu a pokračuje další iterací.
# Ze seznamu cislic 0,1,2,... chci vypsat vsechny cislice, krome dvojky.
seznam_cislic = range(0,5)
for cislo in range(0, len(seznam_cislic)):
if cislo == 2:
continue
else:
print('Cislo: ',seznam_cislic[cislo])
print('Pocitadlo: ',cislo)
print("Hotovo")
Cislo: 0
Pocitadlo: 0
Cislo: 1
Pocitadlo: 1
Cislo: 3
Pocitadlo: 3
Cislo: 4
Pocitadlo: 4
Hotovo
1.4. Funkce#
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
.
def objem_jehlanu(a,b,v):
return 1/3*a*b*v
print("Objem jehlanu = ",objem_jehlanu(2,3,4))
Objem jehlanu = 8.0
def funkce(c):
if cislo % 2 == 0:
print('Cislo ',c,' je sude.')
else:
print('Cislo ',c,' je liche.')
cislo = 6
funkce(cislo)
Cislo 6 je sude.
1.5. Numerická knihovna numpy#
Pro import numerické knihovny numpy
použijeme příkaz:
import numpy as np
1.5.1. Maticové operace#
Pole (vektor, matice) lze vytvářet pomocí funkce array()
:
# vektor
a = np.array([1, 2, 3])
# matice (pole)
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
array
má první prvek index 0!Rozměry pole zjistíme pomocí funkce shape
:
print(a.shape)
print(A.shape)
(3,)
(3, 3)
Funkce size
vrátí počet prvků v poli:
print(a.size)
print(A.size)
3
9
Matici lze transponovat funkcí transpose()
:
A_transponovana = A.transpose()
print(A_transponovana)
[[1 4 7]
[2 5 8]
[3 6 9]]
Pro vytváření polí lze používat následující generátory:
Pomocí funkce
arange()
vytvoříme pole s prvky od 0 do 10 (poslední prvek není obsažen) a krokem 1:
pole = np.arange(0,10,1)
print(pole)
[0 1 2 3 4 5 6 7 8 9]
Pomocí funkce
linspace()
vygenerujeme pole s prvky od 0 do 10 (včetně), přičemž počet prvků je 20:
pole = np.linspace(0,10,20)
print(pole)
[ 0. 0.52631579 1.05263158 1.57894737 2.10526316 2.63157895
3.15789474 3.68421053 4.21052632 4.73684211 5.26315789 5.78947368
6.31578947 6.84210526 7.36842105 7.89473684 8.42105263 8.94736842
9.47368421 10. ]
Příkazem
logspace()
vytvoříme pole od 0 do 10 s počtem prvků 20 v logaritmickém měřítku (\(\log_{10}\)):
pole = np.logspace(0,10,20,base=10)
print(pole)
[1.00000000e+00 3.35981829e+00 1.12883789e+01 3.79269019e+01
1.27427499e+02 4.28133240e+02 1.43844989e+03 4.83293024e+03
1.62377674e+04 5.45559478e+04 1.83298071e+05 6.15848211e+05
2.06913808e+06 6.95192796e+06 2.33572147e+07 7.84759970e+07
2.63665090e+08 8.85866790e+08 2.97635144e+09 1.00000000e+10]
Pomocí funkce
zeros()
vytvoříme nulovou matici 2x2:
pole = np.zeros((2,2))
print(pole)
[[0. 0.]
[0. 0.]]
Funkcí
ones()
vytvoříme jedničkovou matici 3x3:
pole = np.ones((3,3))
print(pole)
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
Pomocí funkce
eye()
vytvoříme matici 3x3 s jedničkami na diagonále, ostatní hodnoty jsou nulové:
pole = np.eye(3)
print(pole)
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
Pole náhodných čísel v rozmezí 0 az 1 se vygeneruje pomocí funkce
np.random.rand()
:
pole_nahodnych_cisel = np.random.rand(3,2)
print(pole_nahodnych_cisel)
[[0.96928324 0.4717543 ]
[0.63600405 0.75182797]
[0.06205565 0.76172901]]
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:
prvni_prvek_pole = A[0,0]
print(prvni_prvek_pole)
1
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:
v = np.arange(0,7)
print(v)
vyber_z_v = v[0:6:2]
print(vyber_z_v)
[0 1 2 3 4 5 6]
[0 2 4]
Podobně u matice \(A\) vybereme např. poslední dva prvky ve třetím sloupci.
A_vyber = A[1:,2]
print(A_vyber)
[6 9]
U matice \(A\) vybereme první řádek:
prvni_radek = A[0,:]
print(prvni_radek)
[1 2 3]
U matice \(A\) vybereme první sloupec:
prvni_sloupec = A[:,0]
print(prvni_sloupec)
[1 4 7]
Násobení matic a vektorů se provádí pomocí operátoru dot
:
# matice 2x3
A = np.array([[1,2,3],[4,5,6]])
print(A)
print(A.shape)
# matice 3x2
B = np.array([[1,2],[3,4],[5,6]])
print(B)
print(B.shape)
# vysledek
C = np.dot(A,B)
print(C)
[[1 2 3]
[4 5 6]]
(2, 3)
[[1 2]
[3 4]
[5 6]]
(3, 2)
[[22 28]
[49 64]]
# maticove nasobeni
print(np.dot(C,C))
# nasobeni po prvcich
print(C*C)
[[1856 2408]
[4214 5468]]
[[ 484 784]
[2401 4096]]
1.5.2. Funkce#
numpy
obsahuje často používané funkce a konstanty (napr. sqrt()
, log()
, log10()
, sin()
, abs()
, e
, pi
, …):
print(np.sqrt(5))
print(np.log(5))
print(np.log10(5))
print(np.sin(5))
print(np.abs(-3))
print(np.e)
print(np.pi)
2.23606797749979
1.6094379124341003
0.6989700043360189
-0.9589242746631385
3
2.718281828459045
3.141592653589793
Součet prvků v poli je dán funkcí sum()
:
# soucet prvku v poli
soucet = np.sum(A)
print(soucet)
21
Minimální a maximální hodnotu v poli určíme funkcí min()
a max()
:
# maximalni hodnota v poli
maximum = np.max(A)
print(maximum)
# minimalni hodnota v poli
minimum = np.min(A)
print(minimum)
6
1
Funkce average()
vrací průměrnou hodnotu; std()
je směrodatná odchylka a var()
je rozptyl:
# prumerna hodnota
prumer = np.average(A)
print(prumer)
# smerodatna odchylka
smerodatna_odchylka = np.std(A)
print(smerodatna_odchylka)
# rozptyl
rozptyl = np.var(A)
print(rozptyl)
3.5
1.707825127659933
2.9166666666666665
Index prvku v poli lze najít pomocí funkce argwhere()
:
index_hledaneho_prvku = np.argwhere(A == 3)
print(index_hledaneho_prvku)
[[0 2]]
numpy
lze nalézt na https://numpy.org/.1.6. Visualizace dat#
Pro kreslení grafů využijeme knihovnu matplotlib.pyplot
:
import matplotlib.pyplot as plt
1.6.1. Graf jedné proměnné#
Vygenerujeme \(x\) a \(y\) hodnoty pro funkci sin()
:
x = np.linspace(0,4*np.pi,100)
y = np.sin(x)
Nejdříve je potřeba vytvořit obrázek pomocí fig
. Vykreslení dat provedeme příkazem plot()
:
fig, ax = plt.subplots()
ax.plot(x,y)
[<matplotlib.lines.Line2D at 0x778d4337ff40>]
Přidáme popisky os pomocí set_xlabel()
, set_ylabel()
a název grafu pomocí set_title()
:
fig, ax = plt.subplots()
ax.plot(x,y)
ax.set_xlabel('x')
ax.set_ylabel('sin(x)')
ax.set_title('Graf funkce sin(x)')
Text(0.5, 1.0, 'Graf funkce sin(x)')
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()
:
# funkce cos()
y1 = np.cos(x)
fig, ax = plt.subplots()
ax.plot(x,y)
# vykreslime funkci cos()
ax.plot(x,y1, color='red',linestyle='dashed',linewidth=2,label='cos(x)',alpha=0.5)
ax.set_xlabel('x')
ax.set_ylabel('sin(x), cos(x)')
ax.set_title('Grafy funkci sin(x) a cos(x)')
ax.legend()
<matplotlib.legend.Legend at 0x778d432157c0>
Na závěr obrázek uložíme příkazem savefig()
:
fig.savefig("obrazek.png", dpi=300)
1.6.2. Visualizace závislosti dvou proměnných#
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.
Vytvoříme mřížku \(x\times y\) pomocí funkce meshgrid()
:
fig, ax = plt.subplots()
osa_x = np.linspace(-2, 2, 50)
osa_y = np.linspace(-2, 2, 50)
(x,y) = np.meshgrid(osa_x,osa_y)
Spočítáme hodnoty funkce \(z(x,y)\):
z = np.exp(-np.sqrt(x**2+y**2))*np.cos(2*x)*np.sin(2*y)
2D graf vykreslíme pomocí funkce pcolor()
s parametrem shading='auto'
:
fig, ax = plt.subplots()
osa_x = np.linspace(-2, 2, 50)
osa_y = np.linspace(-2, 2, 50)
(x,y) = np.meshgrid(osa_x,osa_y)
z = np.exp(-np.sqrt(x**2+y**2))*np.cos(2*x)*np.sin(2*y)
ax.pcolor(x,y,z,shading='auto')
<matplotlib.collections.PolyCollection at 0x778d4271e880>
Kontury získáme použitím funkce contour()
:
fig, ax = plt.subplots()
osa_x = np.linspace(-2, 2, 50)
osa_y = np.linspace(-2, 2, 50)
(x,y) = np.meshgrid(osa_x,osa_y)
z = np.exp(-np.sqrt(x**2+y**2))*np.cos(2*x)*np.sin(2*y)
ax.contour(x,y,z)
<matplotlib.contour.QuadContourSet at 0x778d425445b0>
1.6.3. 3D visualizace#
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:
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')
Vytvoříme mřížku \(x\times y\) pomocí funkce meshgrid
:
osa_x = np.linspace(-2, 2, 50)
osa_y = np.linspace(-2, 2, 50)
(x,y) = np.meshgrid(osa_x,osa_y)
Spočítáme hodnoty funkce \(z(x,y)\):
z = np.exp(-np.sqrt(x**2+y**2))*np.cos(2*x)*np.sin(2*y)
3D data vykreslíme pomocí funkce plot_surface()
a přidáme popisky os:
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')
osa_x = np.linspace(-2, 2, 50)
osa_y = np.linspace(-2, 2, 50)
(x,y) = np.meshgrid(osa_x,osa_y)
z = np.exp(-np.sqrt(x**2+y**2))*np.cos(2*x)*np.sin(2*y)
ax.plot_surface(x, y, z)
ax.set(xlabel='x', ylabel='y', zlabel='z')
[Text(0.5, 0, 'x'), Text(0.5, 0.5, 'y'), Text(0.5, 0, 'z')]
x = np.linspace(1e-1,10,100)
y = np.log10(x)
fig, ax = plt.subplots()
ax.plot(x,y,label='log(10)')
ax.set_xlabel('x')
ax.set_ylabel('log(x)')
ax.legend()
fig.savefig('log10.jpg',dpi=100)
matplotlib
lze nalézt na https://matplotlib.org/.