Universelle Funktionen (ufunc)#

Eine universelle Funktion, oder ufunc, ist eine Funktion, die elementweise Operationen auf Daten in ndarrays durchführt. Man kann sie sich als schnelle vektorisierte Wrapper für einfache Funktionen vorstellen, die einen oder mehrere skalare Werte annehmen und ein oder mehrere skalare Ergebnisse erzeugen.

Viele ufuncs sind einfache elementweise Transformationen, wie sqrt oder exp:

[1]:
import numpy as np


data = np.arange(10)
[2]:
data
[2]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
[3]:
np.sqrt(data)
[3]:
array([0.        , 1.        , 1.41421356, 1.73205081, 2.        ,
       2.23606798, 2.44948974, 2.64575131, 2.82842712, 3.        ])
[4]:
np.exp(data)
[4]:
array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,
       5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03,
       2.98095799e+03, 8.10308393e+03])

Diese werden als einstellige ufuncs bezeichnet. Andere, wie add oder maximum, nehmen zwei Arrays (also binäre ufuncs) und geben ein einziges Array als Ergebnis zurück:

[5]:
x = np.random.randn(8)
[6]:
y = np.random.randn(8)
[7]:
x
[7]:
array([ 0.33223956,  0.41802595,  0.67933838,  2.49505346, -0.99815963,
       -0.26031943,  0.66244814,  0.74554742])
[8]:
y
[8]:
array([ 1.45323312, -0.09441452,  0.87310632,  0.8724353 , -0.20123837,
       -0.3807043 ,  2.70549913, -2.02891263])
[9]:
np.maximum(x, y)
[9]:
array([ 1.45323312,  0.41802595,  0.87310632,  2.49505346, -0.20123837,
       -0.26031943,  2.70549913,  0.74554742])

Hier berechnete numpy.maximum das elementweise Maximum der Elemente in x und y.

Manche ufunc, wie z.B. modf , eine vektorisierte Version des eingebauten Python divmod, geben mehrere Arrays zurückgeben: die Bruch- und Integralteile eines Gleitkomma-Arrays:

[10]:
data = x * 5
[11]:
data
[11]:
array([ 1.66119778,  2.09012976,  3.39669191, 12.47526728, -4.99079815,
       -1.30159713,  3.31224069,  3.7277371 ])
[12]:
remainder, whole_part = np.modf(x)
[13]:
remainder
[13]:
array([ 0.33223956,  0.41802595,  0.67933838,  0.49505346, -0.99815963,
       -0.26031943,  0.66244814,  0.74554742])
[14]:
whole_part
[14]:
array([ 0.,  0.,  0.,  2., -0., -0.,  0.,  0.])

Ufuncs akzeptieren ein optionales out-Argument, das es euch erlaubt, eure Ergebnisse an ein bestehendes Array zu übertragen, anstatt ein neues zu erstellen:

[15]:
out = np.zeros_like(data)
[16]:
np.add(data, 1)
[16]:
array([ 2.66119778,  3.09012976,  4.39669191, 13.47526728, -3.99079815,
       -0.30159713,  4.31224069,  4.7277371 ])
[17]:
np.add(data, 1, out=out)
[17]:
array([ 2.66119778,  3.09012976,  4.39669191, 13.47526728, -3.99079815,
       -0.30159713,  4.31224069,  4.7277371 ])
[18]:
out
[18]:
array([ 2.66119778,  3.09012976,  4.39669191, 13.47526728, -3.99079815,
       -0.30159713,  4.31224069,  4.7277371 ])

Einige einstellige ufuncs:

Funktion

Beschreibung

abs, fabs

berechnet den absoluten Wert elementweise für Ganzzahl-, Gleitkomma- oder komplexe Werte

sqrt

berechnet die Quadratwurzel aus jedem Element (entspricht data ** 0,5)

square

berechnet das Quadrat eines jeden Elements (entspricht data ** 2)

exp

berechnet den Exponenten ex eines jeden Elements

log, log10, log2, log1p

Natürlicher Logarithmus (Basis e), log Basis 10, log Basis 2 bzw. log(1 + x)

sign

berechnet das Vorzeichen jedes Elements: 1 (positiv), 0 (Null), oder -1 (negativ)

ceil

berechnet die Obergrenze jedes Elements (d.h. die kleinste ganze Zahl, die größer oder gleich dieser Zahl ist)

floor

berechnet die Untergrenze jedes Elements (d.h. die größte ganze Zahl, die kleiner oder gleich jedem Element ist)

rint

rundet Elemente auf die nächste Ganzzahl, wobei der dtype erhalten bleibt

modf

gibt den gebrochenen und ganzzahligen Teile des Arrays als separate Arrays zurück

isnan

gibt ein boolesches Array zurück, das angibt, ob jeder Wert NaN (Not a Number) ist

isfinite, isinf

gibt ein boolesches Array zurück, das angibt, ob jedes Element endlich (non-inf, not-NaN) bzw. unendlich ist

cos, cosh, sin, sinh, tan, tanh

reguläre und hyperbolische trigonometrische Funktionen

arccos, arccosh, arcsin, arcsinh, arctan, arctanh

Inverse trigonometrische Funktionen

logical_not

berechnet den Wahrheitswert von not x elementweise (entspricht ~data)

Einige binäre universelle Funktionen:

Funktion

Beschreibung

add

hinzufügen entsprechender Elemente in Arrays

subtract

subtrahiert Elemente im zweiten Array vom ersten Array

multiply

Array-Elemente multiplizieren

divide, floor_divide

Dividieren oder Abschneiden des Rests

power

erhöht Elemente im ersten Array auf die im zweiten Array angegebenen Potenzen

maximum, fmax

elementweises Maximum; fmax ignoriert NaN

minimum, fmin

elementweises Minimum; fmin ignoriert NaN

mod

Elementweiser Modulus (Rest der Division)

copysign

kopiert das Vorzeichen der Werte im zweiten Argument auf die Werte im ersten Argument

greater, greater_equal, less, less_equal, equal, not_equal

Elementweise Vergleiche durchführen, die ein boolesches Array ergeben (entspricht den Infix-Operatoren >, >=, <, <=, ==, !=)

logical_and

berechnet den elementweisen Wahrheitswert der logischen Operation AND (&).

logical_or

berechnet den elementweisen Wahrheitswert der logischen Operation OR (|).

logical_xor

berechnet den elementweisen Wahrheitswert der logischen Operation XOR (^).

Hinweis

Eine vollständige Übersicht über binäre universelle Funktionen findet ihr in Universal functions (ufunc).