Capitol gratuit

NumPy - Fundamente

NumPy (Numerical Python) este baza întregului ecosistem de Data Science. Elementul central este ndarray - un array N-dimensional, mult mai eficient decât l...

ndarray - tipul de date central

NumPy (Numerical Python) este baza întregului ecosistem de Data Science. Elementul central este ndarray - un array N-dimensional, mult mai eficient decât listele Python.

import numpy as np

# Creare array-uri
a = np.array([1, 2, 3, 4, 5])           # din listă
b = np.array([[1, 2, 3], [4, 5, 6]])    # 2D (matrice)

print(a.shape)    # (5,)
print(b.shape)    # (2, 3)
print(b.ndim)     # 2 (dimensiuni)
print(b.dtype)    # int64
print(b.size)     # 6 (total elemente)

# Funcții de creare
zerouri = np.zeros((3, 4))          # matrice de zerouri
unuri = np.ones((2, 3))            # matrice de 1
identitate = np.eye(4)             # matrice identitate
intervale = np.arange(0, 10, 0.5)  # similar range()
linspace = np.linspace(0, 1, 100)  # 100 puncte între 0 și 1
aleator = np.random.rand(3, 3)     # valori aleatorii [0, 1)

Indexare și slicing

arr = np.array([[10, 20, 30], [40, 50, 60], [70, 80, 90]])

# Indexare
print(arr[0, 1])      # 20 (rândul 0, coloana 1)
print(arr[2])          # [70, 80, 90] (rândul 2)
print(arr[:, 0])       # [10, 40, 70] (coloana 0)

# Slicing
print(arr[0:2, 1:3])   # [[20, 30], [50, 60]]
print(arr[:, ::2])     # [[10, 30], [40, 60], [70, 90]]

# Indexare booleană (boolean masking)
mask = arr > 50
print(arr[mask])       # [60, 70, 80, 90]
arr[arr < 30] = 0      # setează elementele < 30 la 0

# Fancy indexing
print(arr[[0, 2]])     # rândurile 0 și 2

Operații vectorizate

a = np.array([1, 2, 3, 4, 5])
b = np.array([10, 20, 30, 40, 50])

# Operații element cu element
print(a + b)       # [11, 22, 33, 44, 55]
print(a * b)       # [10, 40, 90, 160, 250]
print(a ** 2)      # [1, 4, 9, 16, 25]
print(np.sqrt(a))  # [1.0, 1.41, 1.73, 2.0, 2.24]

# Comparații (returnează array de bool)
print(a > 3)       # [False, False, False, True, True]

Broadcasting

Broadcasting permite operații între array-uri de dimensiuni diferite.

# Scalar + array
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr * 10)    # [[10, 20, 30], [40, 50, 60]]

# Array 1D + matrice (broadcasting pe rânduri)
rand = np.array([100, 200, 300])
print(arr + rand)  # [[101, 202, 303], [104, 205, 306]]

# Normalizare coloane (exemplu practic)
date = np.random.rand(5, 3) * 100
medii = date.mean(axis=0)        # media pe coloane
std = date.std(axis=0)           # deviația standard
normalizat = (date - medii) / std  # broadcasting automat
Sfat: Operațiile vectorizate NumPy sunt de 10-100x mai rapide decât buclele Python echivalente. Evitați buclele for când lucrați cu array-uri NumPy.

Continuați cu restul cursului

Acesta este capitolul 3 din cele 20 ale cursului, cu 4 lecții din 79. Cumpărați cursul și parcurgeți tot conținutul în cont, cu progres salvat, test final și certificat.

Cumpărați cursul la 130 €