Pandas & NumPy Academy · Lektion

Universella funktioner (ufuncs)

Tillämpa inbyggda elementvisa funktioner som np.sqrt, np.abs, np.exp och np.log på arrayer utan att skriva loopar.

Lektion 1 av 413 steg

Universella funktioner (ufuncs) är en gratis lektion i Pandas & NumPy Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Pandas & NumPy Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.

Vad är ufuncs?

Universella funktioner (ufuncs) utför en matematisk operation på varje element i en array samtidigt, i snabb kompilerad C-kod — mycket snabbare än en Python-loop. ⚡

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

Matematiska ufuncs: sqrt, exp, log

Alla dina favoritfunktioner för matematik är ufuncs: np.sqrt, np.exp, np.log med flera. De tillämpas på hela arrayer samtidigt och hanterar specialfall på ett smidigt sätt.

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.]

Trigonometriska ufuncs

NumPys trigonometriska ufuncs som np.sin och np.cos förväntar sig vinklar i radianer. Använd np.deg2rad för att konvertera grader först.

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

För avrundning använder du np.floor (nedåt), np.ceil (uppåt) och np.round (närmaste värde). De bearbetar flyttalsvärden i hela arrayen på en gång.

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 och np.minimum

np.maximum(a, b) tar det större värdet på varje position från två arrayer — till skillnad från np.max, som returnerar ett enda tal. np.maximum(a, 0) är 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 för att begränsa värden

np.clip håller varje element inom ett intervall: värden som är för låga höjs till minimivärdet och värden som är för höga sänks till maximivärdet. Utmärkt för att begränsa värden.

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]

ufuncs på flerdimensionella arrayer

ufuncs fungerar på arrayer med valfri form. Beräkningen utförs på varje element separat och resultatet behåller samma form — ingen reshape behövs.

import numpy as np

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

Parametern out= för effektiv minnesanvändning

Alla ufuncs accepterar argumentet out= för att skriva resultat till en array som du redan har. Då slipper du skapa en ny array — praktiskt i täta loopar där minnet är begränsat.

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 och .accumulate

Varje ufunc har en metod .reduce() som kombinerar alla element (np.add.reduce är helt enkelt sum) och .accumulate() för löpande summor.

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 för anpassade ufuncs

np.frompyfunc omvandlar valfri Python-funktion till en ufunc som du kan tillämpa på arrayer. Den är långsammare än inbyggda funktioner, så använd den främst för snabb prototypframtagning.

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)

Jämför ufuncs med Python-loopar

Skillnaden i hastighet är enorm: för en miljon element kan en ufunc vara omkring 200 gånger snabbare än en Python-loop. Vid numeriskt arbete bör du alltid börja med ufuncs. 🚀

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')

Snabbtest

Testa dina kunskaper om NumPys ufuncs i den här lektionen.

Sammanfattning av lektionen

Bra jobbat! ufuncs utför elementvis matematik i snabb C-kod, omfattar sqrt, exp, log och trigonometriska funktioner, och argumentet out= sparar minne. Nästa ämne är aggregeringsfunktioner.

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”Universella funktioner (ufuncs)” gratis?

Ja – hela texten till ”Universella funktioner (ufuncs)” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Pandas & NumPy Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Universella funktioner (ufuncs)”?

Tillämpa inbyggda elementvisa funktioner som np.sqrt, np.abs, np.exp och np.log på arrayer utan att skriva loopar. Ni övar på Pandas & NumPy Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Pandas & NumPy Academy?

Du behöver inga förkunskaper. Utbildningen i Pandas & NumPy Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Universella funktioner (ufuncs)”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Pandas & NumPy Academy-lektionen?

Ja. Varje Pandas & NumPy Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Universella funktioner (ufuncs)
  2. Aggregeringsfunktioner
  3. Regler för broadcasting
  4. Boolesk maskning och fancy indexing
← Tillbaka till Pandas & NumPy Academy