Python / NumPy үндэс

NumPy үндэс

NumPy (Numerical Python) нь Python-ийн өгөгдөл шинжилгээ, machine learning-ийн суурь пакеж. Pandas, scikit-learn, TensorFlow бүгд NumPy-н дээр баригдсан. Тооны массив дээр гүйцэтгэх тооцооллоор Python жагсаалтаас 10–100 дахин хурдан ажилладаг.

Суулгах ба ndarray

bash
pip install numpy

NumPy-ийн гол объект нь ndarray (N-dimensional array) — олон хэмжээст тооны массив:

python
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 үүсгэх тусгай функцүүд

python
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-ийн хамгийн хүчирхэг онцлог: массивын бүх элементэд нэг дор үйлдэл хийнэ:

python
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с

Хэлбэр өөрчлөх ба матриц үйлдэл

python
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, математик загварчлалд зайлшгүй.

Бодит жишээ — оюутны дүн шинжлэх

python
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-ийг сурна.