Broadcasting i operacje zwektoryzowane
Jak działa broadcasting, operacje element po elemencie i unikanie pętli dzięki wektoryzacji.
Broadcasting i operacje zwektoryzowane to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Po co wektoryzować?
NumPy wykonuje operacje na całych tablicach z szybkością kodu C. Zastąpienie pętli Pythona wyrażeniami tablicowymi, nazywane wektoryzacją, jest często od 10 do 100 razy szybsze.
Operacje element po elemencie
Operatory arytmetyczne działają element po elemencie, gdy kształty tablic są zgodne. Nie trzeba wtedy używać pętli.
import numpy as np
a = np.array([1, 2, 3])
b = np.array([10, 20, 30])
print(a + b) # [11 22 33]
print(a * b) # [10 40 90]Broadcastowanie skalaru
Operacja między tablicą a skalarem stosuje skalar do każdego elementu. Skalar jest „broadcastowany” na całą tablicę.
a = np.array([1, 2, 3, 4])
print(a * 10) # [10 20 30 40]
print(a + 100) # [101 102 103 104]Czym jest broadcasting?
Broadcasting pozwala NumPy łączyć tablice o różnych kształtach przez wirtualne rozciągnięcie mniejszej z nich, bez kopiowania pamięci.
Reguła broadcastingu
Porównuj kształty, zaczynając od wymiaru końcowego (najbardziej prawego). Dwa wymiary są zgodne, gdy są równe albo jeden z nich ma wartość 1. Wymiar o rozmiarze 1 jest rozciągany, aby dopasować się do drugiego.
# (3, 4) with (4,) -> compatible (trailing 4 matches)
# (3, 4) with (3, 1) -> compatible (1 stretches to 4)
# (3, 4) with (3,) -> ERROR (trailing 4 vs 3)Broadcastowanie wektora wierszowego
Tablica 1D o długości równej liczbie kolumn jest dodawana do każdego wiersza.
m = np.array([[1, 2, 3], [4, 5, 6]])
row = np.array([10, 20, 30])
print(m + row)
# [[11 22 33]
# [14 25 36]]Broadcastowanie wektora kolumnowego
Przekształć wektor w kolumnę (kształt (n,1)), aby był broadcastowany wzdłuż kolumn, a nie wierszy.
col = np.array([[100], [200]]) # shape (2, 1)
print(m + col)
# [[101 102 103]
# [204 205 206]]Centrowanie danych (praktyczne zastosowanie)
Odjęcie średniej dla każdej kolumny centruje poszczególne cechy — jest to częsty krok wstępnego przetwarzania wykonywany w jednej linii dzięki broadcastingowi.
data = np.array([[1.0, 10.0], [2.0, 20.0], [3.0, 30.0]])
centered = data - data.mean(axis=0)
print(centered)
# columns now have mean 0Funkcje uniwersalne (ufuncs)
NumPy zawiera szybkie funkcje matematyczne działające element po elemencie, nazywane ufuncs: np.sqrt, np.log, np.exp i inne. Są zwektoryzowane i uwzględniają broadcasting.
a = np.array([1.0, 4.0, 9.0, 16.0])
print(np.sqrt(a)) # [1. 2. 3. 4.]
print(np.log(a)) # natural log of each element
print(np.exp([0, 1])) # [1. 2.71828183]Szybkość pętli a wektoryzacji
To samo obliczenie wykonane w sposób zwektoryzowany jest zdecydowanie szybsze. Użyj %timeit, aby zobaczyć różnicę dla miliona elementów.
big = np.arange(1000000, dtype=float)
# Slow Python loop:
# %timeit [x*x for x in big]
# Fast vectorized:
%timeit big * big # typically tens of times fasterŁączenie wektoryzacji
Łącz ufuncs i operatory arytmetyczne, aby bezpośrednio zapisywać wzory. Ten przykład oblicza krzywą Gaussa bez użycia pętli.
x = np.linspace(-3, 3, 7)
y = np.exp(-x**2 / 2)
print(np.round(y, 3))Szybki test
Sprawdź swoje rozumienie broadcastingu.
Podsumowanie
Najważniejsze informacje o wektoryzacji:
- Operacje element po elemencie pozwalają uniknąć pętli Pythona i są wykonywane z szybkością kodu C
- Broadcasting dopasowuje wymiary końcowe; ich rozmiary muszą być zgodne albo równe 1
- Używaj wektorów kolumnowych (n,1), aby broadcastować dane wzdłuż kolumn
- ufuncs:
np.sqrt,np.log,np.exp - Centruj dane za pomocą
data - data.mean(axis=0)
Często zadawane pytania
Czy lekcja „Broadcasting i operacje zwektoryzowane” jest bezpłatna?
Tak — pełny tekst „Broadcasting i operacje zwektoryzowane” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „Broadcasting i operacje zwektoryzowane”?
Jak działa broadcasting, operacje element po elemencie i unikanie pętli dzięki wektoryzacji. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Broadcasting i operacje zwektoryzowane”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?
Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Tworzenie tablic i ich właściwości
- Indeksowanie, wycinanie i indeksowanie zaawansowane
- Broadcasting i operacje zwektoryzowane
- Algebra liniowa z NumPy