Làm thế nào để bạn nhân ma trận 2x2 trong python?

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

  1. Sử dụng phương thức vòng lặp for lồng nhau
  2. 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 nhau

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]]

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ến

Kiể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."
2

Nế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
    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."
    11—mỗi cột trong ma trận 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
    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."
    13—danh sách chứa tất cả các cột trong ma trận 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]]
0

Bướ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
    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."
    16—mỗi hàng trong ma trận A
  • 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]]
6

Nế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]]
8

Lư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 đây

Cá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ận

Nó 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ử

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

Đâ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."
2

Lư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 độ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."
0

Bạ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ến

Tuy 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ận

Nhớ 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."
20

Phầ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

Làm cách nào để nhân ma trận trong Python?

3 cách nhân ma trận trong Python .
Viết một hàm Python tùy chỉnh để nhân ma trận
Sử dụng khả năng hiểu danh sách lồng nhau của Python để nhân ma trận
Sử dụng NumPy matmul[] để nhân ma trận trong Python

Bạn có thể nhân ma trận 2x2 không?

Chúng tôi nhân các phần tử của mỗi hàng của ma trận thứ nhất với các phần tử của mỗi cột trong ma trận thứ hai [từng phần tử] như trong hình. Cuối cùng, chúng tôi thêm các sản phẩm. Kết quả của tích hai ma trận 2x2 lại là ma trận 2x2

Chủ Đề