numpy, matplotlib, scipy, Pillow, OpenCV, PyTorch — những bộ công cụ có sẵn biến toán nặng và dữ liệu thành một dòng import. Bạn chọn công cụ; AI viết code.
← / → để chuyển slide · chuyển EN/VI bên dưới
Phần khó — toán nhanh trên dữ liệu lớn, vẽ biểu đồ, xử lý ảnh, mạng neural — đã được viết, kiểm chứng và miễn phí. Bạn import chúng; không tự xây.
Toán nhanh trên một triệu số, vẽ biểu đồ, chỉnh sửa ảnh, huấn luyện mạng neural — mỗi thứ là một thư viện hoàn thiện, đã kiểm chứng.
import numpy cho mảng nhanh; from PIL import Image cho chỉnh ảnh; import torch cho deep learning. Dòng import nói lên việc của cả file.
Bạn không cần nhớ hàng nghìn hàm. Bạn biết thư viện nào làm gì, rồi nhờ AI viết code và kiểm tra kết quả.
NumPy là nền; các thư viện khác xây trên hoặc bên cạnh nó. Biết cách xếp tầng giải thích vì sao thư viện này nhanh, thư viện kia khoa học, thư viện kia trực quan.
Deck này là bản đồ công việc. Mỗi thư viện có một việc rõ ràng và một chút nếm thử API — đủ để bạn nhận ra nó trong code mà AI đưa cho bạn.
Không cần nhớ API, không tự viết toán ma trận, không cần hiểu sâu bên trong cách mạng neural tự huấn luyện. Đó là việc của thư viện — và của AI.
Bản đồ sáu công việc: mảng, biểu đồ, khoa học, ảnh, thị giác, deep learning. Khi một bài toán đến, bạn gọi tên công việc, chọn thư viện, phần còn lại giao cho AI.
Mọi thư viện trong deck đều theo cùng ba bước. Các tên gọi tắt (np, plt, cv2, torch) là quy ước — bạn sẽ nhận ra chúng ở khắp nơi.
# first time on this machine: install (projects list this in requirements.txt)
# pip install numpy pillow matplotlib
# every file that uses them starts like this:
import numpy as np # alias: np
from PIL import Image # pull in the Image class
import matplotlib.pyplot as plt # alias: plt
print(np.mean([1, 2, 3])) # 2.0 — toolbox, ready
requirements.txt trong các dự án thật chỉ là danh sách các lệnh pip install. Nếu câu trả lời của AI bắt đầu bằng một dòng import lạ, đó là câu hỏi đầu tiên của bạn: 'cái này làm gì?'
Nền của toàn bộ stack dữ liệu: mảng nhanh và toán vector. Mọi thứ khác đều nói ngôn ngữ của nó.
Việc của NumPy chỉ có một: giữ số trong một lưới và làm toán trên cả lưới cùng lúc.
Lưới số nhanh, kích thước cố định: một hàng, một bảng, hoặc cả một bức ảnh (rows × cols × 3). Giống list Python, nhưng sắp xếp để nhanh.
a * b nhân hai mảng từng phần tử trong một dòng — không vòng lặp. Đó là 'nhanh': toán tốc độ C trên hàng triệu số.
Matplotlib, SciPy, OpenCV và PyTorch đều trao đổi dữ liệu dưới dạng mảng NumPy. Đọc được một mảng [rows, cols] là đọc được phần lớn stack dữ liệu.
Cốt lõi của NumPy: mô tả cả phép toán, không phải từng phần tử. Đó là cách vector.
import numpy as np
a = np.array([1, 2, 3, 4])
b = np.array([10, 20, 30, 40])
print(a * b) # [ 10 40 90 160] ← element by element
print(a.sum()) # 10
print(a.mean()) # 2.5
# an image = one array: rows × cols × 3 color channels
pixels = np.zeros((100, 100, 3))
np.array tạo mảng; .sum(), .mean() là các lần gọi hằng ngày. Dòng 11 là điểm nhấn: cả một bức ảnh chỉ là một mảng.
total = 0; for x in a: total = total + x — Python kiểm tra kiểu và biên từng phần tử. Ổn với 100 số, đau với 10 triệu.
a.sum() — một lần gọi, cả mảng được xử lý ở tốc độ C. Cùng kết quả, thường nhanh gấp 100. Mảng mới là mấu chốt; vòng lặp biến mất.
Thư viện vẽ kinh điển: từ list các số đến chart có thể chia sẻ trong ba lần gọi.
Con đường nhanh nhất từ 'list các số' đến 'chart có thể chia sẻ'.
Cho nó hai list (x, y), nó vẽ đường. Cột, scatter, histogram — những cách chuẩn để nhìn số.
import matplotlib.pyplot as plt là quy ước bạn thấy ở khắp nơi: plt.plot, plt.bar, plt.title, plt.show.
Với tư cách shipper bạn chủ yếu nhìn chart nó tạo ra — và thỉnh thoảng nhờ AI chỉnh: 'thành chart cột', 'thêm tiêu đề', 'xuất ra PNG'.
Toàn bộ API là 'mô tả bức tranh': dữ liệu, kiểu, cửa sổ.
import matplotlib.pyplot as plt
days = [1, 2, 3, 4, 5]
signups = [12, 19, 17, 28, 35]
plt.plot(days, signups) # draw the line
plt.title("Daily signups")
plt.show() # open the window
Ba lần gọi và chart đã có. Hình dạng chính hệt này xuất hiện trong mọi phân tích dữ liệu bạn xem.
Thống kê, tối ưu, tín hiệu, đại số tuyến tính — ngăn toán nghiêm túc, xây trên mảng NumPy.
SciPy = tính toán khoa học trên nền NumPy. Cùng mảng vào-ra, nhưng các công thức khó đã có sẵn bên trong.
Toán phân phối: trung bình, độ lệch chuẩn, khoảng tin cậy, kiểm định giả thuyết. Khi hỏi 'kết quả này có ý nghĩa không?', câu trả lời đến từ đây.
Tìm tham số tốt nhất: hạ chi phí, khớp đường cong với dữ liệu. Động cơ đằng sau 'khớp model với dữ liệu'.
Tần số và bộ lọc: làm sạch tín hiệu nhiễu từ cảm biến, tìm tần số chủ đạo. Bộ công cụ âm thanh và rung động.
Đại số tuyến tính vượt cơ bản của NumPy: phân rã, eigenvalue. Ngăn toán hạng nặng — tất cả nói bằng mảng NumPy.
SciPy nhận list hoặc mảng và trả về số — cùng dữ liệu, thêm một tầng toán.
from scipy import stats
temps = [21.5, 22.1, 20.9, 23.0, 22.4, 21.8, 22.6]
d = stats.describe(temps)
print(d.mean) # 22.1 — the average
print(d.std) # 0.6 — how much it varies
print(d.min, d.max) # 20.9 23.0
Một lần describe() đưa ra bản tổng kết thống kê đầy đủ của bộ dữ liệu. Không vòng lặp, không công thức.
Bộ công cụ ảnh hằng ngày: mở, đổi kích thước, cắt, chuyển, lưu. Thư viện web app của bạn thực sự dùng.
Pillow (PIL) làm 95% việc ảnh nhàm chán: mở, chỉnh, lưu. Không GPU, không model — chỉ pixel nhanh và đáng tin.
Image.open('a.jpg') đọc gần như mọi định dạng — JPEG, PNG, WebP, GIF; .save() ghi lại. Trụ cột của mọi endpoint ảnh.
img.resize((200, 200)) đặt kích thước chính xác; img.thumbnail((200, 200)) thu nhỏ mà giữ tỉ lệ. Hai lần gọi đằng sau mọi tính năng 'upload ảnh'.
img.crop((x1, y1, x2, y2)) cắt một vùng; img.convert('L') đổi sang đen trắng. Ghép chúng thành pipeline xử lý ảnh thật.
Avatar, ảnh sản phẩm, thumbnail tạo ra, file upload — với web app trên VPS, Pillow là thư viện ảnh bạn gặp đầu tiên và dùng nhiều nhất.
Mọi thứ khác (cắt, xoay, filter) cùng một hình dạng: mở, gọi method, lưu.
from PIL import Image
img = Image.open("photo.jpg") # open it
img = img.resize((400, 400)) # new size
thumb = img.copy()
thumb.thumbnail((100, 100)) # keep ratio
img.save("out.jpg") # save it
print(img.size) # (400, 400)
Tám dòng, ảnh đã được đổi kích thước, thu nhỏ và lưu — cốt lõi của hầu hết các tính năng 'upload ảnh'.
Xử lý ảnh và video ở quy mô lớn: filter, biến đổi, phát hiện — để máy tính nhìn thấy.
Xử lý ảnh và video ở quy mô lớn — filter, biến đổi, phát hiện, từng khung một.
Mờ, ngưỡng, phát hiện cạnh, xoay — viết bằng C tối ưu, nên vẫn nhanh trên ảnh lớn và cả luồng video.
Tìm khuôn mặt, góc, đường viền; khớp hình dạng. Bộ công cụ thị giác cổ điển — thứ có trước khi deep learning tiếp quản.
import cv2 là quy ước. Một đặc điểm nên nhớ: nó đọc ảnh theo BGR (blue–green–red), không phải RGB — nguồn bug màu kinh điển.
Hình dạng: nạp ảnh, biến đổi, phát hiện gì đó. Đó là toàn bộ vốn từ.
import cv2
img = cv2.imread("street.jpg") # loads as a NumPy array!
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5, 5), 0)
faces = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
found = faces.detectMultiScale(gray, 1.1)
print(len(found), "faces found")
Dòng 3 là xếp tầng trong thực tế: OpenCV đưa bạn một mảng NumPy. Filter và phát hiện là các lần gọi đơn trên mảng đó.
Framework deep learning: tensor, autograd, và vòng lặp huấn luyện đằng sau mọi model AI.
Framework deep learning: tensor, gradient tự động, và vòng lặp huấn luyện model.
Giống mảng NumPy, nhưng chạy được cả trên GPU: torch.tensor([1, 2, 3]). Kiểu dữ liệu của deep learning.
PyTorch ghi lại toán của bạn khi tính, để có thể tính gradient — 'mỗi trọng số nên đổi bao nhiêu'. Tín hiệu đó giúp việc huấn luyện khả thi.
Model là chuỗi phép toán tensor; huấn luyện là hàng nghìn bước dự đoán → đo lỗi → điều chỉnh nhẹ trọng số. Mọi LLM và model ảnh đều được tạo theo cách này.
Bạn hiếm khi tự viết cái này — nhưng nhận ra 'đoạn này đang huấn luyện model' mới là kỹ năng.
import torch
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = (x * x).sum() # 1 + 4 + 9 = 14
y.backward() # compute the gradient
print(x.grad) # [2. 4. 6.] ← d(x²)/dx = 2x
Một model trong phôi: một phép toán, và gradient chỉ ra hướng điều chỉnh. Huấn luyện = lặp lại điều này, hàng nghìn bước, ở quy mô lớn.
Deck trong một góc nhìn: ai ngồi trên ai, việc nào thuộc thư viện nào, và bạn thực sự sẽ dùng gì.
Khi thư viện nói 'làm việc với mảng', nghĩa là mảng NumPy. Dữ liệu chảy xuống: app của bạn gọi hàm cấp cao, bên dưới là toán NumPy nhanh.
app của bạn → gọi cấp cao → toán NumPy nhanh bên dưới
Nhớ các dòng import, không phải các hàm — dòng import chính là mô tả công việc.
| Thư viện | Một việc của nó | Nhận ra khi |
|---|---|---|
| NumPy | Mảng nhiều chiều nhanh & toán vector | import numpy as np — hầu hết stack dữ liệu bắt đầu ở đây |
| Matplotlib | Chart: đường, cột, histogram từ dữ liệu | import matplotlib.pyplot as plt |
| SciPy | Thống kê, tối ưu, tín hiệu, đại số tuyến tính | from scipy import stats / optimize |
| Pillow | Ảnh hằng ngày: mở, đổi kích thước, cắt, chuyển | from PIL import Image |
| OpenCV | Thị giác: filter, phát hiện, khung video | import cv2 |
| PyTorch | Deep learning: tensor, autograd, huấn luyện | import torch |
Hầu hết dự án không bao giờ chạm tới stack nặng — và điều đó là đúng. Gắn công cụ với công việc.
Upload, avatar, thumbnail, ảnh tạo ra: Pillow là trụ cột. Cài nhẹ, nhanh, vừa vặn VPS.
Phân tích CSV export, vẽ chart cho quyết định: NumPy làm toán, Matplotlib hiển thị. SciPy tham gia khi toán trở nên khoa học.
Chỉ cho dự án cụ thể: phát hiện vật (OpenCV) hoặc chạy model (PyTorch — thường qua API, không trên VPS của bạn). Biết chúng tồn tại; vậy là đủ.
Cùng bốn bước bạn dùng ở khắp nơi trong khóa học — giờ áp cho code thư viện.
Nói cho AI kết quả: 'đổi kích thước ảnh upload về 400px và lưu thumbnail.' Công việc chọn thư viện — ở đây là Pillow.
Dòng đầu của mọi câu trả lời AI: nó import gì? from PIL import Image → việc ảnh. import torch → việc ML nặng — nên hỏi vì sao.
Pillow cài rất nhẹ; PyTorch là hàng GB kèm stack GPU. Hỏi phải pip install gì trước khi đồng ý — trên VPS, đĩa và RAM là có thật.
Lưu kết quả và nhìn: thumbnail đúng kích thước, chart đúng số, gradient ra [2. 4. 6.]. Output là sự thật.
Sáu thư viện, một thói quen: biết việc của từng thư viện, và để AI làm phần còn lại.
Tiếp theo: dùng chúng trong một dự án thật. Gặp dòng import lạ? Bạn đã biết nước đi: đặt tên công việc, kiểm chi phí cài, chạy output.