Danh sách Python chứa được mọi thứ nhưng chậm khi tính toán số. np.ndarray lưu các số cùng kiểu liền nhau trong bộ nhớ, nên phép toán trên cả mảng chạy bằng mã C — nhanh hơn vòng lặp Python hàng chục đến hàng trăm lần.
import numpy as np
a = np.array([1, 2, 3]) # từ list
b = np.zeros((2, 3)) # ma trận 2×3 toàn 0
c = np.arange(0, 10, 2) # [0 2 4 6 8]
d = np.linspace(0, 1, 5) # 5 điểm đều từ 0 tới 1
e = np.random.default_rng(0).normal(size=(3, 4))
print(b.shape) # (2, 3) — số phần tử theo từng chiều
print(b.ndim) # 2 — số chiều
print(a.dtype) # int64 — kiểu dữ liệu
print(e.size) # 12 — tổng số phần tửBa thuộc tính quan trọng nhất của mọi mảng:
- shape: kích thước từng chiều, ví dụ ảnh màu là
(cao, rộng, 3), một lô câu văn đã nhúng là(batch, số_token, số_chiều) - dtype: kiểu phần tử —
float64(mặc định),float32(hay dùng trong học sâu),int64,bool - ndim: số chiều
x = np.arange(12) # shape (12,)
m = x.reshape(3, 4) # shape (3, 4) — không sao chép dữ liệu
t = x.reshape(2, 3, 2) # shape (2, 3, 2)
f = m.reshape(-1) # -1: tự suy ra → (12,)
print(m.T.shape) # (4, 3) — chuyển vịKhi đọc code AI, luôn tự hỏi "shape của biến này là gì?". Đa số lỗi trong mô hình học sâu là lỗi shape. Thói quen tốt: in x.shape sau mỗi bước.
?np.zeros((4, 5)).reshape(2, -1) có shape là gì?