NumPy үндэс
NumPy (Numerical Python) нь Python-ийн өгөгдөл шинжилгээ, machine learning-ийн суурь пакеж. Pandas, scikit-learn, TensorFlow бүгд NumPy-н дээр баригдсан. Тооны массив дээр гүйцэтгэх тооцооллоор Python жагсаалтаас 10–100 дахин хурдан ажилладаг.
Суулгах ба ndarray
pip install numpy
NumPy-ийн гол объект нь ndarray (N-dimensional array) — олон хэмжээст тооны массив:
import numpy as np
# 1D array — Python list-ээс үүсгэх
а = np.array([1, 2, 3, 4, 5])
print(а) # [1 2 3 4 5]
print(а.dtype) # int64
print(а.shape) # (5,) — 5 элементтэй 1D
# 2D array — матриц
б = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
print(б.shape) # (3, 3) — 3x3 матриц
print(б[1, 2]) # 6 — 2-р мөр, 3-р багана
Python list-д [1, 2, 3] нь ямар ч объект хадгалж болно. NumPy array нь нэг төрлийн тоо л хадгалдаг — тиймээс тооцоолол маш хурдан.
Array үүсгэх тусгай функцүүд
import numpy as np
# Тэгэн дүүргэсэн
print(np.zeros((3, 4))) # 3x4 бүгд тэг
print(np.ones((2, 3))) # 2x3 бүгд нэг
# Дараалал
print(np.arange(0, 10, 2)) # [0 2 4 6 8]
print(np.linspace(0, 1, 5)) # [0. 0.25 0.5 0.75 1. ]
# Санамсаргүй тоо
np.random.seed(42)
print(np.random.randint(1, 100, size=(3, 3)))
# [[52 93 15]
# [72 61 21]
# [83 87 75]]
np.linspace(0, 1, 5) нь 0-аас 1 хүртэл тэнцүү зайтай 5 тоо үүсгэнэ — графикийн тэнхлэг, загварчлалд маш их ашиглагдана.
Vectorized үйлдлүүд — давталтгүй тооцоолол
NumPy-ийн хамгийн хүчирхэг онцлог: массивын бүх элементэд нэг дор үйлдэл хийнэ:
import numpy as np
оноо = np.array([45, 78, 92, 63, 55, 88, 71, 49])
# Python for loop биш — нэг мөрийн тооцоолол
print(оноо * 2) # бүгдийг 2-оор үрж
print(оноо + 10) # бүгдэд 10 нэмж
print(оноо[оноо >= 70]) # 70-аас дээш шүүх — [78 92 88 71]
print(оноо.mean()) # дундаж — 67.625
print(оноо.std()) # стандарт хазайлт
print(оноо.max(), оноо.min()) # 92 45
# Хурд харьцуулалт
жагсаалт = list(range(1_000_000))
массив = np.arange(1_000_000)
import time
t = time.time(); sum(x**2 for x in жагсаалт); print(f"List: {time.time()-t:.3f}с")
t = time.time(); (массив**2).sum(); print(f"NumPy: {time.time()-t:.3f}с")
# List: ~0.200с
# NumPy: ~0.002с
Хэлбэр өөрчлөх ба матриц үйлдэл
import numpy as np
а = np.arange(12)
print(а) # [ 0 1 2 3 4 5 6 7 8 9 10 11]
# reshape — хэлбэр өөрчлөх
матриц = а.reshape(3, 4)
print(матриц)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
# Матриц үйлдэл
А = np.array([[1, 2], [3, 4]])
Б = np.array([[5, 6], [7, 8]])
print(А + Б) # элемент бүрийн нийлбэр
print(А @ Б) # матриц үржвэр
print(А.T) # транспоз
print(np.linalg.det(А)) # детерминант — -2.0
@ оператор нь матриц үржвэр хийдэг — machine learning, математик загварчлалд зайлшгүй.
Бодит жишээ — оюутны дүн шинжлэх
import numpy as np
# 5 сурагч, 4 шалгалт
дүн = np.array([
[85, 92, 78, 90],
[72, 68, 75, 80],
[95, 98, 92, 97],
[60, 55, 65, 58],
[88, 85, 91, 87],
])
print("Сурагч бүрийн дундаж:")
print(дүн.mean(axis=1).round(1)) # [86.2 73.8 95.5 59.5 87.8]
print("Шалгалт бүрийн дундаж:")
print(дүн.mean(axis=0).round(1)) # [80. 79.6 80.2 82.4]
print(f"Хамгийн өндөр оноо: {дүн.max()}")
print(f"Тэнцсэн (70+): {(дүн.mean(axis=1) >= 70).sum()} сурагч")
axis=1 нь мөр дагуу (сурагч бүрт), axis=0 нь багана дагуу (шалгалт бүрт) тооцоолно.
Дараагийн хичээлд:
Pandas үндэс — NumPy-н дэргэд хүснэгт өгөгдлийг уншиж, шинжлэх, засах хамгийн хүчирхэг Python хэрэгсэл болох Pandas DataFrame-ийг сурна.