Nhập ma trận trong Python là kỹ năng nền tảng mà bất kỳ lập trình viên nào làm việc với dữ liệu dạng bảng đều cần nắm vững. Bài viết này sẽ hướng dẫn bạn cách tạo, thao tác và xử lý ma trận hiệu quả bằng Python, từ nested list cơ bản đến NumPy chuyên nghiệp.

Ma Trận Trong Python Là Gì?

Ma trận trong Python là cấu trúc dữ liệu hai chiều lưu trữ các phần tử theo hàng và cột. Python không có kiểu dữ liệu ma trận tích hợp sẵn, nhưng bạn có thể biểu diễn ma trận qua hai cách:

  • Nested list: Danh sách lồng nhau, mỗi list con đại diện cho một hàng
  • NumPy array: Mảng đa chiều từ thư viện NumPy, tối ưu cho tính toán khoa học

Ví dụ ma trận 3×4 (3 hàng, 4 cột):

# Dùng nested list matrix = [ [1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19] ]

Nhập Ma Trận Bằng Nested List

Tạo Ma Trận Cơ Bản

# Ma trận 2×3 A = [[1, 4, 5], [-5, 8, 9]] # Truy cập phần tử print(A[0]) # [1, 4, 5] - hàng đầu tiên print(A[1][2]) # 9 - phần tử hàng 2, cột 3 print(A[0][-1]) # 5 - phần tử cuối hàng 1

Truy Xuất Cột Từ Nested List

A = [[1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19]] # Lấy cột thứ 3 column = 
for row in A] print(column) # [5, 9, 11]

Nested list phù hợp cho ma trận nhỏ hoặc khi bạn cần cấu trúc linh hoạt. Tuy nhiên, với ma trận lớn hoặc tính toán phức tạp, NumPy là lựa chọn tối ưu hơn.

Nhập Ma Trận Bằng NumPy

NumPy cung cấp ndarray – cấu trúc mảng đồng nhất, hiệu suất cao, hỗ trợ đầy đủ các phép toán ma trận.

Cài Đặt NumPy

pip install numpy

Tạo Ma Trận NumPy

Ma trận từ list:

import numpy as np # Ma trận số nguyên A = np.array([[1, 2, 3], [3, 4, 5]]) print(A) # Ma trận số thực B = np.array([[1.1, 2, 3], [3, 4, 5]]) print(B) # Ma trận số phức C = np.array([[1, 2, 3], [3, 4, 5]], dtype=complex) print(C)

Ma trận đặc biệt:

# Ma trận toàn 0 zeros = np.zeros((2, 3)) print(zeros) # [[0. 0. 0.] # [0. 0. 0.]] # Ma trận toàn 1 ones = np.ones((1, 5)) print(ones) # [[1. 1. 1. 1. 1.]] # Ma trận đơn vị identity = np.eye(3) print(identity) # [[1. 0. 0.] # [0. 1. 0.] # [0. 0. 1.]]

Tạo ma trận từ dãy số:

# Dãy số từ 0 đến 11, reshape thành 2×6 B = np.arange(12).reshape(2, 6) print(B) # [[ 0 1 2 3 4 5] # [ 6 7 8 9 10 11]]

Các Phép Toán Ma Trận

Cộng Ma Trận

Cộng từng phần tử tương ứng của hai ma trận cùng kích thước:

import numpy as np A = np.array([[2, 4], [5, -6]]) B = np.array([[9, -3], [3, 6]]) C = A + B print(C) # [[11 1] # [ 8 0]]

Nhân Ma Trận

Nhân ma trận tuân theo quy tắc: số cột ma trận A phải bằng số hàng ma trận B.

A = np.array([[3, 6, 7], [5, -3, 0]]) # 2×3 B = np.array([[1, 1], [2, 1], [3, -3]]) # 3×2 C = A.dot(B) # hoặc np.dot(A, B) print(C) # [[ 36 -12] # [ -1 2]]

⚠️ Lưu ý: Phép nhân ma trận khác với nhân từng phần tử. Dùng A B trong NumPy sẽ nhân element-wise, không phải nhân ma trận.

Chuyển Vị Ma Trận

Đổi hàng thành cột và ngược lại:

A = np.array([[1, 1], [2, 1], [3, -3]]) print(A.T) # hoặc A.transpose() # [[ 1 2 3] # [ 1 1 -3]]

Truy Xuất Phần Tử, Hàng, Cột

Truy Xuất Phần Tử

A = np.array([[1, 4, 5, 12], [-5, 8, 9, 0], [-6, 7, 11, 19]]) print(A[0][0]) # 1 - phần tử đầu tiên print(A[1][2]) # 9 - hàng 2, cột 3 print(A[-1][-1]) # 19 - phần tử cuối cùng

Truy Xuất Hàng

print(A[0]) # [1, 4, 5, 12] - hàng đầu print(A[2]) # [-6, 7, 11, 19] - hàng thứ 3 print(A[-1]) # [-6, 7, 11, 19] - hàng cuối

Truy Xuất Cột

print(A[:, 0]) # [ 1 -5 -6] - cột đầu print(A[:, 3]) # [12 0 19] - cột thứ 4 print(A[:, -1]) # [12 0 19] - cột cuối

Slicing Ma Trận

Slicing cho phép trích xuất các phần con của ma trận:

A = np.array([[1, 4, 5, 12, 14], [-5, 8, 9, 0, 17], [-6, 7, 11, 19, 21]]) # 2 hàng đầu, 4 cột đầu print(A[:2, :4]) # [[ 1 4 5 12] # [-5 8 9 0]] # Hàng đầu, tất cả cột print(A[:1, ]) # [[ 1 4 5 12 14]] # Tất cả hàng, cột thứ 3 print(A[:, 2]) # [ 5 9 11] # Tất cả hàng, cột 3 đến 5 print(A[:, 2:5]) # [[ 5 12 14] # [ 9 0 17] # [11 19 21]]

Chuyển Đổi Ma Trận Sang Mảng 1D

Có ba cách chính để làm phẳng ma trận:

import numpy as np matrix = np.array([[4, 6, 7], [5, 2, 6], [6, 3, 6]]) # Dùng ravel() - trả về view array1 = matrix.ravel() print(array1) # [4 6 7 5 2 6 6 3 6] # Dùng flatten() - trả về copy array2 = matrix.flatten() print(array2) # [4 6 7 5 2 6 6 3 6] # Dùng reshape(-1) array3 = matrix.reshape(-1) print(array3) # [4 6 7 5 2 6 6 3 6]

Sự khác biệt: ravel() tạo view (thay đổi array sẽ ảnh hưởng matrix), còn flatten() tạo bản sao độc lập.

Nhập Ma Trận Từ Người Dùng

Nhập Từ Input

import numpy as np rows = int(input("Số hàng: ")) cols = int(input("Số cột: ")) print("Nhập các phần tử (cách nhau bởi dấu cách):") entries = [] for i in range(rows): row = list(map(int, input().split())) entries.append(row) matrix = np.array(entries) print("nMa trận vừa nhập:") print(matrix)

Nhập Từ File

import numpy as np # Đọc từ file CSV matrix = np.loadtxt('matrix.csv', delimiter=',') print(matrix) # Đọc từ file text matrix = np.loadtxt('matrix.txt') print(matrix)

So Sánh Nested List vs NumPy

Tiêu chí Nested List NumPy Array
Tốc độ Chậm với ma trận lớn Nhanh gấp 10-100 lần
Bộ nhớ Tốn nhiều bộ nhớ Tối ưu bộ nhớ
Phép toán Phải viết vòng lặp Hỗ trợ sẵn
Linh hoạt Chứa nhiều kiểu dữ liệu Chỉ một kiểu đồng nhất
Học tập Dễ học Cần thời gian làm quen

⚠️ Khuyến nghị: Dùng nested list cho ma trận nhỏ, học tập. Dùng NumPy cho ứng dụng thực tế, tính toán khoa học, machine learning.

Các Thao Tác Nâng Cao

Tìm Định Thức

A = np.array([[1, 2], [3, 4]]) det = np.linalg.det(A) print(det) # -2.0

Tìm Ma Trận Nghịch Đảo

A = np.array([[1, 2], [3, 4]]) inv = np.linalg.inv(A) print(inv) # [[-2. 1. ] # [ 1.5 -0.5]]

Giải Hệ Phương Trình

# Giải Ax = b A = np.array([[3, 1], [1, 2]]) b = np.array([9, 8]) x = np.linalg.solve(A, b) print(x) # [2. 3.]

Nhập ma trận trong Python trở nên đơn giản và mạnh mẽ khi bạn nắm vững cả nested list và NumPy. Nested list phù hợp cho học tập và ma trận nhỏ, trong khi NumPy là công cụ không thể thiếu cho tính toán khoa học và xử lý dữ liệu quy mô lớn. Sau khi thành thạo NumPy, bạn có thể khám phá Pandas để xử lý dữ liệu dạng bảng chuyên nghiệp hơn.

Cập nhật lần cuối 15/03/2026 by Hiếu IT

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *