Menu
CoddyTech

NumPy Cheat Sheet: ściąga z NumPy

Ostatnia aktualizacja

Tworzenie tablic

Tablica przechowuje wartości jednego typu w siatce o dowolnej liczbie wymiarów.

ZadanieKod
Import NumPyimport numpy as np
Z listynp.array([1, 2, 3])
2D z zagnieżdżonych listnp.array([[1, 2, 3], [4, 5, 6]])
Zera, jedynki, jedna wartośćnp.zeros((2, 3)), np.ones(4), np.full((2, 2), 7)
Zakres z krokiem (bez końca)np.arange(0, 10, 2) # [0 2 4 6 8]
n równo rozłożonych punktów (z końcem)np.linspace(0, 1, 5) # [0. 0.25 0.5 0.75 1.]
Macierz jednostkowanp.eye(3)
Ten sam kształt co inna tablicanp.zeros_like(m), np.ones_like(m)
Wybór typu elementównp.array([1, 2, 3], dtype=np.float32)
Siatki współrzędnychxx, yy = np.meshgrid(np.arange(3), np.arange(2))

Przeglądanie tablicy

ZadanieKod
Kształt: rozmiar każdego wymiarum.shape # (3, 4)
Liczba wymiarówm.ndim # 2
Liczba elementówm.size # 12
Typ elementówm.dtype # int64
Zmiana typum.astype(np.float64)
Długość pierwszego wymiarulen(m) # 3
Z powrotem na listę Pythonam.tolist()
Mniej miejsc po przecinkunp.set_printoptions(precision=3, suppress=True)

Indeksowanie i wycinanie

Wycinki to widoki: współdzielą pamięć z oryginalną tablicą. Maski i listy indeksów zwracają kopie.

ZadanieKod
Pierwszy i ostatni elementa[0], a[-1]
Wycinek start:stop (bez stop)a[1:4] # [20 30 40]
Co drugi element, od tyłua[::2], a[::-1]
Jeden element tablicy 2Dm[1, 2] # 6
Wiersz, kolumnam[0], m[:, 1]
Blok wierszy i kolumnm[:2, 1:3]
Elementy spełniające waruneka[a > 25] # [30 40 50]
Łączenie warunkówa[(a > 15) & (a < 45)]
Wybór po liście pozycjia[[0, 2, 4]]
Pozycje spełniające waruneknp.flatnonzero(a > 25) # [2 3 4]
Wybór dla każdego elementunp.where(a > 25, a, 0)
Kopia przed zmianą wycinkapart = a[1:3].copy()
Ustawianie wartości maskąa[a > 40] = 0

Obliczenia i broadcasting

Operatory działają element po elemencie. Broadcasting rozciąga skalar, wiersz lub kolumnę do kształtu drugiej tablicy.

ZadanieKod
Arytmetyka element po elemenciex + y, x - y, x * y, x / y, x ** 2
Ze skalaremx * 10
Pierwiastek, potęga e, logarytmnp.sqrt(x), np.exp(x), np.log(x)
Wartość bezwzględna, zaokrąglanienp.abs(x - 5), np.round(x / 3, 2)
Ograniczenie do zakresunp.clip(x, 2, 8)
Maksimum element po elemencienp.maximum(x, 3)
Iloczyn skalarnyx @ y # 37.0
Centrowanie kolumn (broadcasting wiersza)m - m.mean(axis=0)
Skalowanie wierszy (broadcasting kolumny)m / m.sum(axis=1, keepdims=True)
Bezpieczne porównanie floatównp.isclose(0.1 + 0.2, 0.3) # True, np.allclose(x, y)
Trygonometria i pinp.sin(np.pi / 2) # 1.0

Agregacja wzdłuż osi

axis=0 idzie w dół po wierszach i daje jeden wynik na kolumnę. axis=1 idzie w poprzek kolumn i daje jeden wynik na wiersz.

ZadanieKod
Suma wszystkich elementówm.sum() # 21
Jeden wynik na kolumnęm.sum(axis=0) # [5 7 9]
Jeden wynik na wierszm.sum(axis=1) # [ 6 15]
Średnia i odchylenie standardowem.mean(), m.std(), m.mean(axis=0)
Minimum, maksimumm.min(), m.max(axis=1)
Pozycja maksimumm.argmax(), m.argmax(axis=1)
Mediana i percentylenp.median(m), np.percentile(m, [25, 50, 75])
Suma narastającanp.cumsum(m, axis=1)
Iloczyn wszystkich elementówm.prod() # 720
Którykolwiek, wszystkie, liczba(m > 4).any(), (m > 0).all(), np.count_nonzero(m > 2)

Zmiana kształtu i łączenie

Reshape zachowuje elementy i zmienia kształt, więc łączny rozmiar musi pozostać taki sam.

ZadanieKod
Nowy kształta.reshape(2, 3)
Jeden wymiar wyliczy NumPya.reshape(3, -1), a.reshape(-1, 1)
Spłaszczenie do 1Dm.ravel(), m.flatten()
Transpozycjam.T
Dodanie wymiarua[:, np.newaxis], np.expand_dims(a, axis=0)
Usunięcie wymiarów o rozmiarze 1np.squeeze(np.ones((1, 3, 1)))
Łączenie wzdłuż istniejącej osinp.concatenate([a, a])
Sklejanie wierszy lub kolumnnp.vstack([m, m]), np.hstack([m, m])
Tablice 1D jako kolumnynp.column_stack([a, a ** 2])
Sklejanie wzdłuż nowej osinp.stack([a, a], axis=0) # shape (2, 6)
Podział na częścinp.split(a, 3), np.array_split(a, 4)
Powtarzanie i kafelkowanienp.repeat([1, 2], 2) # [1 1 2 2], np.tile([1, 2], 2) # [1 2 1 2]

Sortowanie, wyszukiwanie i unikalne wartości

ZadanieKod
Posortowana kopianp.sort(a)
Od największychnp.sort(a)[::-1]
Pozycje dające posortowanienp.argsort(a)
Trzy największe wartościnp.sort(a)[-3:]
Unikalne wartości i ich licznościvalues, counts = np.unique(a, return_counts=True)
Nazwy z NumPy 2 (unique_values może nie sortować)np.unique_values(a), np.unique_counts(a)
Czy element jest na liście?np.isin(a, [1, 9])
Miejsce wstawienia w posortowanej tablicynp.searchsorted([1, 3, 5, 7], 4) # 2
Operacje na zbiorachnp.intersect1d(a, [1, 2, 10]), np.union1d(a, [10]), np.setdiff1d(a, [1])
Sortowanie wierszy po kolumniem[m[:, 1].argsort()]

Liczby losowe

Utwórz jeden Generator z ziarnem i losuj wszystko z niego, a wyniki powtórzą się przy każdym uruchomieniu.

ZadanieKod
Generator z ziarnemrng = np.random.default_rng(42)
Floaty w [0, 1)rng.random(3)
Liczby całkowite, bez górnej granicyrng.integers(1, 7, size=10)
Rozkład normalnyrng.normal(loc=0, scale=1, size=(2, 3))
Floaty jednostajne w zakresierng.uniform(5, 10, size=4)
Losowanie z listyrng.choice(["a", "b", "c"], size=5)
Losowanie bez powtórzeńrng.choice(10, size=3, replace=False)
Losowanie z wagamirng.choice(["H", "T"], size=10, p=[0.7, 0.3])
Przetasowana kopia, tasowanie w miejscurng.permutation(a), rng.shuffle(a)
Liczności z rozkładu dwumianowego i Poissonarng.binomial(10, 0.5, size=5), rng.poisson(3, size=5)

Algebra liniowa

ZadanieKod
Iloczyn macierzyA @ A
Rozwiąż Ax = bnp.linalg.solve(A, b) # [0.8 1.4]
Odwrotność i wyznaczniknp.linalg.inv(A), np.linalg.det(A)
Długość wektoranp.linalg.norm(b)
Wartości i wektory własnevalues, vectors = np.linalg.eig(A)
Dopasowanie prostejslope, intercept = np.polyfit(x, y, 1)
Iloczyn zewnętrznynp.outer([1, 2], [3, 4])
Przekątna i śladnp.diag(A), np.trace(A)

Braki i wartości specjalne

np.nan oznacza brakującego floata. Każde działanie z nim daje nan, więc używaj funkcji nan albo maski.

ZadanieKod
Brakująca wartośćnp.nan
Znajdź brakinp.isnan(v), np.isnan(v).sum()
Usuń brakiv[~np.isnan(v)]
Zamień braki i nieskończonościnp.nan_to_num(v, nan=0.0, posinf=0.0)
Sprawdzanie nieskończoności i skończonościnp.inf, np.isfinite(v)
Statystyki pomijające NaNnp.nanmean(v[:3]) # 2.0, np.nanmax(v)

Zapis i odczyt

ZadanieKod
Jedna tablica, plik binarnynp.save("data.npy", m), m = np.load("data.npy")
Kilka tablic w jednym plikunp.savez("data.npz", x=x, y=y), np.load("data.npz")["x"]
Zapis tekstu CSVnp.savetxt("data.csv", m, delimiter=",", fmt="%d")
Odczyt tekstu CSVnp.loadtxt("data.csv", delimiter=",")

NumPy 2: stare nazwy i co pisać teraz

NumPy 2 usunął wiele aliasów, więc kod skopiowany ze starszych tutoriali może rzucić AttributeError.

ZadanieNumPy 2Stary zapis
Brakująca wartośćnp.nannp.NaN
Nieskończonośćnp.infnp.Inf
Typ float 64-bitowynp.float64np.float_
Pole pod krzywąnp.trapezoid(y, x)np.trapz(y, x)
Czy element jest w innej tablicy?np.isin(a, b)np.in1d(a, b)
Sklejanie wierszynp.vstack([a, a])np.row_stack([a, a])
Iloczynnp.prod(a)np.product(a)
Liczby losowerng = np.random.default_rng(0) rng.random(3)np.random.seed(0) np.random.rand(3)

Wywołania NumPy, na których stoi kod data science, pogrupowane według zadań: tworzenie tablic, ich przeglądanie, indeksowanie i wycinanie, obliczenia element po elemencie, agregacja wzdłuż osi, zmiana kształtu i łączenie, sortowanie i wyszukiwanie, losowanie liczb oraz algebra liniowa. Każdy wiersz to krótki fragment kodu do wklejenia i jedno zdanie o tym, co robi.

Wszystko tutaj jest napisane dla NumPy 2, wersji, której używa Coddy, a ostatnia tabela pokazuje nazwy usunięte w NumPy 2 obok tego, co pisać zamiast nich. Większość przykładów używa a = np.array([3, 1, 4, 1, 5, 9, 2, 6]) i m = np.arange(12).reshape(3, 4). Dopiero zaczynasz z Pythonem? Zajrzyj do ściągi z Pythona i Python playground, a obok tej ściągi trzymaj też ściągi z pandas, Matplotlib i scikit-learn.

FAQ: ściąga z NumPy

Czy ta ściąga z NumPy jest darmowa?
Tak. Ta ściąga z NumPy jest całkowicie darmowa i nie wymaga rejestracji. Dodaj ją do zakładek albo wydrukuj do PDF z przeglądarki i wracaj, kiedy tylko potrzebujesz dokładnego wywołania dla reshape, sumy po osi czy losowania.
Którą wersję NumPy obejmuje ta ściąga?
NumPy 2. Każdy fragment działa w NumPy 2.4, wersji, której używa Coddy. NumPy 2 usunął aliasy takie jak np.NaN, np.float_, np.trapz i np.in1d, dlatego ostatnia tabela pokazuje każdy z nich obok jego obecnej nazwy.
Co oznacza axis=0 w NumPy?
Oś to wymiar, który zostaje zwinięty. W tablicy 2D axis=0 idzie w dół po wierszach, więc m.sum(axis=0) zwraca jedną sumę na kolumnę. axis=1 idzie w poprzek kolumn i zwraca jedną sumę na wiersz. Bez podanej osi funkcja bierze wszystkie elementy.
Czym różni się widok od kopii?
Wycinek taki jak a[1:3] to widok: współdzieli pamięć z a, więc zmiana wycinka zmienia a. Maski logiczne i listy indeksów, takie jak a[a > 2] czy a[[0, 2]], zwracają kopie. Wywołaj .copy(), gdy potrzebujesz niezależnej tablicy.
Po co tablica NumPy zamiast listy Pythona?
Tablice przechowują jeden typ w jednym bloku pamięci, więc obliczenia na całej tablicy wykonuje skompilowany kod, często wielokrotnie szybciej niż pętla w Pythonie. a * 2 podwaja każdy element, a [1, 2] * 2 powtarza listę. pandas i scikit-learn są zbudowane na tablicach NumPy.
Używać np.random.seed czy default_rng?
Użyj rng = np.random.default_rng(seed) i wywołuj metody na rng, takie jak rng.normal() czy rng.integers(). To zalecane API, z lepszymi strumieniami losowymi i bez ukrytego stanu globalnego. np.random.seed i np.random.rand nadal działają, ale to starszy interfejs.
Czy mogę uruchomić kod NumPy online?
Tak. Darmowy Matplotlib playground uruchamia Pythona z NumPy, pandas, Matplotlib i scikit-learn w przeglądarce, więc możesz wkleić dowolny fragment z tej ściągi i uruchomić go bez instalowania czegokolwiek. Kurs Machine Learning w Coddy uczy NumPy krok po kroku, w ramach pracy z prawdziwymi danymi.
Ilustracja języków programowania w Coddy

Naucz się języka NumPy z Coddy

ZACZNIJ