Ma trận 2D trong Python thường dùng list lồng nhau (list of lists).
Cách 1: List Comprehension (Pythonic, ngắn gọn)
N = 3 # rows
M = 3 # cols
# Ma trận i*j
matrix = [[i * j for i in range(N)] for j in range(M)]
print("Ma trận (inline):")
for row in matrix:
print(' '.join(map(str, row)))
Kết quả
Ma trận (inline): 0 0 0 0 1 2 0 2 4
Cách 2: Vòng lặp truyền thống (Dễ hiểu cho beginner)
N, M = 3, 3
matrix = [[0]*M for _ in range(N)] # Khởi tạo ma trận 0
for i in range(N):
for j in range(M):
matrix[i][j] = i * j # Hoặc logic tùy ý
for row in matrix:
print(row)
Cách 3: NumPy (Khuyên dùng cho tính toán khoa học)
import numpy as np
# Các cách khởi tạo phổ biến
zeros = np.zeros((3, 3), dtype=int)
ones = np.ones((3, 3), dtype=int)
identity = np.eye(3, dtype=int)
arange = np.arange(9).reshape(3, 3)
custom = np.fromfunction(lambda i, j: i*j, (3, 3), dtype=int)
print("zeros:\n", zeros)
print("custom i*j:\n", custom)
Lưu ý quan trọng
# SAI - Tạo tham chiếu cùng 1 list con bad_matrix = [[0]*M] * N bad_matrix[0][0] = 99 print(bad_matrix) # [[99,0,0], [99,0,0], [99,0,0]] - TẤT CẢ HÀNG ĐỀU THAY ĐỔI! # ĐÚNG - Mỗi hàng là list riêng biệt good_matrix = [[0]*M for _ in range(N)]
Kết luận
Dùng list comprehension [[...] for _ in range(N)] cho Python thuần. Dùng NumPy cho ma trận lớn, tính toán số học, đại số tuyến tính.