Podstawy NumPy – przewodnik od zupełnych podstaw

NumPy to fundament naukowych i analitycznych obliczeń w Pythonie. Jego wydajność i prostota sprawiają, że jest niezbędny dla każdego, kto pracuje z danymi liczbowymi. Poniższy przewodnik wprowadzi Cię w świat tablic, operacji wektorowych i zaawansowanych funkcji matematycznych.
Dlaczego NumPy?
- Wydajność: Operacje na tablicach NumPy są nawet 100x szybsze niż na standardowych listach Pythona dzięki optymalizacji w języku C.
- Uniwersalność: Integruje się z Pandas, SciPy, Scikit-learn i innymi bibliotekami.
- Pamięć: Tablice NumPy zajmują mniej pamięci niż listy Pythona.
Przykład porównania wydajności:
import time # Lista Pythona py_list = list(range(1_000_000)) start = time.time() [x ** 2 for x in py_list] print("Python list:", time.time() - start) # ~0.15s # Tablica NumPy np_array = np.arange(1_000_000) start = time.time() np_array ** 2 print("NumPy array:", time.time() - start) # ~0.002s
Indeksowanie i cięcie tablic
Podstawowe indeksowanie:
arr = np.array([10, 20, 30, 40, 50]) print(arr[0]) # 10 print(arr[1:4]) # [20, 30, 40]
Tablice 2D:
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(matrix[1, 2]) # 6 (drugi wiersz, trzecia kolumna) print(matrix[:, 1]) # [2, 5, 8] (druga kolumna ze wszystkich wierszy)
Warunkowe indeksowanie:
arr = np.array([5, 12, 8, 3, 15]) print(arr[arr > 10]) # [12, 15]
Przekształcanie tablic
Zmiana kształtu:
arr = np.arange(1, 7) # [1, 2, 3, 4, 5, 6] matrix = arr.reshape(2, 3) """ Wynik: [[1 2 3] [4 5 6]] """
Spłaszczanie:
matrix.flatten() # [1, 2, 3, 4, 5, 6]
Transpozycja:
matrix.T """ [[1 4] [2 5] [3 6]] """
Operacje matematyczne
Broadcasting – operacje na tablicach różnych rozmiarów:
arr = np.array([1, 2, 3]) print(arr * 5) # [5, 10, 15] print(arr + [0.5]) # [1.5, 2.5, 3.5] (automatyczne rozszerzenie)
Funkcje uniwersalne (ufuncs):
np.sqrt(arr) # [1. , 1.41421356, 1.73205081] np.sin(arr) # [0.84147098, 0.90929743, 0.14112001] np.log(arr) # [0. , 0.69314718, 1.09861229]
Statystyka i algebra liniowa
Podstawowe statystyki:
data = np.array([2, 4, 6, 8]) print("Średnia:", np.mean(data)) # 5.0 print("Odchylenie standardowe:", np.std(data)) # 2.236 print("Wariancja:", np.var(data)) # 5.0
Mnożenie macierzy:
a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) print(np.dot(a, b)) """ [[19 22] [43 50]] """
Zapisywanie i wczytywanie danych
Zapis do pliku:
arr = np.arange(10) np.save('moje_dane.npy', arr)
Wczytanie z pliku:
loaded_arr = np.load('moje_dane.npy')
Eksport do CSV:
np.savetxt('dane.csv', arr, delimiter=',')
Case study: Analiza wyników egzaminów
Przykład praktycznego zastosowania:
wyniki = np.array([68, 75, 82, 90, 77, 84, 91, 62, 79, 85]) # Filtruj wyniki powyżej średniej srednia = np.mean(wyniki) lepsze_wyniki = wyniki[wyniki > srednia] print(f"Liczba osób powyżej średniej ({srednia:.1f}): {len(lepsze_wyniki)}") # Normalizacja do skali 0-100 znormalizowane = (wyniki - np.min(wyniki)) / (np.max(wyniki) - np.min(wyniki)) * 100 print("Znormalizowane wyniki:", znormalizowane)
Podsumowanie
NumPy to niezwykle potężne narzędzie, które rewolucjonizuje pracę z danymi numerycznymi w Pythonie. Dzięki opanowaniu podstawowych operacji na tablicach, funkcji matematycznych i technik indeksowania, zyskujesz możliwość efektywnej analizy dużych zbiorów danych. Kluczowe korzyści to:
- Optymalizacja pamięci: Tablice NumPy zajmują nawet 4x mniej miejsca niż listy Pythona.
- Szybkość: Operacje wektorowe pozwalają uniknąć powolnych pętli.
- Integracja: NumPy stanowi podstawę dla bibliotek typu Pandas czy TensorFlow.
Aby pogłębić wiedzę, warto eksperymentować z rzeczywistymi danymi i odkrywać zaawansowane funkcje takie jak broadcasting, maskowanie czy operacje na tensorach wyższych wymiarów.