2. diel - NumPy - Dátové typy
V predchádzajúcej lekcii, NumPy - Predstavenie knižnice , sme sa dozvedeli základné informácie o knižnici NumPy. Naučili sme sa, ako knižnicu pridať do svojho Python prostredia a nainštalovali si Jupyter Notebook.
V tomto tutoriále knižnice NumPy v Pythone sa najskôr pozrieme na to, aké nové dátové typy knižnica do Pythona prináša. Ďalej si vysvetlíme, na čo sa nám budú hodiť a ako ich používať.
Natívne dátové typy v Pythone
Ešte než sa pustíme do dátových typov v NumPy, pripomeňme si stručne, aké dátové typy má Python defaultne. V skratke je ich týchto päť:
string
- reťazec znakovinteger
- celé číslofloat
- číslo s desatinou čiarkoucomplex
- komplexné číslobool
- logická hodnota
V Pythone je zabudovaná funkcia type()
. Tá nám môže
pomôcť získať prehľad o tom, s akým typom premennej práve pracujeme:
Vo výstupe konzoly dostaneme:
Pokiaľ chceme vypísať v prostredí Jupyter Notebooku iba
jednu premennú, nemusíme písať do funkcie print()
. Stačí ju
len voľne nechať na konci bloku kódu. Túto techniku ale nie je možné
použiť pri programovaní v iných IDE, v konzole ani pri skriptovaní!
Dátové typy v NumPy
Napokon sa dostávame k dátovým typom z knižnice NumPy. Knižnica používa vlastné dátové typy založené na programovacom jazyku C. Vďaka tomu sú operácie NumPy rýchlejšie ako je v Pythone bežné.
Pozor, teraz neriešime objekty typu NumPy array
,
ale to, čo do nich budeme vkladať.
Pre vytváranie premenných daných typov v ukážkach nižšie musíme mať
importované numpy
pod aliasom np
:
Skratka np
sa pre NumPy používa v praxi bežne.
Pokojne by sme ale mohli as np
vynechať av ukážkach kódu
používať slovo numpy
. Funguje to rovnako.
Opäť si najskôr urobíme prehľad dátových typov, tentoraz aj so skratkami, pod ktorými NumPy dané typy používa:
U
-unicode string
(reťazec unicode znakov),i
-integer
(celé číslo),u
-unsigned integer
(nezáporné celé číslo),f
-float
(číslo s desatinnou čiarkou),c
-complex
(komplexné číslo),b
-boolean
(logická premenná),M
-datetime
(dátum a čas).
Celý zoznam vrátane konštrukcií sa nie je potrebné učiť naspamäť! Ide skôr o orientáciu. A pri inicializácii polí sa vytvorí ten správny typ automaticky
Jednotlivé dátové typy NumPy
Poďme sa pozrieť na jednotlivé dátové typy konkrétne.
U
-
unicode string
(reťazec unicode znakov)
Tento dátový typ je ekvivalentný typu string
v Pythone.
Vytvoríme ho takto:
Rovnako ako
string
v Pythone, aj typ U
má najrôznejšie metódy,
ktoré sa naň dajú použiť. Veľkú časť z nich je možné nájsť v module
np.char
.
i
- integer
(celé
číslo)
Typ i
je ekvivalentný typu integer
v Pythone. V
určitých prípadoch sa nám bude hodiť, že ho možno definovať aj ako
int32
, int64
a dokonca môžeme použiť aj
ľubovoľnú ďalšiu mocninu dvojky od 8
do 256
.
Štandardne sa používa int32
, ale pre veľmi veľké čísla je
potrebné použiť jeho násobnú verziu. Potom síce v pamäti počítača
zaberie miesto 32 bitov rovno 64 (respektíve 128, či 256), ale niekedy nie je
zvyšok.
Na vytvorenie premennej tohto typu použijeme nasledujúci kód:
Pokiaľ chceme, aby sa počet bitov zvolil automaticky, napíšeme namiesto
počtu bitov podčiarknutie (_
):
u
- unsigned integer
(nezáporné celé číslo)
Tento typ využijeme skôr v zriedkavých prípadoch. Oproti typu
integer
totiž unsigned integer
neumožňuje ísť pod
nulu. Využijeme ho napríklad pokiaľ optimalizujeme množstvo využitej
pamäte počas behu programu a pritom pracujeme s veľmi vysokými nezápornými
číslami.
Rovnako ako integer
, aj typ u
je možné použiť
vo variante s väčším rozsahom bitov. Pokiaľ použijeme konštruktor bez
čísla, počet bitov sa zvolí automaticky. Oproti konštruktoru typu
integer
(viď predchádzajúca sekcia) sa ale nepíše podtržítko
za názvom:
f
- float
(číslo s desatinnou
čiarkou)
Typ f
je ekvivalent dátového typu float
v
Pythone. Opäť je možné zvoliť počet bitov pri vytváraní premennej. Alebo
použiť konštruktor s podčiarkovníkom, ako v prípade typu
i
.
Pri type float
sa v praxi často stáva, že nám záleží na čo najdlhšej časti za
desatinou čiarkou bez zaokrúhlenia. Preto sa pre "dvojnásobný float" (teda
vlastne float32
) zaviedol typ double
. Aj takto je
možné float
v NumPy inicializovať:
c
- complex
(komplexné
číslo)
Komplexné čísla sa vytvoria jednoducho z komplexných čísel, ako ich poznáme v Pythone:
b
- boolean
(logická
premenná)
Podobne ako predchádzajúce typy, aj boolean
sa vytvára a
funguje podobne, ako ho bežne poznáme v Pythone:
Podčiarknutie
za kľúčovým slovom bool
nie je pri tomto type povinné. Zápisy
np.bool_(True)
a np.bool(True)
sú tak ekvivalentné.
Väčšina programátorov však volí skrátenú variantu
np.bool(True)
, pretože je kratšia a čitateľnejšia.
M
- datetime
(dátum
a čas)
Na uloženie času do premennej slúži typ datetime
. Spôsob
vytvorenia tejto premennej je opäť jednoduchý. Čas sa zadáva vo formáte
RRRR-MM-DDTHH:MM:SS
, kde RRRR
je rok, MM
je mesiac a DD
je deň. Znak T
sa napíše jednoducho
ako rozdelenie dátumu a času. HH
je hodina, druhé
MM
je minúta a SS
sú sekundy. Do sekúnd je možné
dať za desatinnú čiarku aj presnejšie vyjadrenie. Navyše nám typ dovoľuje
napísať len dátum alebo čas, ak chceme. Tiež môžeme neuviesť napr.
sekundy. Poďme si ukázať niekoľko príkladov:
Ako zistiť typ obsiahnutý v NumPy objekte
Na záver si poďme ešte ukázať, ako zistíme konkrétny typ pri NumPy
objektoch. Slúži na to atribút dtype
a je to veľmi jednoduché.
Princíp funguje aj pre NumPy poľa.
Ukážme si príklady pre jednotlivé typy premenných:
Vo výstupe uvidíme: To je k základným dátovým typom NumPy všetko.
V nasledujúcom kvíze, Kvíz - Dátové typy a polia v NumPy, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.