🏎️ Rýchlokurz jazyka Python
Import knižníc
Jednoduchý import knižnice/balíčka
Pomocou príkazu import načítate do vášho skriptu potrebné knižnice/balíčky.
Štruktúra príkazu je nasledovná: import NÁZOV_KNIŽNICE
Keď chcete použiť funkciu z importovaného balíčka je syntax nasledovná: NÁZOV_KNIŽNICE.NÁZOV_PRÍKAZU
Import knižnice/balíčka pomocou skratkového slova
Aby sme ušetrili čas a znaky v kóde môžeme názov knižnice skrátiť pomocou nami definované skratkového slova.
Štruktúra je nasledovná: import NÁZOV_KNIŽNICE as SKRATKOVÉ_SLOVO
💡 V príprade knižnice NumPy je skratka “np” viacmenej nepísaným pravidlom, takto sa ku knižnici NumPy referuje vo veľkom množstve dokumentácie.
Keď chcete použiť funkciu z takto importovaného balíčka je syntax nasledovná: SKRATKOVÉ_SLOVO.NÁZOV_PRÍKAZU
Import konkrétnej funkcie/funkcií z knižnice
V prípade, že z nejakej knižnice potrebujeme len konkrétne funkcie môžeme importovať len tie.
Syntax je nasledovná: from NÁZOV_KNIŽNICE import NÁZOV_FUNKCIE, NÁZOV_FUNKCIE...
Všetky takto volané funkcie z knižníc sa používajú ako systémové. Neni preto nutné deklarovať balíček z ktorého pochádzajú.
💡 Aj v prípade takéhoto importu je možné použiť skratkové slovo, avšak v tomto prípade sa už vzťahuje na samotnú funckiu. Je tak možné funkcie z knižnice premenovať.
Import všetkých funkcií z knižnice
Ak chceme z balíčka importovať všetky funkcie takýmto spôsobom je syntax nasledovná: from NÁZOV_KNIŽNICE import *
Dátový typ Dictionary
Pre prácu s viacerými súbormi hodnôt, je vhodné použiť vstavaný dátový typ Dictionary (Slovník). Náš prípad použitia pre zadávanie súradníc miest, či parametrov elipsoidiov je celkom vhodný na použitie tohto dátového typu.
Syntax deklarácie tohto dátového typu môžeme zovšeobecnic nasledovne: NÁZOV_SLOVNÍKU = {"NÁZOV_PREMENNEJ":HODNOTA_PREMENNEJ, "NÁZOV_PREMENNEJ":HODNOTA_PREMENNEJ...}
Syntax pre zavolanie hodnoty premennej zo slovníka je nasledovná: NÁZOV_SLOVNÍKU["NÁZOV_PREMENNEJ"]
💡 Dictionaries (Slovníky) sú rozšíriteľné a upravovateľné, tieto vlastnosti opisujeme pojmom mutable.
Užitočné funkcie
V rámci prvého cvičenia sme okrem základných matematických funkcií, ktoré sú v Pythone resp.NumPy pomenované samoopisne použili aj niektoré menej časté funkcie a nástroje, ktoré však budeme často používať. Prikladám preto jednoduchý zoznam:
| Funkcia | Popis | Syntax | Príklad použitia |
|---|---|---|---|
np.degrees() |
Konverzia radiánov na stupne | np.degrees(hodnota_v_radianoch) |
np.degrees(np.pi) → 180.0 |
np.radians() |
Konverzia stupňov na radiány | np.radians(hodnota_v_stupnoch) |
np.radians(180) → 3.14159 |
round() / np.round() |
Zaokrúhľovanie čísla na zadaný počet desatinných miest | round(hodnota, pocet_miest)np.round(hodnota, pocet_miest) |
round(3.14159, 2) → 3.14 |
abs() / np.abs() |
Výpočet absolútnej hodnoty | abs(hodnota)np.abs(hodnota) |
abs(-5) → 5 |
Formátovaný výstup na obrazovku
Pre vypísanie hodnôt na obrazovku používame funkciu print("TEXT_KTORÝ_ZOBRAZUJEME").
V prípade, že textový reťazecm, ktorý chceme vypísať je potrebné výstup formátovať. Syntax pre túto operáciu má nasledovný tvar: print(f"{PREMENNÁ_KTORÚ_ZOBRAZUJEME}")
Keď to skombinujeme to môže vyzerať takto: print(f"Hodnota premennej X = {X}")
‼️ V prípade, že chcete vypísať hodnotu zo slovníka (Dictionary) je potrebné dbať na úvodzovky/apostrofy. Niektoré rozhrania môžu mať zo zhodujúcimi sa úvodzovkami problém, napr. Google Colab.
💡 V prípade, že rozhranie nepodporuje tento zápis:
print(f"NÁZOV_SLOVNÍKU["NÁZOV_PREMENNEJ"]"),je potrebné použiť v jednom z prípadov apostrofy, nasledovne:print(f"NÁZOV_SLOVNÍKU['NÁZOV_PREMENNEJ']")
Cyklus While (Jednoduchá iterácia)
V rámci matematickej kartografie sa stretneme z viacerími prípadmi, kedy bude nutné určiť výsledok rovnice pomocou numerickej metódy jednoduchej iterácie. Túto úlohu dokážeme rýchlo a elegantne algoritmizovať, pomocou cyklu while.
Štruktúru takéhoto algoritmu s odkazmi na porblém z cvičenia môžeme zapísať nasledovne:
- Fáza pred cyklom
- Definovanie premennej pre rozdiel a jeho počiatočná hodnota definovaná tak aby nebola splnená zastavovacia podmienka
diff = 1 - Definovanie premennej a počiatočnej hodnoty pre sledovanie počtu iterácií (nie je potrebné)
iteration = 0 - Definovanie počiatočnej hodnoty (0.iterácia)
t_0 = (Nitra["Z"])/((1-GRS80["e"]**2)*p) - Definovanie pomocnej hodnoty pre určenie rozdielu iterácií (nie je potrebné)
phi_0 = np.arctan(t_0) - Syntaktické definovanie začiatku cyklu
while PREMENNÁ_PRE_ROZDIEL LOGICKÝ_OPERÁTOR ZASTAVOVACIA_HODNOTA:v našom prípade to jewhile diff >= 0.00000000000001:
- Definovanie premennej pre rozdiel a jeho počiatočná hodnota definovaná tak aby nebola splnená zastavovacia podmienka
- Fáza cyklu (Odsadená po dvojbodke o 1 tabulátor)
- Výpočet hodnoty pre iteráciu
t = (Nitra["Z"])/(p-((GRS80["a"]*GRS80["e"]**2)/(np.sqrt(1+(1-GRS80["e"]**2)*(t_0**2))))) - Navýčenie pomocnej hodnoty o 1 pre počet iterácií (nie je potrebné)
iteration = iteration + 1 - Výpočet pomocnej hodnoty pre výsledok iterácie
phi = np.arctan(t) - Výpočet rozdielu aktuálnej a predchádzajúcej iterácie, táto hodnota slúži pre spustenie ďalšej iterácie alebo pre vyjdenie z cyklu (vhodné implementovať absolútnu hodnotu, v závislosti od logickej podmienky)
diff = abs(phi-phi_0) - Priradenie hodnoty aktuálnej iterácie to hodnoty pre počiatočnú (predchádzajúcu iteráciu), ktorá sa použije v ďalšej iterácii.
t_0 = t - Priradenie pomocnej hodnoty aktuálnej iterácie to hodnoty pre počiatočnú (predchádzajúcu iteráciu), ktorá sa použije v ďalšej iterácii na výpočet rozdielu (nie je potrebné).
phi_0 = phi
- Výpočet hodnoty pre iteráciu
- Fáza po cykle (Odsadená naspäť do pôvodnej vetvy kódu o 1 tabulátor)
- Priradenie výslednej (konečnej) iterácie do premmenej používanej na ďalšie výpočty (nie je potrebné)
Nitra["phi_2"] = phi
- Priradenie výslednej (konečnej) iterácie do premmenej používanej na ďalšie výpočty (nie je potrebné)
Kód
# Analyzovaný príklad z cvičenia (Nespúšťať, neobsahuje predchádzajúce vztahy potrebné na výpočet)
diff = 1
iteration = 0
t_0 = (Nitra["Z"])/((1-GRS80["e"]**2)*p)
phi_0 = np.arctan(t_0)
while diff >= 0.00000000000001:
t = (Nitra["Z"])/(p-((GRS80["a"]*GRS80["e"]**2)/(np.sqrt(1+(1-GRS80["e"]**2)*(t_0**2)))))
iteration = iteration + 1
phi = np.arctan(t)
diff = abs(phi-phi_0)
t_0 = t
phi_0 = phi
Nitra["phi_2"] = phiDefinovanie vlastných funkcií
V prípade, že potrebujeme nejakú konktŕetnu funkcionalitu, a nie je bežne dostupná v základnom Pythone, či nejakom balíčku je možné si chýbajúci výpočet alebo fubkciu lahko doprogramovať a mať ju kedykoľvek pripravenú na ďalšie výpočty. Definovanie vlastnej funkcie si ukážeme na príklade z cvičenia, vytvoríme funkciu na výpočet izometrickej šírky z elipsodickej. Štrktúra definovania vlastnej funkcie je nasledovná:
- Deklarácia funkcie a vstupných premenných
- Telo funkcie
- Deklarovanie návratov
Vo všeobecnosti to môžeme zapísať takto:
def NÁZOV_FUNKCIE(PREMENNÉ_ODDELENÉ_ČIARKOU):
TELO_FUNKCIE
return ČO_MÁ_VRÁTIŤ
Nezabudnite, že telo funckie a návrátené hodnoty sú odsadené !
V našom prípade to bude vyzerať takto: