NumPy-grunder: arrayer och matematiska operationer
Ni kommer att skapa och manipulera NumPy-arrayer, utföra vektoriserad aritmetik och förstå broadcasting för att kunna hantera numeriska data effektivt.
NumPy-grunder: arrayer och matematiska operationer är en gratis lektion i Machine Learning Academy på CoddyKit. Detta är lektion 2 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 Machine Learning Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Machine Learning Academy innehåller totalt 4 lektioner.
Varför NumPy är grunden för ML
NumPy utgör grunden för alla ML-bibliotek. Dess superkraft är vektoriserad matematik: det arbetar med hela arrayer samtidigt i snabb C-kod och lämnar Python-loopar långt efter sig.
import numpy as np
import time
# Speed comparison: NumPy vs Python list
n = 1_000_000
python_list = list(range(n))
np_array = np.arange(n)
# Python loop (slow)
start = time.time()
result = [x * 2 for x in python_list]
print(f'Python loop: {time.time() - start:.3f}s')
# NumPy vectorised (fast)
start = time.time()
result = np_array * 2
print(f'NumPy vectorised: {time.time() - start:.4f}s')Skapa NumPy-arrayer
Det centrala NumPy-objektet är arrayen. Dess viktigaste egenskap är shape – en tupel som anger storleken på varje dimension, till exempel (rows, cols). Koden visar hur ni skapar dem.
import numpy as np
# From Python list
a = np.array([1, 2, 3, 4, 5])
print('1D array:', a, '| shape:', a.shape) # (5,)
# 2D matrix from nested list
M = np.array([[1, 2, 3], [4, 5, 6]])
print('2D matrix shape:', M.shape) # (2, 3)
# Built-in generators
zeros = np.zeros((3, 4)) # 3x4 matrix of zeros
ones = np.ones((2, 5)) # 2x5 matrix of ones
range_arr = np.arange(0, 10, 2) # [0 2 4 6 8]
linspace = np.linspace(0, 1, 5) # 5 evenly spaced points
random = np.random.randn(3, 3) # 3x3 standard normalIndexering och segmentering av arrayer
Ni indexerar arrayer med [row, col] och segmenterar dem med start:stop:step. En viktig detalj är att ett slice är en vy, inte en kopia – ändrar ni det ändras originalet också. Använd .copy() för att vara på den säkra sidan.
import numpy as np
M = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
# Single element
print(M[1, 2]) # 7 (row 1, column 2)
# Slice rows and columns
print(M[0:2, 1:3]) # rows 0-1, columns 1-2 -> [[2,3],[6,7]]
# All rows, last column
print(M[:, -1]) # [4, 8, 12]
# Boolean indexing
print(M[M > 6]) # [7, 8, 9, 10, 11, 12]Vektoriserade aritmetiska operationer
NumPys matematik är som standard elementvis: a + b adderar motsvarande element utan någon loop. Den körs i kompilerad C, vilket är anledningen till att den är så snabb med miljontals tal. Se koden.
import numpy as np
a = np.array([1.0, 2.0, 3.0, 4.0])
b = np.array([10.0, 20.0, 30.0, 40.0])
print('Addition:', a + b) # [11. 22. 33. 44.]
print('Multiply:', a * b) # [10. 40. 90. 160.]
print('Power:', a ** 2) # [ 1. 4. 9. 16.]
print('Divide:', b / a) # [10. 10. 10. 10.]
# Scalar operations apply to all elements
print('Add scalar:', a + 100) # [101. 102. 103. 104.]
print('Square root:', np.sqrt(a)) # [1. 1.41 1.73 2.]Broadcasting: arbeta med olika former
Broadcasting låter NumPy kombinera olika former genom att tänja ut den mindre så att den passar. Det är så ni kan addera en biasvektor till en hel batch utan att skriva några loopar.
import numpy as np
# Matrix + vector (broadcasting)
matrix = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]) # shape (3, 3)
bias = np.array([10, 20, 30]) # shape (3,) -> broadcasts to (3, 3)
result = matrix + bias
print(result)
# [[11 22 33]
# [14 25 36]
# [17 28 39]]
# Normalize each column to zero mean (ML preprocessing)
mean = matrix.mean(axis=0) # shape (3,)
centered = matrix - mean # broadcasts across rowsAggregeringsfunktioner
Aggregeringar som medelvärde och summa reducerar en array. axis anger riktningen: axis=0 går ned längs kolumnerna och axis=1 går över raderna. Koden visar båda.
import numpy as np
X = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]], dtype=float)
print('Global mean:', X.mean()) # 5.0
print('Column means:', X.mean(axis=0)) # [4. 5. 6.]
print('Row means:', X.mean(axis=1)) # [2. 5. 8.]
print('Global std:', X.std()) # ~2.58
print('Column max:', X.max(axis=0)) # [7. 8. 9.]
print('Row sum:', X.sum(axis=1)) # [ 6. 15. 24.]Matris multiplikation: ML:s kärna
Matris multiplikation är kärnan i ML – varje lager i ett neuralt nätverk och varje förutsägelse bygger på den. Använd @ (inte *, som är elementvis). De inre dimensionerna måste matcha: (m,k) gånger (k,n).
import numpy as np
# Linear regression prediction: y_hat = X @ weights + bias
X = np.random.randn(100, 5) # 100 samples, 5 features
weights = np.random.randn(5) # one weight per feature
bias = 0.5
y_hat = X @ weights + bias # shape: (100,)
print('Predictions shape:', y_hat.shape)
# Matrix-matrix multiplication (e.g., two weight layers)
A = np.random.randn(4, 3) # (4, 3)
B = np.random.randn(3, 5) # (3, 5)
C = A @ B # (4, 5)
print('A @ B shape:', C.shape)Ändra form på och stapla arrayer
Reshaping ändrar en arrays form utan att påverka dess data – ungefär som att platta ut en bild på 28x28 till 784 tal. Med vstack eller hstack kan ni stapla ihop arrayer.
import numpy as np
# Reshape: 1D to 2D
a = np.arange(12) # [0, 1, ..., 11]
matrix = a.reshape(3, 4) # shape (3, 4)
print('Reshaped:', matrix.shape)
# Use -1 to infer one dimension automatically
flat = matrix.reshape(-1) # back to 1D (12,)
row = matrix.reshape(1, -1) # shape (1, 12)
col = matrix.reshape(-1, 1) # shape (12, 1)
# Stack two arrays row-wise
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
stacked = np.vstack([A, B]) # shape (4, 2)Generera slumptal för ML
Slumptal används vid initiering av vikter, blandning och uppdelning i tränings- och testdata. Sätt alltid ett seed så att resultaten kan upprepas – utan det blir varje körning annorlunda och felsökningen besvärlig.
import numpy as np
# Set seed for reproducibility
rng = np.random.default_rng(seed=42)
# Common distributions used in ML
uniform = rng.uniform(0, 1, size=(3, 3)) # Uniform [0, 1)
normal = rng.normal(0, 1, size=(3, 3)) # Standard normal
integers = rng.integers(0, 10, size=5) # Random integers
# Shuffle an array
data = np.arange(10)
rng.shuffle(data)
print('Shuffled:', data)
# Random sampling without replacement
idxs = rng.choice(100, size=20, replace=False) # 20 unique indicesBooleska masker och avancerad indexering
Boolesk maskning filtrerar arrayer på en enda tydlig rad: jämför med ett villkor och välj sedan de element som matchar. Med avancerad indexering väljer ni element utifrån en uttrycklig lista med positioner.
import numpy as np
scores = np.array([85, 42, 91, 67, 55, 78, 33, 95])
# Boolean mask: select scores above 70
mask = scores > 70
print('Mask:', mask) # [T F T F F T F T]
print('High scores:', scores[mask]) # [85 91 78 95]
# Count how many passed
print('Passed:', mask.sum()) # 4
# Fancy indexing: select by explicit indices
indices = np.array([0, 2, 7])
print('Selected:', scores[indices]) # [85 91 95]
# Replace outliers
scores[scores < 50] = 50 # clip low scores to 50NumPy i arbetsflöden med scikit-learn
scikit-learn kräver rätt former: X som 2D (samples, features) och y som 1D (samples). En form som (100,) i stället för (100, 1) är ett klassiskt fel – reshape(-1, 1) löser det.
import numpy as np
from sklearn.linear_model import LinearRegression
# X must be 2D: (n_samples, n_features)
X = np.array([1, 2, 3, 4, 5]) # shape (5,) -- WRONG
# Fix:
X = X.reshape(-1, 1) # shape (5, 1) -- CORRECT
y = np.array([2.1, 4.0, 5.9, 8.1, 10.0]) # shape (5,) -- correct
model = LinearRegression()
model.fit(X, y)
print('Learned slope:', round(model.coef_[0], 2)) # ~2.0Snabbtest
Testa er förståelse av begrepp inom maskininlärning med Python från den här lektionen.
Sammanfattning av lektionen
Ni har lärt er grunderna i NumPy: arrayer utgör grunden för all ML, vektoriserad matematik och broadcasting eliminerar långsamma loopar, och operatorn @ används av alla modeller. Nästa steg: Pandas. 🐼
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 ”NumPy-grunder: arrayer och matematiska operationer” gratis?
Ja – hela texten till ”NumPy-grunder: arrayer och matematiska operationer” 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 Machine Learning Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Machine Learning Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”NumPy-grunder: arrayer och matematiska operationer”?
Ni kommer att skapa och manipulera NumPy-arrayer, utföra vektoriserad aritmetik och förstå broadcasting för att kunna hantera numeriska data effektivt. Ni övar på Machine Learning 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 Machine Learning Academy?
Du behöver inga förkunskaper. Utbildningen i Machine Learning 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 2 av 4.
Hur lång tid tar lektionen ”NumPy-grunder: arrayer och matematiska operationer”?
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 Machine Learning Academy-lektionen?
Ja. Varje Machine Learning 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
- Installera Anaconda och Jupyter Notebook
- NumPy-grunder: arrayer och matematiska operationer
- Pandas för datamanipulering
- Visualisera data med Matplotlib och Seaborn