Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

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áli knižnice NumPy v Pythone sa najskôr pozrieme na to, aké nové dátové typy knižnica do Pythonu 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, aké defaultné dátové typy Python má:

  • stringreťazec znakov,
  • integercelé číslo,
  • float – číslo s desatinnou čiarkou,
  • complexkomplexné číslo,
  • boollogická hodnota.

Ako zistiť dátový typ 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 do konzoly dostaneme:

The determination of the variable type
<class 'str'>
<class 'int'>
<class 'float'>
<class 'complex'>
<class 'bool'>

Ak chceme v prostredí Jupyter Notebooku vypísať iba jednu premennú, nemusíme ju 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

Konečne 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ť.

Na 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ť a v 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:

  • Uunicode string (reťazec unicode znakov),
  • iinteger (celé číslo),
  • uunsigned integer (nezáporné celé číslo),
  • ffloat (číslo s desatinnou čiarkou),
  • ccomplex (komplexné číslo),
  • bboolean (logická premenná),
  • Mdatetime (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 Pythonu.

NumPy typy dávajú zmysel najmä vo vnútri polí (ndarray) a pri numericky náročných výpočtoch, kde je dôležitá rýchlosť, pamäťová úspornosť a presná kontrola nad dtype.

Jednotlivé dátové typy NumPy

Poďme sa pozrieť na jednotlivé dátové typy konkrétne.

U - unicode string (reťazec unicode znakov)

Tento NumPy dátový typ je ekvivalentný typu str v Pythone s pevne určenou dĺžkou.

Vytvoríme ho takto:

s = np.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 int v Pythone. V určitých prípadoch sa nám bude hodiť, že ho možno definovať aj ako int32, int64.

Na vytvorenie premennej tohto typu použijeme nasledujúci kód:

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

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

Ak 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 len výnimočne. Oproti bežnému typu int totiž neumožňuje používať záporné hodnoty. Hodí sa napríklad pri optimalizácii pamäte, ak pracujeme s veľmi veľkými nezápornými číslami a vieme, že sa nikdy nedostaneme do záporných hodnôt.

Rovnako ako pri type int môžeme zvoliť presnú veľkosť podľa počtu bitov. K dispozícii sú napríklad uint8, uint16, uint32 alebo uint64:

my_uint32 = np.uint32(23)
my_uint64 = np.uint64(23)

f - float (číslo s desatinnou čiarkou)

Typ f je ekvivalent dátového typu float v Pythone. Ak chceme presne určiť veľkosť čísla v bitoch, môžeme použiť konkrétne dátové typy ako float16, float32 alebo float64.

my_float32 = np.float32(1.414)

Ak nepotrebujeme riešiť veľkosť čísla, použijeme priamo vstavaný Python typ:

my_float = float(1.414)

c - complex (komplexné číslo)

NumPy ponúka komplexné dátové typy s presne určenou veľkosťou - podľa počtu bitov pre reálnu a imaginárnu časť. Konštruktor môže prijať dve čísla, teda reálnu a imaginárnu časť zvlášť alebo jedno komplexné číslo zapísané ako literál:

my_complex128 = np.complex128(2, 3)
my_complex64 = np.complex64(2 + 3j)

b - boolean (logická premenná)

Boolean hodnoty môžeme vytvárať priamo pomocou vstavaného Python typu bool:

my_bool = bool(True)

Ak potrebujeme priamo NumPy dátový typ (napr. pre použitie v poliach alebo pri definovaní dtype), použijeme np.bool_:

muj_bool = np.bool_(True)

M - np.datetime64 (dátum a čas)

Na uloženie času do premennej slúži typ np.datetime64. 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,
  • DD je deň,
  • HHhodiny,
  • MMminúty,
  • SSsekundy.

Znak T píšeme ako rozdelenie dátumu a času.

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. Tiež nemusíme napríklad uviesť sekundy. Poďme si ukázať niekoľko príkladov:

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

Ako zistiť typ obsiahnutý v NumPy objekte

Na záver si poďme ukázať, ako zistíme konkrétny typ u NumPy objektov. Slúži na to atribút dtype:

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

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

my_uint64 = np.uint64(23)
print(my_uint64.dtype) # uint64

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

my_float64 = np.float64(3.141592)
print(my_float64.dtype) # float64

my_complex = np.complex128(2 + 3j)
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
uint64
float32
float64
complex128
bool
datetime64[ms]

Princíp funguje aj pre NumPy poľa.

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

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


 

Predchádzajúci článok
NumPy - Predstavenie knižnice
Všetky články v sekcii
NumPy - Matematika v Pythone
Preskočiť článok
(neodporúčame)
NumPy - 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