Trong hướng dẫn này, bạn sẽ học cách nhân hai ma trận trong Python.multiply two matrices in Python.
Bạn sẽ bắt đầu bằng cách tìm hiểu điều kiện cho phép nhân ma trận hợp lệ và viết hàm Python tùy chỉnh thành nhân ma trận. Tiếp theo, bạn sẽ thấy làm thế nào bạn có thể đạt được kết quả tương tự bằng cách sử dụng danh sách lồng nhau.
Cuối cùng, bạn sẽ tiến hành sử dụng Numpy và các chức năng tích hợp của nó để thực hiện phép nhân ma trận hiệu quả hơn.
Cách kiểm tra xem phép nhân ma trận có hợp lệ không
Trước khi viết mã python cho phép nhân ma trận, hãy để xem lại các điều cơ bản của phép nhân ma trận.
Sự nhân ma trận giữa hai ma trận A và B chỉ hợp lệ nếu số lượng cột trong ma trận A bằng số lượng hàng trong ma trận B.number of columns in matrix A is equal to the number of rows in matrix B.
Bạn có thể đã bắt gặp điều kiện này để nhân ma trận trước đó. Tuy nhiên, bạn đã bao giờ tự hỏi tại sao đây là trường hợp?
Chà, nó vì cách nhân số nhân Ma trận hoạt động. Hãy xem hình ảnh dưới đây.
Trong ví dụ chung của chúng tôi, Matrix A có các hàng m và các cột N. Và Matrix B có n hàng n và cột P.m rows and n columns. And matrix B has n rows and p columns.
NumPy array using np.array[] C = np.array[[[sum[a*b for a,b in zip[A_row, B_col]] for B_col in zip[*B]] for A_row in A]] # Output: [[ 89 107] [ 47 49] [ 40 44]]Nếu bạn xem xét kỹ hơn, điều này tương đương với các vòng được lồng cho các vòng lặp mà chúng tôi đã có trước đó chỉ là điều đó thật ngắn gọn hơn.
Bạn cũng có thể làm điều này tất cả các chức năng tích hợp hiệu quả hơn. Hãy cùng tìm hiểu về họ trong phần tiếp theo.
Sử dụng numpy matmul [] để nhân ma trận trong python
[ for in ]
where,
: what you'd like to do—expression or operation
: each item you'd like to perform the operation on
: the iterable [list, tuple, etc.] that you're looping through
8 lấy hai ma trận làm đầu vào và trả về sản phẩm nếu phép nhân ma trận giữa các ma trận đầu vào là hợp lệ.C = np.matmul[A,B]
print[C]
# Output:
[[ 89 107]
[ 47 49]
[ 40 44]]
Lưu ý cách phương pháp này đơn giản hơn hai phương pháp chúng tôi đã học trước đó. Trên thực tế, thay vì
[ for in ]
where,
: what you'd like to do—expression or operation
: each item you'd like to perform the operation on
: the iterable [list, tuple, etc.] that you're looping through
8, bạn có thể sử dụng toán tử @ tương đương và chúng tôi sẽ thấy điều đó ngay lập tức.Cách sử dụng Toán tử @ trong Python để nhân ma trận
Trong Python,
sum[a*b for a,b in zip[A_row, B_col]
# zip[A_row, B_col] returns an iterator of tuples
# If A_row = [a1, a2, a3] & B_col = [b1, b2, b3]
# zip[A_row, B_col] returns [a1, b1], [a2, b2], and so on
0 là một toán tử nhị phân được sử dụng để nhân ma trận.Nó hoạt động trên hai ma trận và nói chung, các mảng numpy n-chiều và trả về ma trận sản phẩm.
Lưu ý: Bạn cần phải có Python 3.5 và sau đó để sử dụng toán tử
0. You need to have Python 3.5 and later to use thesum[a*b for a,b in zip[A_row, B_col] # zip[A_row, B_col] returns an iterator of tuples # If A_row = [a1, a2, a3] & B_col = [b1, b2, b3] # zip[A_row, B_col] returns [a1, b1], [a2, b2], and so on
0 operator.sum[a*b for a,b in zip[A_row, B_col] # zip[A_row, B_col] returns an iterator of tuples # If A_row = [a1, a2, a3] & B_col = [b1, b2, b3] # zip[A_row, B_col] returns [a1, b1], [a2, b2], and so on
Đây là cách bạn có thể sử dụng nó.
C = A@B
print[C]
# Output
array[[[ 89, 107],
[ 47, 49],
[ 40, 44]]]
Lưu ý rằng ma trận sản phẩm C giống như loại chúng tôi thu được trước đó.
Bạn có thể sử dụng np.dot [] để nhân ma trận không?
Nếu bạn đã từng bắt gặp mã sử dụng
sum[a*b for a,b in zip[A_row, B_col]
# zip[A_row, B_col] returns an iterator of tuples
# If A_row = [a1, a2, a3] & B_col = [b1, b2, b3]
# zip[A_row, B_col] returns [a1, b1], [a2, b2], and so on
2 để nhân hai ma trận, thì đây là cách thức hoạt động của nó.def multiply_matrix[A,B]:
global C
if A.shape[1] == B.shape[0]:
C = np.zeros[[A.shape[0],B.shape[1]],dtype = int]
for row in range[rows]:
for col in range[cols]:
for elt in range[len[B]]:
C[row, col] += A[row, elt] * B[elt, col]
return C
else:
return "Sorry, cannot multiply A and B."
0Bạn có thể thấy rằng
sum[a*b for a,b in zip[A_row, B_col]
# zip[A_row, B_col] returns an iterator of tuples
# If A_row = [a1, a2, a3] & B_col = [b1, b2, b3]
# zip[A_row, B_col] returns [a1, b1], [a2, b2], and so on
3 cũng trả về ma trận sản phẩm dự kiến.Tuy nhiên, theo tài liệu numpy, bạn chỉ nên sử dụng
sum[a*b for a,b in zip[A_row, B_col]
# zip[A_row, B_col] returns an iterator of tuples
# If A_row = [a1, a2, a3] & B_col = [b1, b2, b3]
# zip[A_row, B_col] returns [a1, b1], [a2, b2], and so on
2 để tính toán sản phẩm chấm của hai vectơ một chiều và không cho phép nhân ma trận.Nhớ lại từ phần trước, phần tử tại INDEX [I, J] của ma trận sản phẩm C là sản phẩm chấm của hàng I của ma trận A và cột J của ma trận B.
Khi Numpy hoàn toàn phát sóng hoạt động sản phẩm chấm này đến tất cả các hàng và tất cả các cột, bạn sẽ nhận được ma trận sản phẩm kết quả. Nhưng để giữ cho mã của bạn có thể đọc được và tránh sự mơ hồ, hãy sử dụng
[ for in ]
where,
: what you'd like to do—expression or operation
: each item you'd like to perform the operation on
: the iterable [list, tuple, etc.] that you're looping through
8 hoặc toán tử sum[a*b for a,b in zip[A_row, B_col]
# zip[A_row, B_col] returns an iterator of tuples
# If A_row = [a1, a2, a3] & B_col = [b1, b2, b3]
# zip[A_row, B_col] returns [a1, b1], [a2, b2], and so on
0 thay thế.Sự kết luận
Trong hướng dẫn này, bạn đã học được như sau.
- Điều kiện cho phép nhân ma trận có giá trị: Số lượng cột trong ma trận A = số lượng hàng trong ma trận B.columns in matrix A = number of rows in matrix B.
- Cách viết hàm Python tùy chỉnh để kiểm tra xem phép nhân Matrix có hợp lệ và trả về ma trận sản phẩm không. Cơ thể của chức năng sử dụng lồng nhau cho các vòng.
- Tiếp theo, bạn đã học cách sử dụng các toàn bộ danh sách lồng nhau để nhân ma trận. Họ ngắn gọn hơn so với các vòng lặp nhưng dễ bị các vấn đề về khả năng đọc.
- Cuối cùng, bạn đã học cách sử dụng chức năng tích hợp NP.Matmul [] để nhân vào ma trận và làm thế nào đây là hiệu quả nhất về tốc độ.
- Bạn cũng đã tìm hiểu về toán tử @ để nhân hai ma trận trong Python.@ operator to multiply two matrices in Python.
Và điều đó kết thúc cuộc thảo luận của chúng tôi về phép nhân ma trận trong Python. Như một bước tiếp theo, hãy tìm hiểu cách kiểm tra xem một số là chính trong Python. Hoặc giải quyết các vấn đề thú vị trên chuỗi Python.
Học hỏi hạnh phúc! 🎉