Pandas & NumPy Academy · Lekcja

Funkcje uniwersalne (ufuncs)

Stosować wbudowane funkcje działające element po elemencie, takie jak np.sqrt, np.abs, np.exp i np.log, bez pisania pętli

Lekcja 1 z 413 kroki

Funkcje uniwersalne (ufuncs) to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 1 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 Pandas & NumPy Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Czym są ufunc?

Funkcje uniwersalne (ufunc) wykonują operację matematyczną na każdym elemencie tablicy jednocześnie, korzystając z szybkiego skompilowanego kodu C — znacznie szybciej niż pętla w Pythonie. ⚡

import numpy as np

a = np.array([1.0, 4.0, 9.0, 16.0])
print(np.sqrt(a))  # [1. 2. 3. 4.]
# Equivalent Python loop would be hundreds of times slower

Funkcje ufunc matematyczne: sqrt, exp, log

Wszystkie ulubione funkcje matematyczne są funkcjami ufunc: np.sqrt, np.exp, np.log i inne. Działają jednocześnie na całych tablicach i poprawnie obsługują sytuacje brzegowe.

import numpy as np

a = np.array([0.0, 1.0, 2.0, 3.0])
print(np.exp(a))         # [1.    2.718 7.389 20.086]
print(np.log(np.exp(a))) # [0. 1. 2. 3.]
print(np.log2(np.array([1, 2, 4, 8])))  # [0. 1. 2. 3.]

Trygonometryczne funkcje ufunc

Trygonometryczne funkcje ufunc NumPy, takie jak np.sin i np.cos, oczekują kątów w radianach. Przed użyciem stopni należy je przekonwertować za pomocą np.deg2rad.

import numpy as np

angles = np.array([0, 30, 60, 90])
rad = np.deg2rad(angles)
print(np.sin(rad).round(4))  # [0.     0.5    0.866  1.   ]
print(np.cos(rad).round(4))  # [1.     0.866  0.5    0.   ]

np.abs, np.floor, np.ceil, np.round

Do zaokrąglania służą np.floor (w dół), np.ceil (w górę) i np.round (do najbliższej wartości). Jednym wywołaniem porządkują wartości zmiennoprzecinkowe w całej tablicy.

import numpy as np

a = np.array([-2.7, 0.4, 1.5, 3.9])
print(np.abs(a))     # [2.7 0.4 1.5 3.9]
print(np.floor(a))   # [-3.  0.  1.  3.]
print(np.ceil(a))    # [-2.  1.  2.  4.]
print(np.round(a))   # [-3.  0.  2.  4.]

np.maximum i np.minimum

np.maximum(a, b) wybiera większą wartość w każdej pozycji z dwóch tablic — w przeciwieństwie do np.max, które zwraca jedną liczbę. np.maximum(a, 0) to funkcja ReLU!

import numpy as np

a = np.array([-3, 1, 5, -2, 4])
b = np.array([0, 0, 3, 3, 3])

print(np.maximum(a, b))  # [0 1 5 3 4]
print(np.minimum(a, b))  # [-3  0  3 -2  3]

# ReLU
print(np.maximum(a, 0))  # [0 1 5 0 4]

np.clip do ograniczania wartości

np.clip utrzymuje każdy element w określonym przedziale: wartości zbyt niskie podnosi do minimum, a zbyt wysokie obniża do maksimum. Świetnie nadaje się do ograniczania wartości.

import numpy as np

a = np.array([0.1, 0.5, -0.2, 1.3, 0.9])
clipped = np.clip(a, 0.0, 1.0)
print(clipped)  # [0.1 0.5 0.  1.  0.9]

ufunc na tablicach wielowymiarowych

ufunc działają na tablicach o dowolnym kształcie. Operacja matematyczna obejmuje każdy element osobno, a wynik zachowuje ten sam kształt — nie trzeba zmieniać kształtu tablicy.

import numpy as np

m = np.array([[1.0, 4.0], [9.0, 16.0]])
print(np.sqrt(m))
# [[1. 2.]
#  [3. 4.]]

Parametr out zapewniający efektywne wykorzystanie pamięci

Każda funkcja ufunc przyjmuje argument out=, który pozwala zapisać wyniki w już istniejącej tablicy. Pomija to tworzenie nowej tablicy — przydaje się w intensywnych obliczeniowo pętlach, w których pamięć ma znaczenie.

import numpy as np

a = np.array([1.0, 4.0, 9.0])
result = np.empty(3)
np.sqrt(a, out=result)  # write directly into result
print(result)  # [1. 2. 3.]

np.add.reduce i .accumulate

Każda funkcja ufunc ma metodę .reduce(), która łączy wszystkie elementy (np.add.reduce to po prostu sumowanie), oraz .accumulate() do obliczania sum skumulowanych.

import numpy as np

a = np.array([1, 2, 3, 4, 5])
print(np.add.reduce(a))       # 15
print(np.add.accumulate(a))   # [ 1  3  6 10 15]
print(np.multiply.reduce(a))  # 120

np.frompyfunc dla niestandardowych funkcji ufunc

np.frompyfunc przekształca dowolną funkcję Pythona w funkcję ufunc, którą można stosować do tablic. Jest wolniejsza od funkcji wbudowanych, dlatego najlepiej używać jej do szybkiego prototypowania.

import numpy as np

def clamp_positive(x):
    return x if x > 0 else 0.0

vfunc = np.frompyfunc(clamp_positive, 1, 1)
a = np.array([-2, 3, -1, 5])
print(vfunc(a))  # [0.0 3 0.0 5]  (object dtype)

Porównanie ufunc z pętlami Pythona

Różnica w szybkości jest ogromna: dla miliona elementów funkcja ufunc może działać około 200 razy szybciej niż pętla w Pythonie. W obliczeniach numerycznych zawsze warto najpierw sięgać po funkcje ufunc. 🚀

import numpy as np
import time

a = np.random.rand(1_000_000)

start = time.perf_counter()
np.sqrt(a)
print('ufunc:', round(time.perf_counter() - start, 4), 's')

start = time.perf_counter()
[x ** 0.5 for x in a]
print('loop:', round(time.perf_counter() - start, 4), 's')

Szybki test

Sprawdź swoją wiedzę na temat funkcji ufunc NumPy z tego rozdziału.

Podsumowanie rozdziału

Dobra robota! ufunc wykonują działania matematyczne element po elemencie w szybkim kodzie C, obejmują sqrt, exp, log i funkcje trygonometryczne, a argument out= oszczędza pamięć. Następny temat: funkcje agregujące.

Bezpłatny start

Ucz się Python dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Funkcje uniwersalne (ufuncs)” jest bezpłatna?

Tak — pełny tekst „Funkcje uniwersalne (ufuncs)” 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 Pandas & NumPy Academy, przejdź na CoddyKit PRO. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Funkcje uniwersalne (ufuncs)”?

Stosować wbudowane funkcje działające element po elemencie, takie jak np.sqrt, np.abs, np.exp i np.log, bez pisania pętli Ćwiczysz Pandas & NumPy Academy 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ąć Pandas & NumPy Academy?

Nie wymagamy żadnego doświadczenia. Pandas & NumPy Academy 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 1 z 4.

Ile czasu zajmuje lekcja „Funkcje uniwersalne (ufuncs)”?

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 Pandas & NumPy Academy?

Tak. Każda lekcja Pandas & NumPy Academy 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

  1. Funkcje uniwersalne (ufuncs)
  2. Funkcje agregujące
  3. Zasady broadcastingu
  4. Maskowanie boolowskie i zaawansowane indeksowanie
← Powrót do Pandas & NumPy Academy