IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

2. diel - Dátové typy

V predchádzajúcej lekcii, 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 znakov
  • integer - celé číslo
  • float - číslo s desatinou čiarkou
  • complex - komplexné číslo
  • bool - logická hodnota

Ako zistiť typ údajov premennej?

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:

print(type("Hello World!"))
print(type(123))
print(type(3.141592))
print(type(complex(2,1)))
print(type(True))

Vo výstupe konzoly dostaneme:

Determining the variable type:
class 'str'
class 'int'
class 'float'
class 'complex'
class 'bool'

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:

import numpy as 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).

Nejedná sa o celý zoznam, ale o výber tých, s ktorými sa najčastejšie stretneme. NumPy používa tieto znaky, aby sme mohli ľahko zistiť, o aký typ ide a zároveň aby sa typy neplietli s bežnými natívnymi typmi Pythona.

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:

s = str("Hello World!")

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:

my_int32 = np.int32(64) # The numbers in the argument are given just as an example.

my_int64 = np.int64(1325) # In reality, they can be any values.

Pokiaľ chceme, aby sa počet bitov zvolil automaticky, napíšeme namiesto počtu bitov podčiarknutie (_):

my_int = np.int_(42)

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:

my_uint = np.uint(23)

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.

my_float = np.float_(1.414)

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ť:

my_double = np.double(3.141592)

c - complex (komplexné číslo)

Komplexné čísla sa vytvoria jednoducho z komplexných čísel, ako ich poznáme v Pythone:

my_complex = np.complex_(complex(2, 3))

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:

my_bool = np.bool_(True)

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:

# 20. July 2023, 17h 23min 10.42s
my_datetime1 = np.datetime64('2023-07-20T17:23:10.42')
# 20. July 2023
my_datetime2 = np.datetime64('2023-07-20')
# Works even without days
my_datetime3 = np.datetime64('2023-07')

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:

my_int32 = np.int32(64)
print(my_int32.dtype)  # int32

my_int64 = np.int64(1325)
print(my_int64.dtype)  # int64

my_uint = np.uint(23)
print(my_uint.dtype)  # uint64

my_float = np.float32(1.414)
print(my_float.dtype)  # float32

my_double = np.double(3.141592)
print(my_double.dtype)  # float64

my_complex = np.complex_(complex(2, 3))
print(my_complex.dtype)  # complex128

my_bool = np.bool_(True)
print(my_bool.dtype)  # bool

my_datetime = np.datetime64('2023-07-20T17:23:10.42')
print(my_datetime.dtype)  # datetime64[ms]

Vo výstupe uvidíme:

Variable types:
int32
int64
uint32
float32
float64
complex128
bool
datetime64[ms]

To je k základným dátovým typom NumPy všetko.

V nasledujúcej lekcii, Tvorba polí, si ukážeme, ako vytvoriť pole knižnice NumPy ndarray. Ukážeme si, ako to urobiť pomocou už známych zoznamov Pythonu aj pomocou metód, ktoré ponúka sama knižnica NumPy.


 

Predchádzajúci článok
Predstavenie knižnice
Všetky články v sekcii
NumPy - Matematika v Pythone
Preskočiť článok
(neodporúčame)
Tvorba polí
Článok pre vás napísal Miloš Halda
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje především bioinformatice a s ní souvisejícím tématům. Nevyhýbá se OOP jazykům, statistice a nástrojům pro analýzu dat.
Aktivity