Xin chào mã của tôi, tôi phải nhân một điểm/vectơ [1,0] với ma trận [1. 00583, -0. 087156], [0. 087156, 1. 00583]. Kết quả sẽ cho tôi một điểm mới [x,y] Đây là những gì tôi có cho đến nay
import matplotlib.pyplot as plt
import numpy as np
A = np.array[[[1],[0]]]
B = np.array[[[1.00583, -0.087156], [0.087156, 1.00583]]]
test =np.multiply[A, B]
print [test]
Kết quả vẫn mang lại cho tôi ma trận [2x2] thay vì [2x1] mà tôi có thể sử dụng làm điểm. Có chức năng nào khác hoặc cách nào tốt hơn để giải quyết vấn đề này không?
Chúng ta sẽ viết một chương trình Python để lấy phép nhân hai ma trận đầu vào và in kết quả ra đầu ra. Chương trình Python này chỉ định cách nhân hai ma trận, có một số giá trị nhất định
Trước khi viết chương trình Python, trước tiên chúng ta hãy xem tổng quan về phép nhân hai ma trận
Phép nhân ma trận
Phép nhân ma trận là một phép toán nhị phân sử dụng một cặp ma trận để tạo ra một ma trận khác. Các phần tử trong ma trận được nhân theo cấp số cộng sơ cấp
Trong phép nhân hai ma trận, các phần tử hàng của ma trận thứ nhất được nhân với các phần tử cột của ma trận thứ hai
Ví dụ. Giả sử ta cho hai ma trận A và B sau
C sẽ là phép cộng của hai ma trận đã cho ở trên, i. e. , C = A+B, và do đó C phải là
Như chúng ta có thể thấy rằng ma trận kết quả C, còn được gọi là tích ma trận, có cùng số hàng với ma trận thứ nhất [ma trận A] và cùng số cột với ma trận thứ hai [ma trận B]. Chúng ta cũng biết loại phép nhân ma trận này là tích vô hướng của ma trận
Nhân hai ma trận
Bây giờ, chúng ta sẽ viết một chương trình Python để nhân hai ma trận trong đó chúng ta thực hiện phép nhân như chúng ta đã thực hiện trong ví dụ đã cho ở trên. Chúng ta có thể sử dụng nhiều phương thức khác nhau để viết một chương trình Python như thế này, nhưng trong hướng dẫn này, chúng ta sẽ chỉ sử dụng hai phương thức sau
- Sử dụng phương thức vòng lặp for lồng nhau
- Sử dụng phương pháp hiểu danh sách lồng nhau
Trong cả hai phương pháp, chúng tôi sẽ viết một chương trình ví dụ để hiểu cách thực hiện của chúng để nhân hai ma trận
Phương pháp 1. Sử dụng phương thức vòng lặp for lồng nhau
Trong phương pháp này, chúng ta sẽ sử dụng vòng lặp for lồng nhau trên hai ma trận và thực hiện phép nhân trên chúng và lưu trữ kết quả phép nhân trong ma trận thứ ba làm giá trị kết quả
Hãy hiểu cách thực hiện phương pháp này thông qua ví dụ sau
Ví dụ. Nhìn vào chương trình Python sau
đầu ra
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]
Phương pháp 2. Sử dụng phương pháp hiểu danh sách lồng nhau
Trong phương pháp này, chúng tôi sẽ sử dụng cách hiểu danh sách lồng nhau để lấy kết quả nhân của hai ma trận đầu vào. Trong khi sử dụng phương pháp hiểu danh sách trong chương trình, chúng tôi cũng sẽ sử dụng 'zip in Python' trên danh sách lồng nhau. Hãy cùng tìm hiểu cách thực hiện của phương thức này thông qua ví dụ sau
Bạn sẽ bắt đầu bằng cách tìm hiểu điều kiện để nhân ma trận hợp lệ và viết một hàm Python tùy chỉnh để nhân ma trận. Tiếp theo, bạn sẽ thấy cách bạn có thể đạt được kết quả tương tự bằng cách sử dụng khả năng hiểu danh sách lồng nhau
Cuối cùng, bạn sẽ tiếp tục sử dụng NumPy và các hàm tích hợp của nó để thực hiện phép nhân ma trận hiệu quả hơn
Trước khi viết mã Python cho phép nhân ma trận, hãy xem lại những kiến thức cơ bản về phép nhân ma trận
Ma trận Phép nhân giữa hai ma trận A và B chỉ đúng khi số cột của ma trận A bằng số hàng của ma trận B
Bạn có thể đã gặp điều kiện này đối với phép nhân ma trận trước đây. Tuy nhiên, bạn đã bao giờ tự hỏi tại sao lại như vậy chưa?
Chà, đó là do cách hoạt động của phép nhân ma trận. Hãy nhìn vào hình ảnh dưới đây
Trong ví dụ chung của chúng ta, ma trận A có m hàng và n cột. Và ma trận B có n hàng và p cột
Hình dạng của ma trận sản phẩm là gì?
Phần tử tại chỉ số [i, j] trong ma trận kết quả C là tích vô hướng của hàng i của ma trận A và cột j của ma trận B
Vì vậy, để lấy một phần tử tại một chỉ mục cụ thể trong ma trận kết quả C, bạn sẽ phải tính tích vô hướng của hàng và cột tương ứng trong ma trận A và B, tương ứng
Lặp lại quy trình trên, bạn sẽ nhận được ma trận tích C có hình dạng m x p—với m hàng và p cột, như hình bên dưới
Và tích vô hướng hay tích trong giữa hai vectơ a và b được cho bởi phương trình sau
Bây giờ hãy tóm tắt
- Rõ ràng là tích vô hướng chỉ được xác định giữa các vectơ có độ dài bằng nhau
- Vì vậy, để tích vô hướng giữa một hàng và một cột là hợp lệ—khi nhân hai ma trận—bạn cần cả hai ma trận có cùng số phần tử
- Trong ví dụ chung trên, mỗi hàng trong ma trận A có n phần tử. Và mỗi cột trong ma trận B cũng có n phần tử
Để ý kỹ hơn, n là số cột của ma trận A, đồng thời cũng là số hàng của ma trận B. Và đây chính là lý do tại sao bạn cần số cột trong ma trận A bằng số hàng trong ma trận B
Hi vọng các bạn đã hiểu điều kiện để phép nhân ma trận hợp lệ và cách lấy từng phần tử trong ma trận tích
Hãy tiến hành viết một số mã Python để nhân hai ma trận
Viết một hàm Python tùy chỉnh để nhân ma trận
Bước đầu tiên, chúng ta hãy viết một hàm tùy chỉnh để nhân các ma trận
Chức năng này nên làm như sau
- Chấp nhận hai ma trận A và B làm đầu vào
- Kiểm tra xem phép nhân ma trận giữa A và B có hợp lệ không
- Nếu hợp lệ, nhân hai ma trận A và B và trả về ma trận tích C
- Ngược lại, trả về thông báo lỗi rằng không thể nhân ma trận A và B
Bước 1. Tạo hai ma trận số nguyên bằng hàm
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."
1 của NumPy. Bạn cũng có thể khai báo ma trận dưới dạng danh sách Python lồng nhauimport numpy as np
np.random.seed[27]
A = np.random.randint[1,10,size = [3,3]]
B = np.random.randint[1,10,size = [3,2]]
print[f"Matrix A:\n {A}\n"]
print[f"Matrix B:\n {B}\n"]
# Output
Matrix A:
[[4 9 9]
[9 1 6]
[9 2 3]]
Matrix B:
[[2 2]
[5 7]
[4 4]]
Bước 2. Hãy tiếp tục và xác định chức năng
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."
2. Hàm này lấy hai ma trậ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."
3 và 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."
4 làm đầu vào và trả về ma trận tích 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."
5 nếu phép nhân ma trận hợp lệ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."
Phân tích định nghĩa hàm
Hãy tiến hành phân tích cú pháp định nghĩa hàm
Khai báo C như một biến toàn cục. Theo mặc định, tất cả các biến bên trong hàm Python đều có phạm vi cục bộ. Và bạn không thể truy cập chúng từ bên ngoài chức năng. Để làm cho ma trận sản phẩm C có thể truy cập được từ bên ngoài, chúng tôi sẽ phải khai báo nó dưới dạng biến toàn cục. Chỉ cần thêm từ hạn định
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."
6 trước tên biếnKiểm tra xem phép nhân ma trận có hợp lệ không. Sử dụng thuộc tính
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."
7 để kiểm tra xem A và B có nhân được không. Đối với bất kỳ mảng nào 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."
8, 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."
9 và The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]30, lần lượt cung cấp số lượng hàng và cột. Vì vậy,
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]31 kiểm tra xem phép nhân ma trận có hợp lệ không. Chỉ khi điều kiện này là
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]32, ma trận sản phẩm sẽ được tính toán. Ngược lại, hàm trả về thông báo lỗi
Sử dụng các vòng lặp lồng nhau để tính giá trị. Để tính toán các phần tử của ma trận kết quả, chúng ta phải lặp qua các hàng của ma trận A và vòng lặp
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]33 bên ngoài thực hiện điều này. Vòng lặp
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]33 bên trong giúp ta lặp qua cột của ma trận B. Và vòng lặp
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]33 trong cùng giúp truy xuất từng phần tử trong cột được chọn
▶️ Bây giờ chúng ta đã học cách hoạt động của hàm Python nhân ma trận, hãy gọi hàm với ma trận A và B mà chúng ta đã tạo trước đó
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]3
Khi phép nhân ma trận giữa A và B hợp lệ, hàm
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]36 trả về ma trận tích C
Sử dụng khả năng hiểu danh sách lồng nhau của Python để nhân ma trận
Trong phần trước, bạn đã viết một hàm Python để nhân các ma trận. Bây giờ, bạn sẽ thấy cách bạn có thể sử dụng khả năng hiểu danh sách lồng nhau để làm điều tương tự
Đây là cách hiểu danh sách lồng nhau để nhân ma trận
Lúc đầu, điều này có vẻ phức tạp. Nhưng chúng tôi sẽ phân tích cú pháp hiểu danh sách lồng nhau từng bước
Hãy tập trung vào một cách hiểu danh sách tại một thời điểm và xác định những gì nó làm
Chúng tôi sẽ sử dụng mẫu chung sau đây để hiểu danh sách
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."
1▶️ Hãy xem hướng dẫn của chúng tôi về Danh sách hiểu trong Python – với các ví dụ để hiểu sâu hơn
Trước khi tiếp tục, xin lưu ý rằng chúng tôi muốn xây dựng ma trận kết quả C mỗi lần một hàng
Giải thích về cách hiểu danh sách lồng nhau
Bước 1. Tính một giá trị duy nhất trong ma trận C
Cho hàng i của ma trận A và cột j của ma trận B, biểu thức dưới đây đưa ra mục tại chỉ số [i, j] trong ma trận C
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."
2Nếu
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]37, biểu thức sẽ trả về mục nhập
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]38 của ma trận C. Vì vậy, bạn có thể lấy một phần tử trong một hàng theo cách này
Bước 2. Dựng một hàng trong ma trận C
Mục tiêu tiếp theo của chúng tôi là xây dựng toàn bộ một hàng
Đối với hàng 1 trong ma trận A, bạn phải lặp qua tất cả các cột trong ma trận B để có một hàng hoàn chỉnh trong ma trận C
Quay lại mẫu hiểu danh sách
- Thay thế
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]
39 bằng biểu thức từ bước 1, vì đó là điều bạn muốn làm - Tiếp theo, thay thế
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]
39 bằng
11—mỗi cột trong ma trận Bdef 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."
- Cuối cùng, thay thế
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]
39 bằng
13—danh sách chứa tất cả các cột trong ma trận Bdef 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."
Và đây là cách hiểu danh sách đầu tiên
import numpy as np
np.random.seed[27]
A = np.random.randint[1,10,size = [3,3]]
B = np.random.randint[1,10,size = [3,2]]
print[f"Matrix A:\n {A}\n"]
print[f"Matrix B:\n {B}\n"]
# Output
Matrix A:
[[4 9 9]
[9 1 6]
[9 2 3]]
Matrix B:
[[2 2]
[5 7]
[4 4]]
0Bước 3. Xây dựng tất cả các hàng và thu được ma trận C
Tiếp theo, bạn sẽ phải điền vào ma trận sản phẩm C bằng cách tính phần còn lại của các hàng
Và để làm điều này, bạn phải lặp qua tất cả các hàng trong ma trận A
Quay lại phần hiểu danh sách một lần nữa và làm như sau
- Thay thế
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]
39 bằng cách hiểu danh sách từ bước 2. Nhớ lại rằng chúng tôi đã tính toán toàn bộ hàng trong bước trước - Bây giờ, thay thế
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]
39 bằng
16—mỗi hàng trong ma trận Adef 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."
- Và
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]
39 của bạn chính là ma trận A, khi bạn đang lặp qua các hàng của nó
Và đây là cách hiểu danh sách lồng nhau cuối cùng của chúng tôi. 🎊
import numpy as np
np.random.seed[27]
A = np.random.randint[1,10,size = [3,3]]
B = np.random.randint[1,10,size = [3,2]]
print[f"Matrix A:\n {A}\n"]
print[f"Matrix B:\n {B}\n"]
# Output
Matrix A:
[[4 9 9]
[9 1 6]
[9 2 3]]
Matrix B:
[[2 2]
[5 7]
[4 4]]
5Đã đến lúc kiểm chứng kết quả. ✔
import numpy as np
np.random.seed[27]
A = np.random.randint[1,10,size = [3,3]]
B = np.random.randint[1,10,size = [3,2]]
print[f"Matrix A:\n {A}\n"]
print[f"Matrix B:\n {B}\n"]
# Output
Matrix A:
[[4 9 9]
[9 1 6]
[9 2 3]]
Matrix B:
[[2 2]
[5 7]
[4 4]]
6Nếu bạn nhìn kỹ hơn, điều này tương đương với các vòng lặp for lồng nhau mà chúng ta đã có trước đó—chỉ là nó ngắn gọn hơn
Bạn cũng có thể làm điều này hiệu quả hơn bằng cách sử dụng một số hàm tích hợp. Hãy cùng tìm hiểu về chúng trong phần tiếp theo
Sử dụng NumPy matmul[] để nhân ma trận trong Python
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."
18 lấy hai ma trận làm đầu vào và trả về kết quả nếu phép nhân ma trận giữa các ma trận đầu vào là hợp lệimport numpy as np
np.random.seed[27]
A = np.random.randint[1,10,size = [3,3]]
B = np.random.randint[1,10,size = [3,2]]
print[f"Matrix A:\n {A}\n"]
print[f"Matrix B:\n {B}\n"]
# Output
Matrix A:
[[4 9 9]
[9 1 6]
[9 2 3]]
Matrix B:
[[2 2]
[5 7]
[4 4]]
8Lưu ý cách phương pháp này đơn giản hơn hai phương pháp chúng ta đã học trước đó. Trên thực tế, thay vì
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."
18, bạn có thể sử dụng toán tử @ tương đương và chúng ta sẽ thấy điều đó ngay sau đâyCách sử dụng toán tử @ trong Python để nhân ma trận
Trong Python,
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."
20 là toán tử nhị phân được sử dụng để nhân ma trậnNó hoạt động trên hai ma trận và nói chung là các mảng NumPy N chiều và trả về ma trận tích
Ghi chú. Bạn cần có Python 3. 5 trở lên để sử dụng toán tử
20def 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."
Đây là cách bạn có thể sử dụng 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."
2Lưu ý rằng ma trận sản phẩm C giống như ma trận chúng ta đã thu được trước đó
Bạn có thể sử dụng np. dot[] để nhân ma trận?
Nếu bạn đã từng gặp đoạn mã sử dụng
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."
22 để nhân hai ma trận, thì đây là cách nó hoạt độngdef 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 sẽ thấy rằng
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."
23 cũng trả về ma trận sản phẩm dự kiếnTuy nhiên, theo tài liệu NumPy, bạn chỉ nên sử dụng
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."
22 để tính tích vô hướng của hai vectơ một chiều chứ không phải để nhân ma trậnNhớ lại phần trước, phần tử tại chỉ số [i,j] của ma trận tích C là tích vô hướng của hàng i ma trận A và cột j của ma trận B
Vì NumPy phát hoàn toàn hoạt động sản phẩm chấm này tới tất cả các hàng và tất cả các cột, bạn sẽ có được ma trận sản phẩm kết quả. Nhưng để giữ cho mã của bạn dễ đọc và tránh sự mơ hồ, thay vào đó hãy sử dụng toán tử
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."
18 hoặc 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."
20Phần kết luận
🎯 Trong hướng dẫn này, bạn đã học được những điều sau
- Điều kiện để phép nhân ma trận hợp lệ. số cột trong ma trận A = số hàng trong ma trận B
- Cách viết hàm Python tùy chỉnh để kiểm tra xem phép nhân ma trận có hợp lệ hay không và trả về ma trận sản phẩm. Phần thân của hàm sử dụng các vòng for lồng nhau
- Tiếp theo, bạn đã học cách sử dụng khả năng hiểu danh sách lồng nhau để nhân ma trận. Chúng ngắn gọn hơn các vòng lặp for nhưng dễ gặp các vấn đề về khả năng đọc
- Cuối cùng, bạn đã học cách sử dụng hàm tích hợp NumPy np. matmul[] để nhân ma trận và cách này hiệu quả nhất về mặt tốc độ
- Bạn cũng đã học về toán tử @ để nhân hai ma trận trong Python
Và điều đó kết thúc phần thảo luận của chúng ta về phép nhân ma trận trong Python. Bước tiếp theo, hãy tìm hiểu cách kiểm tra xem một số có phải là số nguyên tố hay không trong Python. Hoặc giải các bài toán thú vị trên chuỗi Python