Mã nhân ma trận Python

Thực hiện phép nhân ma trận bằng Python thuần túy mà không cần phụ thuộc. Chạy so sánh các vòng lặp lồng nhau của chúng tôi với các cấu trúc được tối ưu hóa.

Thử trong Trình chỉnh sửa

Tổng quan

Phép nhân ma trận là một phép toán cơ bản trong đại số tuyến tính, đồ họa máy tính và học máy. Nó liên quan đến việc lấy hai ma trận và tạo ra ma trận thứ ba bằng cách tính tích số chấm của hàng và cột.

Để nhân ma trận A với ma trận B, số cột của A phải bằng số hàng của B. Ma trận thu được có kích thước bằng số hàng của A và số cột của B.

Trong Python thuần túy, phép nhân ma trận được triển khai bằng ba vòng lặp lồng nhau. Mặc dù dễ viết nhưng thao tác O(n³) này lại chậm, đó là lý do tại sao các nhà khoa học dữ liệu sử dụng các công cụ thư viện chuyên dụng nhưNumPytrong sản xuất.

Đầu ra mã & thực thi

Phép nhân ma trận Python thuần túy bằng cách sử dụng các vòng lặp lồng nhau và hiểu danh sách.

def multiply_matrices(A, B):
    rows_A = len(A)
    cols_A = len(A[0])
    rows_B = len(B)
    cols_B = len(B[0])
    
    if cols_A != rows_B:
        raise ValueError("Cannot multiply: column size of A must match row size of B.")
        
    # Initialize result matrix with zeros
    result = [[0 for _ in range(cols_B)] for _ in range(rows_A)]
    
    # Iterate through rows of A
    for i in range(rows_A):
        # Iterate through columns of B
        for j in range(cols_B):
            # Iterate through rows of B (or columns of A)
            for k in range(cols_A):
                result[i][j] += A[i][k] * B[k][j]
                
    return result

# 2x3 Matrix A
matrix_A = [
    [1, 2, 3],
    [4, 5, 6]
]

# 3x2 Matrix B
matrix_B = [
    [7, 8],
    [9, 10],
    [11, 12]
]

print("Matrix A (2x3):", matrix_A)
print("Matrix B (3x2):", matrix_B)
res = multiply_matrices(matrix_A, matrix_B)
print("Product (2x2):", res)
Đầu ra thiết bị đầu cuối
Matrix A (2x3): [[1, 2, 3], [4, 5, 6]]
Matrix B (3x2): [[7, 8], [9, 10], [11, 12]]
Product (2x2): [[58, 64], [139, 154]]

Triển khai từng bước

  • Kết xuất đồ họa toán học và xoay tọa độ
  • Sản phẩm chấm lớp mạng thần kinh nhân tạo đơn giản
  • Hiểu cấu trúc thuật toán và các vòng lặp lồng nhau

Câu hỏi thường gặp

Tại saoNumPythực hiện phép nhân ma trận nhanh hơn nhiều?

NumPyđược viết bằng C và sử dụng thư viện BLAS/LAPACK được tối ưu hóa cao. Nó tận dụng khả năng vector hóa, tối ưu hóa bộ đệm CPU và thực thi song song, điều mà các vòng lặp Python tiêu chuẩn không thể thực hiện được.

Toán tử `@` trong Python là gì?

Bắt đầu vớiPython 3.5, ký hiệu `@` được giới thiệu là toán tử trung tố chuyên dụng cho phép nhân ma trận, cho phép bạn chạy `A @ B` khi sử dụng mảng có nhiều mảng.

Chủ đề liên quan