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:
1import time 2 3# Lista Pythona 4py_list = list(range(1_000_000)) 5start = time.time() 6[x ** 2 for x in py_list] 7print("Python list:", time.time() - start) # ~0.15s 8 9# Tablica NumPy 10np_array = np.arange(1_000_000) 11start = time.time() 12np_array ** 2 13print("NumPy array:", time.time() - start) # ~0.002s 14
Indeksowanie i cięcie tablic
Podstawowe indeksowanie:
1arr = np.array([10, 20, 30, 40, 50]) 2print(arr[0]) # 10 3print(arr[1:4]) # [20, 30, 40] 4
Tablice 2D:
1matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 2print(matrix[1, 2]) # 6 (drugi wiersz, trzecia kolumna) 3print(matrix[:, 1]) # [2, 5, 8] (druga kolumna ze wszystkich wierszy) 4
Warunkowe indeksowanie:
1arr = np.array([5, 12, 8, 3, 15]) 2print(arr[arr > 10]) # [12, 15] 3
Przekształcanie tablic
Zmiana kształtu:
1arr = np.arange(1, 7) # [1, 2, 3, 4, 5, 6] 2matrix = arr.reshape(2, 3) 3""" 4Wynik: 5[[1 2 3] 6 [4 5 6]] 7""" 8
Spłaszczanie:
1matrix.flatten() # [1, 2, 3, 4, 5, 6] 2
Transpozycja:
1matrix.T 2""" 3[[1 4] 4 [2 5] 5 [3 6]] 6""" 7
Operacje matematyczne
Broadcasting – operacje na tablicach różnych rozmiarów:
1arr = np.array([1, 2, 3]) 2print(arr * 5) # [5, 10, 15] 3print(arr + [0.5]) # [1.5, 2.5, 3.5] (automatyczne rozszerzenie) 4
Funkcje uniwersalne (ufuncs):
1np.sqrt(arr) # [1. , 1.41421356, 1.73205081] 2np.sin(arr) # [0.84147098, 0.90929743, 0.14112001] 3np.log(arr) # [0. , 0.69314718, 1.09861229] 4
Statystyka i algebra liniowa
Podstawowe statystyki:
1data = np.array([2, 4, 6, 8]) 2print("Średnia:", np.mean(data)) # 5.0 3print("Odchylenie standardowe:", np.std(data)) # 2.236 4print("Wariancja:", np.var(data)) # 5.0 5
Mnożenie macierzy:
1a = np.array([[1, 2], [3, 4]]) 2b = np.array([[5, 6], [7, 8]]) 3print(np.dot(a, b)) 4""" 5[[19 22] 6 [43 50]] 7""" 8
Zapisywanie i wczytywanie danych
Zapis do pliku:
1arr = np.arange(10) 2np.save('moje_dane.npy', arr) 3
Wczytanie z pliku:
1loaded_arr = np.load('moje_dane.npy') 2
Eksport do CSV:
1np.savetxt('dane.csv', arr, delimiter=',') 2
Case study: Analiza wyników egzaminów
Przykład praktycznego zastosowania:
1wyniki = np.array([68, 75, 82, 90, 77, 84, 91, 62, 79, 85]) 2 3# Filtruj wyniki powyżej średniej 4srednia = np.mean(wyniki) 5lepsze_wyniki = wyniki[wyniki > srednia] 6print(f"Liczba osób powyżej średniej ({srednia:.1f}): {len(lepsze_wyniki)}") 7 8# Normalizacja do skali 0-100 9znormalizowane = (wyniki - np.min(wyniki)) / (np.max(wyniki) - np.min(wyniki)) * 100 10print("Znormalizowane wyniki:", znormalizowane) 11
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.