Python, numpy

Python alapok

  • Tömor, magas szinten absztraktált
  • Interpretált
  • Dinamikus, erős típusrendszer
  • Többparadigmás
  • Open-source
  • Párhuzamosítási lehetőségek korlátozottak
  • Egyes feladatokhoz lassú lehet

Python objektumok

  • Memóriacímük lekérhető az id() függvénnyel
  • Vannak alaptípusok, konténertípusok és felhasználó által definiált típusok, lekerhető az type() függvénnyel.
    • vannak mutable és immutable típusok

Iterálható konténertípusok

  • Képesek egyesével visszaadni az elemeiket
  • Így lehet rajtuk iterálni, pédául for ciklussal
  • A gyakorlatban ez azt jelenti, hogy értelmezhető rá az __iter__() függvény, mely egy iterátor objektumot ad vissza
  • A __next__() függvénnyel érjük el a következő elemet
  • Iterátort össze lehet gyűjteni szekvencia típussá
  • StopIteration exceptiont vált ki, ha elfogynak az iterálható elemek.

Adatszerkezetek

  • Lista
    • Elemei lehetnek különböző típusúak
    • Dinamikus memóriafoglalás
    • Tömbként van implementálva
    • Több elem elérése: List[from:to:step]
  • Tuple
  • Set
    • Minden elem egyszer szerepelhet
    • Vegyes típusok is lehetnek, de csak immutable típusok
  • Dict

Függvények

  • Opcionális paraméterek (default értékkel)
  • Lambdák

Vezérlési szerkezetek

  • Kódblokkok indentációval vannak jelölve

  • Szülő utasítás után indentált blokk kell

  • Egy blokk ugyan annyi karakterrel van indentálva

  • Indentáció lehet tab, vagy space, de keverni nem lehet

  • if-elif-else

  • for, while

  • list comprehension

Hasznos függvények

  • map()
  • filter()
  • zip()
  • enumerate()
  • min(), max()
  • any(), all()

Hibakezelés

  • Szintaxis hibák: ha az interpreter nem tudja értelmezni a kódot
  • Futási idejű exception-ök
  • assert-ek
  • unittest modul: assertTrue(), assertEqual()

Numpy

  • Gyors numerikus számítások
  • Hatékony nyelveket írt, párhuzamosító kódot hív meg.
  • Optimálish cache használat
  • Sok neurális háló könyvtár épül numpy-ra

ndarray

  • Homogén típusú elemeket tartalmaz, 0-tól indexelve
  • Meghatározó attribútumok: shape, dtype
  • Az elemek száma nem változhat, de az alakja igen
  • A memóriában folytonosan, egy dimenzióban helyezkednek el az adatok

Univerzális függvények

  • Elemenkénti műveleteket hajtanak végre ndarray-eken
  • Egyszerű algebrai függvények
  • A broadcasting megengedi, hogy a műveleteket olyan tömbökön is végrehajtjuk, amelyeknek nem egyezik meg teljesen az alakjuk

Broadcasting

  • Ha két tömb dimenziójának száma nem egyezik, a kevesebb dimenzióval rendelkező tömb új első tengelyeket kap. Éppen annyit, hogy dimenzióik száma egyezzen.
  • A második szabály, ha valamelyik tengely mentén az egyik tömb hossza egy, az a tömb azon a tengly mentén annyiszor ismétlődik, hogy a hossza egenlő legyen a másik tömbével.

Advanced indexing

  • Advanced index esetén slice-ok helyett használhatunk bármilyen szekvenciát, ami integereket vagy logikai változókat tartalmaz
  • Mindig másolatot ad vissza az egyszerű indexeléssel szemben
  • Állhat advanced indexelt tömb értékadás bal oldalán, ilyenkor nem készül másolat, és az eredeti tömb íródik felül.

Hasznos függvények

  • Szélsőértékek:
    • np.max(), np.min()
    • np.argmax(), np.argmin()
  • Aretmetikai műveletek
    • np.sum(), np.cumsum()
    • np.prod(), np.cumprod()
    • np.mean(), np.var(), np.std()
  • Logikai műveletek
    • np.all()
    • np.any()
  • ndarray.flatten()
  • np.concatenate()
  • np.stack()
  • np.linspace(), np.logspace()
  • np.unique()
  • np.bincount()
  • np.diff()

Források