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.
11.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]
Ćwiczenia: (ex7.py)
Mając tablicę \[A = \begin{bmatrix}1 & 4 & 9 & 16\end{bmatrix},\]
zastosuj funkcję uniwersalną, aby obliczyć pierwiastek kwadratowy każdego elementu.
Rozważ jednowymiarową tablicę \[B = \begin{bmatrix}-1 & -2 & 3 & -4\end{bmatrix},\]
zastosuj funkcję uniwersalną, aby otrzymać wartości bezwzględne wszystkich elementów.
Dla tablicy \[C = \begin{bmatrix}0 & \pi/2 & \pi & 3\pi/2\end{bmatrix},\]
oblicz wartość funkcji trygonometrycznej dla każdego elementu.
Mając tablicę \[D = \begin{bmatrix}1 & e & e^2 \end{bmatrix},\]
zastosuj funkcję uniwersalną, aby obliczyć logarytm naturalny każdego elementu.
Dla tablicy dwuwymiarowej \[E = \begin{bmatrix}2 & 4 \\ 10 & 20 \end{bmatrix},\]
podziel każdy element przez skalar, a następnie podnieś uzyskane wartości do kwadratu.
Rozważ tablicę \[F = \begin{bmatrix}1 & 2 & 3\end{bmatrix},\]
podnieś każdy element do trzeciej potęgi, a następnie zastosuj funkcję uniwersalną, aby obliczyć eksponentę z otrzymanych wartości.
Mając tablicę \[G = \begin{bmatrix}-\pi & -\pi/2 & 0 & \pi/2 & \pi\end{bmatrix},\]
zastosuj odpowiednią funkcję uniwersalną, aby uzyskać cosinus każdego elementu.
Dla tablicy \[H = \begin{bmatrix}10 & 100 & 1000\end{bmatrix},\]
zastosuj funkcję uniwersalną, aby obliczyć logarytm dziesiętny każdego elementu.
Mając tablicę \[I = \begin{bmatrix}2 & 8 & 18 & 32\end{bmatrix},\]
przekształć ją, stosując funkcję uniwersalną, tak aby każdy element był pierwiastkiem kwadratowym z wartości początkowej, a następnie pomnóż wyniki przez 2.
Rozważ tablicę \[J = \begin{bmatrix}-1 & -4 & -9 & -16\end{bmatrix},\]
oblicz pierwiastek kwadratowy wartości bezwzględnych elementów tej tablicy, wykorzystując po kolei dwie różne funkcje uniwersalne.