=== Tömb létrehozása === * Python listából / tuple-ből NumPy tömböt hoz létre: **np.array(iterable)** * Tartomány generálása (mint range, de array): **np.arange(start, stop, step)** * Egyenletesen elosztott num darab érték adott intervallumban: **np.linspace(start, stop, num)** * Nullákkal feltöltött tömb: **np.zeros(shape)** * 1-esekkel feltöltött tömb: **np.ones(shape)** * Inicializálatlan tömb (gyors, de szemétértékkel): **np.empty(shape)** * Adott értékkel feltöltött tömb: **np.full(shape, value)** * Egységmátrix: **np.eye(n)** * 0–1 közötti egyenletes eloszlás: **np.random.rand(...)** * Normál eloszlás: **np.random.randn(...)** * Véletlen egész számok: **np.random.randint(low, high, size)** === Tömb tulajdonságok === * Dimenziók mérete: **arr.shape** * Dimenziók száma: **arr.ndim** * Elemek száma: **arr.size** * Adattípus: **arr.dtype** * Típuskonverzió: **arr.astype(type)** === Matematikai alapműveletek (vektorizált) === * Elemankénti műveletek.: * **np.add(a, b)** * **np.subtract(a, b)** * **np.multiply(a, b)** * **np.divide(a, b)** * Hatványozás: **np.power(a, b)** * Négyzetgyök: **np.sqrt(a)** * Abszolútérték: **np.abs(a)** * e^x: **np.exp(a)** * Természetes logaritmus: **np.log(a)** === Aggregáló (redukciós) függvények === * Összegzés: **np.sum(a, axis=None)** * Átlag: **np.mean(a, axis=None)** * Medián: **np.median(a)** * Szórás: **np.std(a)** * Variancia: **np.var(a)** * Minimum: **np.min(a)** * Maximum: **np.max(a)** * Minimum indexe: **np.argmin(a)** * Maximum indexe: **np.argmax(a)** * Szorzat: **np.prod(a)** === Mátrix- és lineáris algebra === * Skalárszorzat / mátrixszorzás (régebbi forma): **np.dot(a, b)** * Modern mátrixszorzás operátor: **a @ b** * Mátrixszorzás: **np.matmul(a, b)** * Transzponálás: **np.transpose(a) / a.T** * Inverz mátrix: **np.linalg.inv(a)** * Determináns: **np.linalg.det(a)** * Sajátértékek, sajátvektorok: **np.linalg.eig(a)** * Lineáris egyenletrendszer megoldása: **np.linalg.solve(A, b)** === Indexelés és szűrés === * Boolean indexelés, feltételes szűrés: **a[a > 5]** * Feltétel indexei: **np.where(condition)** * Nem nulla elemek indexei: **np.nonzero(a)** * Értékek levágása intervallumra: **np.clip(a, min, max)** === Tömb átalakítás === * Átalakítás: **np.reshape(a, shape)** * 1D-re lapítás (másolat): **a.flatten()** * 1D-re lapítás (nézet, ha lehet): **a.ravel()** * Összefűzés: **np.concatenate([a, b], axis=0)** * Függőleges összefűzés: **np.vstack([...])** * Vízszintes összefűzés: **np.hstack([...])** * Felosztás: **np.split(a, indices)** === Rendezés és keresés === * Rendezett másolat: **np.sort(a)** * Helyben rendez: **a.sort()** * Rendezési indexek: **np.argsort(a)** * Egyedi elemek: **np.unique(a)** === Statisztikai / speciális === * Percentilis: **np.percentile(a, q)** * Kumulatív összeg: **np.cumsum(a)** * Kumulatív szorzat: **np.cumprod(a)** * Korreláció: **np.corrcoef(a, b)** * Konvolúció (pl. mozgóátlag): **np.convolve(a, kernel, mode)** === Broadcasting (nem függvény, hanem mechanizmus) === * Automatikus méretillesztés műveleteknél: * a + 5 a + np.array([1,2,3]) === Fontos logikai függvények === * Minden elem igaz? **np.all(condition)** * Van legalább egy igaz? **np.any(condition)** * És: **np.logical_and(a, b)** * Vagy: **np.logical_or(a, b)** === Fájlkezelés NumPy-val === * Szövegfájl betöltése: **np.loadtxt("file.txt")** * Mentés szövegfájlba: **np.savetxt("file.txt", array)** * Bináris mentés: **np.save("file.npy", array)** * Bináris betöltés: **np.load("file.npy")** === A legfontosabb 20, amit tudni kell === array, arange, linspace zeros, ones, full shape, reshape sum, mean, std, min, max argmax, argmin dot / @ where sort, argsort concatenate unique loadtxt, savetxt ---- ==== Gyakorló feladatok ==== **I. Tömb létrehozás: Alap generálás** - Hozz létre egy 0–99 közötti egész számokat tartalmazó tömböt np.arange() segítségével. - Hozz létre 50 darab egyenletesen elosztott számot 0 és 1 között np.linspace()-szel. - Készíts egy 4x4-es nullmátrixot. - Készíts egy 3x5-ös, 7-esekkel feltöltött mátrixot. import numpy as np # 1 a = np.arange(100) # 2 b = np.linspace(0, 1, 50) # 3 c = np.zeros((4, 4)) # 4 d = np.full((3, 5), 7) print(a, b, c, d) **II. Tömb tulajdonságok és átalakítás: Shape és reshape** - Generálj egy 1D tömböt 0–23-ig. - Alakítsd át 4x6-os mátrixszá. - Transzponáld. - Lapítsd vissza 1D-be flatten() és ravel() segítségével. - Ellenőrizd shape, ndim, size, dtype. arr = np.arange(24) matrix = arr.reshape(4, 6) transposed = matrix.T flat1 = matrix.flatten() flat2 = matrix.ravel() print(matrix.shape) print(matrix.ndim) print(matrix.size) print(matrix.dtype) **III. Vektorizált matematikai műveletek: Elemankénti műveletek** Hozz létre két 10 elemű tömböt. - Számold ki: - összegüket - különbségüket - szorzatukat - hányadosukat - Emeld az egyik tömb elemeit négyzetre. - Számold ki a négyzetgyöküket. - Alkalmazz logaritmust és exponenciális függvényt. a = np.arange(1, 11) b = np.arange(11, 21) osszeg = a + b kulonbseg = a - b szorzat = a * b hanyados = a / b negyzet = a ** 2 gyok = np.sqrt(a) log = np.log(a) exp = np.exp(a) print(osszeg, kulonbseg, szorzat, hanyados) **IV. Aggregáló függvények: Statisztikai elemzés** - Generálj 1000 normál eloszlású számot. - Számold ki: - átlag - medián - szórás - variancia - minimum - maximum - Add meg a legnagyobb elem indexét. - Számold ki az első 100 elem összegét. data = np.random.randn(1000) print("Átlag:", np.mean(data)) print("Medián:", np.median(data)) print("Szórás:", np.std(data)) print("Variancia:", np.var(data)) print("Min:", np.min(data)) print("Max:", np.max(data)) print("Max index:", np.argmax(data)) print("Első 100 elem összege:", np.sum(data[:100])) **V. Mátrixműveletek: Lineáris algebra** - Generálj két 3x3-as mátrixot. - Szorozd össze őket: - np.dot() - @ operátorral - Számold ki az egyik determinánsát. - Számold ki az inverzét. - Oldj meg egy Ax = b lineáris egyenletrendszert. A = np.random.randint(1, 10, (3, 3)) B = np.random.randint(1, 10, (3, 3)) dot1 = np.dot(A, B) dot2 = A @ B det = np.linalg.det(A) # Inverz csak ha invertálható if det != 0: inv = np.linalg.inv(A) b = np.array([1, 2, 3]) if det != 0: x = np.linalg.solve(A, b) print(dot1, det) **VI. Boolean indexelés és szűrés: Feltételes műveletek** - Generálj 100 elemből álló véletlen tömböt. - Szűrd ki az 50-nél nagyobb elemeket. - Cseréld az 50 alatti elemeket nullára np.where() segítségével. - Számold meg, hány elem nagyobb 75-nél. - Használd np.clip()-et az értékek 10–90 közé szorítására. arr = np.random.randint(0, 100, 100) nagyobb_50 = arr[arr > 50] uj = np.where(arr < 50, 0, arr) db_75 = np.sum(arr > 75) clipped = np.clip(arr, 10, 90) print(nagyobb_50, db_75) **VII. Összefűzés és darabolás: Tömbmanipuláció** - Hozz létre két 2x3-as mátrixot. - Fűzd össze: - függőlegesen (vstack) - vízszintesen (hstack) - Használd concatenate()-et. - Oszd fel a mátrixot 3 részre split() segítségével. A = np.random.randint(1, 10, (2, 3)) B = np.random.randint(1, 10, (2, 3)) v = np.vstack((A, B)) h = np.hstack((A, B)) c = np.concatenate((A, B), axis=0) split = np.split(v, 2) print(v, h) **VIII. Rendezés és keresés: Rendezési feladatok** - Generálj 20 véletlen számot. - Rendezd növekvő sorrendbe. - Add meg a rendezési indexeket (argsort). - Találd meg az egyedi elemeket (unique). - Számold ki a 90. percentilist. arr = np.random.randint(0, 50, 20) sorted_arr = np.sort(arr) indices = np.argsort(arr) unique_vals = np.unique(arr) p90 = np.percentile(arr, 90) print(sorted_arr, indices, unique_vals, p90) **IX. Haladó – Idősor feldolgozás:mMozgóátlag és kumuláció** - Generálj 365 napi adatot. - Számold ki: - kumulatív összeget (cumsum) - kumulatív szorzatot (cumprod) - Számolj 7 napos mozgóátlagot np.convolve() segítségével. - Határozd meg azokat a napokat, ahol az érték nagyobb az éves átlagnál. data = np.random.randn(365) cumsum = np.cumsum(data) cumprod = np.cumprod(data) kernel = np.ones(7) / 7 moving_avg = np.convolve(data, kernel, mode="valid") atlag = np.mean(data) nagyobb = data[data > atlag] print(cumsum[:5], moving_avg[:5]) **X. NumPy fájlkezelés: Fájlműveletek** - Ments el egy tömböt .txt formátumban (savetxt). - Olvasd vissza (loadtxt). - Mentsd el .npy formátumban. - Töltsd vissza. - Ellenőrizd, hogy a két tömb megegyezik-e (np.array_equal). arr = np.random.randint(1, 100, (5, 5)) np.savetxt("adat.txt", arr) loaded_txt = np.loadtxt("adat.txt") np.save("adat.npy", arr) loaded_npy = np.load("adat.npy") print(np.array_equal(arr, loaded_txt)) print(np.array_equal(arr, loaded_npy)) **XI. Broadcasting gyakorlás: Méretillesztés** - Adj hozzá egy 1D tömböt egy 2D mátrix minden sorához. - Normalizálj soronként. - Vond ki minden oszlopból az oszlopátlagot. - Szorozd meg az egész mátrixot egy skalárral. - Ellenőrizd np.all() és np.any() használatával bizonyos feltételeket. matrix = np.random.randint(1, 10, (4, 3)) vector = np.array([1, 2, 3]) # Soronkénti hozzáadás result = matrix + vector # Soronkénti normalizálás row_mean = np.mean(matrix, axis=1, keepdims=True) norm = matrix - row_mean # Oszlopátlag kivonása col_mean = np.mean(matrix, axis=0) centered = matrix - col_mean # Skalárszorzás scaled = matrix * 10 print(np.all(matrix > 0)) print(np.any(matrix > 8))