Funkcje uniwersalne (tzw. ufunc) to jedne z najważniejszych narzędzi w NumPy. Są to funkcje działające element-po-elemencie na tablicach, często implementowane w C, co zapewnia wysoką wydajność obliczeń. Dzięki ufuncs można w prosty i czytelny sposób wykonywać operacje arytmetyczne, trygonometryczne, statystyczne czy logiczne na całych tablicach bez konieczności pisania pętli w Pythonie.
12.1 Podstawowe operacje arytmetyczne
NumPy automatycznie przekształca operatory matematyczne w odpowiednie ufunc.
Na przykład:
+ odpowiada np.add
- odpowiada np.subtract
* odpowiada np.multiply
/ odpowiada np.divide
** odpowiada np.power
Przykład:
import numpy as npA = np.array([1, 2, 3, 4])B = np.array([10, 20, 30, 40])# Operacje element-po-elemenciesum_tab = np.add(A, B) # to samo co A + Bdiff_tab = np.subtract(B, A) # to samo co B - Amul_tab = np.multiply(A, 2) # to samo co A * 2pow_tab = np.power(A, 3) # to samo co A ** 3print("Suma:", sum_tab)print("Różnica:", diff_tab)print("Mnożenie przez 2:", mul_tab)print("Potęgowanie:", pow_tab)
Choć wiele funkcji statystycznych dostępnych jest jako metody tablic (np. A.mean(), A.std()), istnieją też ufuncs działające element-po-elemencie lub akceptujące parametry osi:
np.minimum, np.maximum – zwracają minimum/maksimum element-po-elemencie z dwóch tablic,
np.fmin, np.fmax – podobne do wyżej wymienionych, ale ignorują wartości NaN,
np.sqrt – pierwiastek kwadratowy,
np.square – podniesienie do kwadratu.
Przykład:
import numpy as npC1 = np.array([1, 4, 9, 16])C2 = np.array([2, 2, 5, 20])print("minimum elementów C1 i C2:", np.minimum(C1, C2))print("maximum elementów C1 i C2:", np.maximum(C1, C2))print("sqrt(C1):", np.sqrt(C1))print("square(C2):", np.square(C2))
minimum elementów C1 i C2: [ 1 2 5 16]
maximum elementów C1 i C2: [ 2 4 9 20]
sqrt(C1): [1. 2. 3. 4.]
square(C2): [ 4 4 25 400]