Machine Learning Academy · Oppitunti

NumPy-perusteet: taulukot ja matemaattiset operaatiot

Luo ja käsittele NumPy-taulukoita, suorita vektoroitua aritmetiikkaa ja opi broadcasting, jotta voit käsitellä numeerista dataa tehokkaasti.

Oppitunti 2/413 vaihetta

NumPy-perusteet: taulukot ja matemaattiset operaatiot on ilmainen Machine Learning Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Machine Learning Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Machine Learning Academy-kurssilla on yhteensä 4 oppituntia.

Miksi NumPy on koneoppimisen perusta

NumPy muodostaa perustan jokaisen ML-kirjaston alla. Sen supervoima on vektorisoitu matematiikka: se käsittelee kokonaisia taulukoita kerralla nopealla C-koodilla ja jättää Python-silmukat kauas taakseen.

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

NumPy-taulukoiden luominen

NumPyn keskeinen olio on taulukko. Sen tärkein ominaisuus on shape eli muoto — monikko, joka kertoo kunkin ulottuvuuden koon, esimerkiksi (rows, cols). Koodi näyttää, miten niitä luodaan.

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 normal

Taulukoiden indeksointi ja viipalointi

Taulukoita indeksoidaan muodossa [row, col] ja viipaloidaan muodossa start:stop:step. Yksi huomionarvoinen seikka: slice on näkymä, ei kopio — jos muutatte sitä, muutatte alkuperäistä taulukkoa. Käyttäkää .copy()-metodia varmuuden vuoksi.

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]

Vektoroidut aritmeettiset operaatiot

NumPyn matematiikka on oletusarvoisesti alkiokohtaista: a + b laskee vastaavat alkiot yhteen ilman silmukkaa. Se suoritetaan käännetyllä C-koodilla, minkä vuoksi se on erittäin nopea miljoonilla luvuilla. Katsokaa koodia.

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: erikokoisten muotojen käsittely

Broadcasting mahdollistaa erimuotoisten taulukoiden yhdistämisen venyttämällä pienemmän sopimaan suurempaan. Sen avulla voitte lisätä bias-vektorin koko erään kirjoittamatta silmukoita.

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 rows

Koostefunktiot

Keskiarvon ja summan kaltaiset koostefunktiot tiivistävät taulukon pienemmäksi. axis valitsee suunnan: axis=0 etenee sarakkeita alaspäin ja axis=1 rivejä pitkin. Koodi näyttää molemmat.

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

Matriisikertolasku: koneoppimisen ydin

Matriisikertolasku on ML:n ydin — jokainen neuroverkon kerros ja ennuste perustuu siihen. Käyttäkää operaattoria @, älkää operaattoria *, joka on alkiokohtainen. Sisempien ulottuvuuksien on vastattava toisiaan: (m,k) kertaa (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)

Taulukoiden muotoilu ja pinoaminen

Muotoilu muuttaa taulukon muotoa koskematta sen tietoihin — esimerkiksi litistää 28x28-kuvan 784 luvuksi. Pinoaminen vstack- tai hstack-funktiolla yhdistää taulukoita.

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)

Satunnaislukujen luominen koneoppimista varten

Satunnaisluvut vaikuttavat painojen alustukseen, sekoittamiseen ja opetus- ja testijoukkojen jakamiseen. Asettakaa aina siemenluku, jotta tulokset toistuvat — ilman sitä jokainen suoritus on erilainen ja virheenkorjaus hankaloituu.

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 indices

Totuusarvomaskit ja edistynyt indeksointi

Totuusarvomaskaus suodattaa taulukot yhdellä selkeällä rivillä: verratkaa arvoja ehtoon ja valitkaa vastaavat alkiot. Edistynyt indeksointi valitsee alkiot ilmoitetun sijaintiluettelon perusteella.

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 50

NumPy scikit-learn-työnkuluissa

scikit-learn edellyttää, että muodot ovat oikein: X on 2D (samples, features) ja y 1D (samples). Muoto (100,) muodon (100, 1) sijaan on yleinen virhe — reshape(-1, 1) korjaa sen.

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

Pikatarkistus

Testatkaa tässä oppitunnissa oppimaanne Python-koneoppimisen käsitteistä.

Oppitunnin yhteenveto

Opitte NumPyn perusteet: taulukot ovat kaiken ML:n perusta, vektorisoitu matematiikka ja broadcasting poistavat hitaiden silmukoiden tarpeen, ja @-operaattori suorittaa jokaisen mallin. Seuraavaksi: Pandas. 🐼

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”NumPy-perusteet: taulukot ja matemaattiset operaatiot” ilmainen?

Kyllä – oppitunnin ”NumPy-perusteet: taulukot ja matemaattiset operaatiot” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Machine Learning Academy-kurssin, päivitä CoddyKit PROhon. Machine Learning Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”NumPy-perusteet: taulukot ja matemaattiset operaatiot”?

Luo ja käsittele NumPy-taulukoita, suorita vektoroitua aritmetiikkaa ja opi broadcasting, jotta voit käsitellä numeerista dataa tehokkaasti. Harjoittelet Machine Learning Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Machine Learning Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Machine Learning Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”NumPy-perusteet: taulukot ja matemaattiset operaatiot”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Machine Learning Academy-oppitunnilla?

Kyllä. Jokainen Machine Learning Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Anacondan ja Jupyter Notebookin asentaminen
  2. NumPy-perusteet: taulukot ja matemaattiset operaatiot
  3. Pandas datan käsittelyssä
  4. Datan visualisointi Matplotlibilla ja Seabornilla
← Takaisin: Machine Learning Academy