Hướng dẫn how do you multiply two matrices in python without numpy? - làm thế nào để bạn nhân hai ma trận trong python mà không có numpy?

Trong Python, chúng ta có thể triển khai một ma trận dưới dạng danh sách lồng nhau (danh sách bên trong danh sách).

Chúng ta có thể coi từng phần tử như một hàng của ma trận.

Ví dụ X = [[1, 2], [4, 5], [3, 6]] sẽ đại diện cho một ma trận 3x2.

Hàng đầu tiên có thể được chọn là X[0]. Và, phần tử trong hàng đầu tiên, cột đầu tiên có thể được chọn là X[0][0].

Sự nhân của hai ma trận x và y chỉ được xác định nếu số lượng cột trong x bằng số lượng hàng y.

Nếu x là ma trận ____10 và y là ma trận [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 1 thì XY được xác định và có kích thước [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 2 (nhưng yx không được xác định). Dưới đây là một vài cách để thực hiện phép nhân ma trận trong Python.

Mã nguồn: phép nhân ma trận bằng cách sử dụng vòng lặp lồng nhau

# Program to multiply two matrices using nested loops # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[0,0,0,0], [0,0,0,0], [0,0,0,0]] # iterate through rows of X for i in range(len(X)): # iterate through columns of Y for j in range(len(Y[0])): # iterate through rows of Y for k in range(len(Y)): result[i][j] += X[i][k] * Y[k][j] for r in result: print(r)

Đầu ra

[114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23]

Trong chương trình này, chúng tôi đã sử dụng các vòng lặp [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 3 lồng nhau để lặp qua mỗi hàng và mỗi cột. Chúng tôi tích lũy tổng sản phẩm trong kết quả.

Kỹ thuật này đơn giản nhưng tốn kém về mặt tính toán khi chúng tôi tăng thứ tự của ma trận.

Đối với các hoạt động ma trận lớn hơn, chúng tôi khuyên bạn nên sử dụng các gói phần mềm được tối ưu hóa như Numpy, theo thứ tự (theo thứ tự 1000) lần so với mã trên.

Mã nguồn: phép nhân ma trận bằng cách sử dụng danh sách lồng nhau hiểu biết

# Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r)

Đầu ra của chương trình này giống như trên. Để hiểu mã trên, trước tiên chúng ta phải biết về chức năng tích hợp [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 4 và danh sách đối số giải nén bằng toán tử *.

Chúng tôi đã sử dụng sự hiểu biết danh sách lồng nhau để lặp qua từng phần tử trong ma trận. Mã trông phức tạp và không thể đọc được lúc đầu. Nhưng một khi bạn hiểu được sự hiểu biết danh sách, có lẽ bạn sẽ không quay lại các vòng lặp lồng nhau.

Cách tiếp cận Numpythonic: (Sử dụng [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 5 để có được sản phẩm DOT của hai ma trận)

In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1])

Cách tiếp cận Pythonic:

Độ dài của vòng lặp [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 3 thứ hai của bạn là [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 7 và bạn cố gắng lập chỉ mục [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 8 dựa trên đó để bạn gặp lỗi chỉ mục. Như một cách Pythonic hơn, bạn có thể sử dụng hàm [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 9 để lấy các cột của danh sách sau đó sử dụng # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 0 và # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 1 trong danh sách hiểu:

In [13]: first,second=[1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]] In [14]: from itertools import starmap In [15]: from operator import mul In [16]: [sum(starmap(mul, zip(first, col))) for col in zip(*second)] Out[16]: [1, 1]

Hôm nay, tôi có một thử thách lập trình toán học khác cho bạn .. Chúng tôi sẽ mã hóa một chương trình đơn giản để nhân hai ma trận với nhau.

Bạn có nhớ ma trận từ toán học trung học của bạn không? Ở đây, một bản tóm tắt nhanh chóng.

Ma trận được làm bằng các hàng và cột của số. Ma trận bên dưới có 2 hàng và 3 cột. Đây được gọi là ma trận 2 x 3.

Ma trận thứ hai dưới đây là ma trận 3 x 4 (nghĩa là nó có 3 hàng và 4 cột).

Để nhân hai ma trận, số lượng cột trong ma trận thứ nhất phải khớp với số lượng hàng trong ma trận thứ hai.

Trong ví dụ trên, ma trận kết quả là ma trận 2 x 4.

Để nhân hai ma trận, chúng tôi nhân các phần tử trong mỗi hàng của ma trận thứ nhất với các phần tử trong mỗi cột của ma trận thứ hai.

Sau khi nhân các yếu tố, chúng tôi tổng hợp các sản phẩm. Chẳng hạn, sơ đồ dưới đây cho thấy cách chúng ta nhận được số 38 bằng cách nhân hàng đầu tiên (2, 3, 6) trong ma trận đầu tiên với cột đầu tiên (1, 2, 5) trong ma trận thứ hai.

Xa lạ? Nếu bạn bị lạc, bạn có thể tham khảo video YouTube dưới đây để giải thích chi tiết hơn:


Đối với những người quen thuộc với việc sử dụng Python cho khoa học dữ liệu, có lẽ bạn đã sử dụng mô -đun Numpy để nhân ma trận trước. Chúng tôi sẽ không làm điều đó ngày hôm nay. Thay vào đó, chúng tôi sẽ mã hóa chương trình nhân ma trận của riêng mình. Sẳn sàng?

Nhiệm vụ hôm nay là viết một chương trình bằng Python làm như sau:

Đầu tiên, nhắc người dùng nhập các hàng của ma trận đầu tiên từng cái một. Nếu họ có thể, nhân hai ma trận và hiển thị kết quả.
Next, prompt users to enter the rows of the second matrix.
After that, check if the two matrices can be multiplied.
If they can, multiply the two matrices and display the result.

Dưới đây, một video cho thấy chương trình hoạt động như thế nào.


Các giải pháp được đề xuất và chạy qua nó có thể được tìm thấy dưới đây.

Giải pháp được đề xuất:

def getMatrix(name): matrixCreated = [] i = 0 while True: i += 1 row = input('\nEnter elements in row %s of Matrix %s (separated by commas)\nOr -1 to exit: ' %(i, name)) if row == '-1': break else: strList = row.split(',') matrixCreated.append(list(map(int, strList))) return matrixCreated def getColAsList(matrixToManipulate, col): myList = [] numOfRows = len(matrixToManipulate) for i in range(numOfRows): myList.append(matrixToManipulate[i][col]) return myList def getCell(matrixA, matrixB, r, c): matrixBCol = getColAsList(matrixB, c) lenOfList = len(matrixBCol) productList = [matrixA[r][i]*matrixBCol[i] for i in range(lenOfList)] return sum(productList) matrixA = getMatrix('A') matrixB = getMatrix('B') rowA = len(matrixA) colA = len(matrixA[0]) rowB = len(matrixB) colB = len(matrixB[0]) result = [[0 for p in range(colB)] for q in range(rowA)] if (colA != rowB): print('The two matrices cannot be multiplied') else: print('\nThe result is') for i in range(rowA): for j in range(colB): result[i][j] = getCell(matrixA, matrixB, i, j) print(result[i])


Các khái niệm chính được sử dụng:

  • Kiểm soát các câu lệnh lưu lượng như # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 2, # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 3, [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 3 vòng lặp, v.v.
  • Các chức năng tích hợp Python, bao gồm # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 5, # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 6, # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 7, # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 8, # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 9, v.v.

Chạy xuyên qua:

Đầu tiên, chúng tôi xác định một hàm gọi là In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 0 có một tham số: In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 1.

Tham số In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 1 cho phép chúng tôi vượt qua tên của ma trận mà chúng tôi muốn tạo.

Trong hàm, trước tiên chúng tôi khai báo một danh sách trống có tên là In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 3. Danh sách này sẽ được sử dụng để lưu trữ ma trận mà hàm tạo ra. Ma trận sẽ được lưu trữ dưới dạng danh sách các danh sách. Ví dụ, nếu ma trận là

Nó sẽ được lưu trữ dưới dạng [[2, 1, 4], [5, 3, 1]]]

Tiếp theo, chúng tôi khai báo một biến In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 4 được sử dụng để lưu trữ số hàng.

Sau khi khai báo hai biến, chúng tôi sử dụng vòng lặp In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 5 để liên tục nhắc người dùng nhập hàng của ma trận hoặc nhập -1 để thoát chức năng.

Giả sử người dùng nhập In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 6 cho hàng đầu tiên.

Sau đó, chúng tôi sử dụng hàm # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 8 tích hợp để chia đầu vào thành một danh sách các chuỗi và lưu trữ nó thành một biến có tên là In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 8. Chúng tôi sẽ nhận được In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 9 do kết quả.

Tiếp theo, chúng tôi sử dụng hàm # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 5 để chuyển tất cả các yếu tố trong In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 8 vào số nguyên.

Hàm # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 5 là chức năng Python tích hợp áp dụng chức năng cho tất cả các yếu tố của một điều đáng tin cậy (như danh sách). Nó chấp nhận tên của hàm và có thể lặp lại như các đối số và trả về kết quả dưới dạng đối tượng bản đồ.

Ở đây, chúng tôi sử dụng hàm # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 5 (In [13]: first,second=[1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]] In [14]: from itertools import starmap In [15]: from operator import mul In [16]: [sum(starmap(mul, zip(first, col))) for col in zip(*second)] Out[16]: [1, 1] 4) để áp dụng hàm In [13]: first,second=[1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]] In [14]: from itertools import starmap In [15]: from operator import mul In [16]: [sum(starmap(mul, zip(first, col))) for col in zip(*second)] Out[16]: [1, 1] 5 cho tất cả các phần tử trong In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 8.

Khi hàm # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 5 trả về một đối tượng MAP, chúng tôi sử dụng hàm # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 6 tích hợp để chuyển đổi nó thành một danh sách.

Chúng tôi sẽ nhận được In [13]: first,second=[1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]] In [14]: from itertools import starmap In [15]: from operator import mul In [16]: [sum(starmap(mul, zip(first, col))) for col in zip(*second)] Out[16]: [1, 1] 9 do kết quả.

Sau đó, chúng tôi sử dụng phương thức # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 9 để nối danh sách này vào In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 3.

Sau khi nhận được hàng đầu tiên, chức năng In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 0 sẽ nhắc người dùng nhập hàng tiếp theo (sử dụng vòng lặp In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 5). Điều này được thực hiện nhiều lần cho đến khi người dùng nhập -1.

Khi người dùng nhập -1, chúng tôi sử dụng từ khóa def getMatrix(name): matrixCreated = [] i = 0 while True: i += 1 row = input('\nEnter elements in row %s of Matrix %s (separated by commas)\nOr -1 to exit: ' %(i, name)) if row == '-1': break else: strList = row.split(',') matrixCreated.append(list(map(int, strList))) return matrixCreated def getColAsList(matrixToManipulate, col): myList = [] numOfRows = len(matrixToManipulate) for i in range(numOfRows): myList.append(matrixToManipulate[i][col]) return myList def getCell(matrixA, matrixB, r, c): matrixBCol = getColAsList(matrixB, c) lenOfList = len(matrixBCol) productList = [matrixA[r][i]*matrixBCol[i] for i in range(lenOfList)] return sum(productList) matrixA = getMatrix('A') matrixB = getMatrix('B') rowA = len(matrixA) colA = len(matrixA[0]) rowB = len(matrixB) colB = len(matrixB[0]) result = [[0 for p in range(colB)] for q in range(rowA)] if (colA != rowB): print('The two matrices cannot be multiplied') else: print('\nThe result is') for i in range(rowA): for j in range(colB): result[i][j] = getCell(matrixA, matrixB, i, j) print(result[i]) 4 để thoát vòng lặp In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 5. Với điều đó, chức năng đã hoàn tất và chúng tôi chỉ cần trả lại In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 3.

Tiếp theo, chúng tôi tạo một chức năng khác gọi là def getMatrix(name): matrixCreated = [] i = 0 while True: i += 1 row = input('\nEnter elements in row %s of Matrix %s (separated by commas)\nOr -1 to exit: ' %(i, name)) if row == '-1': break else: strList = row.split(',') matrixCreated.append(list(map(int, strList))) return matrixCreated def getColAsList(matrixToManipulate, col): myList = [] numOfRows = len(matrixToManipulate) for i in range(numOfRows): myList.append(matrixToManipulate[i][col]) return myList def getCell(matrixA, matrixB, r, c): matrixBCol = getColAsList(matrixB, c) lenOfList = len(matrixBCol) productList = [matrixA[r][i]*matrixBCol[i] for i in range(lenOfList)] return sum(productList) matrixA = getMatrix('A') matrixB = getMatrix('B') rowA = len(matrixA) colA = len(matrixA[0]) rowB = len(matrixB) colB = len(matrixB[0]) result = [[0 for p in range(colB)] for q in range(rowA)] if (colA != rowB): print('The two matrices cannot be multiplied') else: print('\nThe result is') for i in range(rowA): for j in range(colB): result[i][j] = getCell(matrixA, matrixB, i, j) print(result[i]) 7. Hàm này có hai tham số - def getMatrix(name): matrixCreated = [] i = 0 while True: i += 1 row = input('\nEnter elements in row %s of Matrix %s (separated by commas)\nOr -1 to exit: ' %(i, name)) if row == '-1': break else: strList = row.split(',') matrixCreated.append(list(map(int, strList))) return matrixCreated def getColAsList(matrixToManipulate, col): myList = [] numOfRows = len(matrixToManipulate) for i in range(numOfRows): myList.append(matrixToManipulate[i][col]) return myList def getCell(matrixA, matrixB, r, c): matrixBCol = getColAsList(matrixB, c) lenOfList = len(matrixBCol) productList = [matrixA[r][i]*matrixBCol[i] for i in range(lenOfList)] return sum(productList) matrixA = getMatrix('A') matrixB = getMatrix('B') rowA = len(matrixA) colA = len(matrixA[0]) rowB = len(matrixB) colB = len(matrixB[0]) result = [[0 for p in range(colB)] for q in range(rowA)] if (colA != rowB): print('The two matrices cannot be multiplied') else: print('\nThe result is') for i in range(rowA): for j in range(colB): result[i][j] = getCell(matrixA, matrixB, i, j) print(result[i]) 8 và def getMatrix(name): matrixCreated = [] i = 0 while True: i += 1 row = input('\nEnter elements in row %s of Matrix %s (separated by commas)\nOr -1 to exit: ' %(i, name)) if row == '-1': break else: strList = row.split(',') matrixCreated.append(list(map(int, strList))) return matrixCreated def getColAsList(matrixToManipulate, col): myList = [] numOfRows = len(matrixToManipulate) for i in range(numOfRows): myList.append(matrixToManipulate[i][col]) return myList def getCell(matrixA, matrixB, r, c): matrixBCol = getColAsList(matrixB, c) lenOfList = len(matrixBCol) productList = [matrixA[r][i]*matrixBCol[i] for i in range(lenOfList)] return sum(productList) matrixA = getMatrix('A') matrixB = getMatrix('B') rowA = len(matrixA) colA = len(matrixA[0]) rowB = len(matrixB) colB = len(matrixB[0]) result = [[0 for p in range(colB)] for q in range(rowA)] if (colA != rowB): print('The two matrices cannot be multiplied') else: print('\nThe result is') for i in range(rowA): for j in range(colB): result[i][j] = getCell(matrixA, matrixB, i, j) print(result[i]) 9.

Hàm được sử dụng để có được cột được chỉ định (def getMatrix(name): matrixCreated = [] i = 0 while True: i += 1 row = input('\nEnter elements in row %s of Matrix %s (separated by commas)\nOr -1 to exit: ' %(i, name)) if row == '-1': break else: strList = row.split(',') matrixCreated.append(list(map(int, strList))) return matrixCreated def getColAsList(matrixToManipulate, col): myList = [] numOfRows = len(matrixToManipulate) for i in range(numOfRows): myList.append(matrixToManipulate[i][col]) return myList def getCell(matrixA, matrixB, r, c): matrixBCol = getColAsList(matrixB, c) lenOfList = len(matrixBCol) productList = [matrixA[r][i]*matrixBCol[i] for i in range(lenOfList)] return sum(productList) matrixA = getMatrix('A') matrixB = getMatrix('B') rowA = len(matrixA) colA = len(matrixA[0]) rowB = len(matrixB) colB = len(matrixB[0]) result = [[0 for p in range(colB)] for q in range(rowA)] if (colA != rowB): print('The two matrices cannot be multiplied') else: print('\nThe result is') for i in range(rowA): for j in range(colB): result[i][j] = getCell(matrixA, matrixB, i, j) print(result[i]) 9) của def getMatrix(name): matrixCreated = [] i = 0 while True: i += 1 row = input('\nEnter elements in row %s of Matrix %s (separated by commas)\nOr -1 to exit: ' %(i, name)) if row == '-1': break else: strList = row.split(',') matrixCreated.append(list(map(int, strList))) return matrixCreated def getColAsList(matrixToManipulate, col): myList = [] numOfRows = len(matrixToManipulate) for i in range(numOfRows): myList.append(matrixToManipulate[i][col]) return myList def getCell(matrixA, matrixB, r, c): matrixBCol = getColAsList(matrixB, c) lenOfList = len(matrixBCol) productList = [matrixA[r][i]*matrixBCol[i] for i in range(lenOfList)] return sum(productList) matrixA = getMatrix('A') matrixB = getMatrix('B') rowA = len(matrixA) colA = len(matrixA[0]) rowB = len(matrixB) colB = len(matrixB[0]) result = [[0 for p in range(colB)] for q in range(rowA)] if (colA != rowB): print('The two matrices cannot be multiplied') else: print('\nThe result is') for i in range(rowA): for j in range(colB): result[i][j] = getCell(matrixA, matrixB, i, j) print(result[i]) 8 làm danh sách. Ví dụ, giả sử

X = [[1, 2], [4, 5], [3, 6]]2

X = [[1, 2], [4, 5], [3, 6]]3

Hàm trả về X = [[1, 2], [4, 5], [3, 6]]4 là kết quả.

(Lưu ý rằng hàm này sử dụng 0 để biểu diễn cột đầu tiên.)

Để làm điều đó, trước tiên chúng tôi khai báo một danh sách trống có tên là X = [[1, 2], [4, 5], [3, 6]]5.

Tiếp theo, chúng tôi xác định số lượng hàng mà def getMatrix(name): matrixCreated = [] i = 0 while True: i += 1 row = input('\nEnter elements in row %s of Matrix %s (separated by commas)\nOr -1 to exit: ' %(i, name)) if row == '-1': break else: strList = row.split(',') matrixCreated.append(list(map(int, strList))) return matrixCreated def getColAsList(matrixToManipulate, col): myList = [] numOfRows = len(matrixToManipulate) for i in range(numOfRows): myList.append(matrixToManipulate[i][col]) return myList def getCell(matrixA, matrixB, r, c): matrixBCol = getColAsList(matrixB, c) lenOfList = len(matrixBCol) productList = [matrixA[r][i]*matrixBCol[i] for i in range(lenOfList)] return sum(productList) matrixA = getMatrix('A') matrixB = getMatrix('B') rowA = len(matrixA) colA = len(matrixA[0]) rowB = len(matrixB) colB = len(matrixB[0]) result = [[0 for p in range(colB)] for q in range(rowA)] if (colA != rowB): print('The two matrices cannot be multiplied') else: print('\nThe result is') for i in range(rowA): for j in range(colB): result[i][j] = getCell(matrixA, matrixB, i, j) print(result[i]) 8 có và lưu trữ nó trong một biến gọi là X = [[1, 2], [4, 5], [3, 6]]7.

Nhớ lại def getMatrix(name): matrixCreated = [] i = 0 while True: i += 1 row = input('\nEnter elements in row %s of Matrix %s (separated by commas)\nOr -1 to exit: ' %(i, name)) if row == '-1': break else: strList = row.split(',') matrixCreated.append(list(map(int, strList))) return matrixCreated def getColAsList(matrixToManipulate, col): myList = [] numOfRows = len(matrixToManipulate) for i in range(numOfRows): myList.append(matrixToManipulate[i][col]) return myList def getCell(matrixA, matrixB, r, c): matrixBCol = getColAsList(matrixB, c) lenOfList = len(matrixBCol) productList = [matrixA[r][i]*matrixBCol[i] for i in range(lenOfList)] return sum(productList) matrixA = getMatrix('A') matrixB = getMatrix('B') rowA = len(matrixA) colA = len(matrixA[0]) rowB = len(matrixB) colB = len(matrixB[0]) result = [[0 for p in range(colB)] for q in range(rowA)] if (colA != rowB): print('The two matrices cannot be multiplied') else: print('\nThe result is') for i in range(rowA): for j in range(colB): result[i][j] = getCell(matrixA, matrixB, i, j) print(result[i]) 8 là danh sách các danh sách? Giả sử ____62
X = [[1, 2], [4, 5], [3, 6]]2

Nó có hai yếu tố 3x20 và 3x21.

Do đó, 3x22 (bằng 2) về cơ bản cung cấp cho chúng ta số lượng hàng của ma trận.

Sau khi nhận được số lượng hàng của ma trận, chúng tôi sử dụng vòng [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 3 để lặp qua mỗi hàng và trích xuất phần tử tại Index def getMatrix(name): matrixCreated = [] i = 0 while True: i += 1 row = input('\nEnter elements in row %s of Matrix %s (separated by commas)\nOr -1 to exit: ' %(i, name)) if row == '-1': break else: strList = row.split(',') matrixCreated.append(list(map(int, strList))) return matrixCreated def getColAsList(matrixToManipulate, col): myList = [] numOfRows = len(matrixToManipulate) for i in range(numOfRows): myList.append(matrixToManipulate[i][col]) return myList def getCell(matrixA, matrixB, r, c): matrixBCol = getColAsList(matrixB, c) lenOfList = len(matrixBCol) productList = [matrixA[r][i]*matrixBCol[i] for i in range(lenOfList)] return sum(productList) matrixA = getMatrix('A') matrixB = getMatrix('B') rowA = len(matrixA) colA = len(matrixA[0]) rowB = len(matrixB) colB = len(matrixB[0]) result = [[0 for p in range(colB)] for q in range(rowA)] if (colA != rowB): print('The two matrices cannot be multiplied') else: print('\nThe result is') for i in range(rowA): for j in range(colB): result[i][j] = getCell(matrixA, matrixB, i, j) print(result[i]) 9. Sau khi làm điều đó, chúng tôi trả lại danh sách.

Tiếp theo, chúng tôi chuyển sang chức năng 3x25. Hàm này có 4 tham số, 3x26, 3x27, 3x28 và 3x29.

Nó nhân lên mỗi phần tử trong hàng 3x28 của 3x26 với phần tử tương ứng trong cột 3x29 của 3x27 và trả về tổng của tất cả các sản phẩm.

Ví dụ, nếu

X[0]4X[0]5 (tương ứng với hàng đầu tiên) ________ 86 (tương ứng với cột thứ hai)
X[0]5 (corresponds to the first row)
X[0]6 (corresponds to the second column)

Hàm trước tiên chuyển đổi cột thứ hai của 3x27 thành một danh sách và lưu trữ nó thành một biến có tên là X[0]8.

Kết quả là chúng tôi sẽ nhận được X[0]9.

Sau khi nhận được cột làm danh sách, chúng tôi sử dụng hàm X[0][0]0 để có được số lượng các phần tử trong X[0]8 và lưu trữ nó trong một biến có tên là X[0][0]2.

Tiếp theo, chúng tôi sử dụng vòng lặp [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 3 để nhân mỗi phần tử với hàng 3x28 của 3x26 với phần tử tương ứng trong col 3x29 của 3x27 và lưu trữ kết quả trong danh sách gọi là X[0][0]8.

Dòng 24

X[0][0]9

về cơ bản là một cách viết đơn giản hóa

[114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 00    [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 01
    [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 01

Trong ví dụ của chúng tôi, X[0]5.

Như [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 03 (tức là có ba yếu tố trong X[0]8), chúng tôi nhận được

[114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 05 Điều này có nghĩa là chúng ta đang nhân mỗi phần tử trong hàng đầu tiên của 3x26 với mỗi phần tử tương ứng trong cột thứ hai của 3x27.
This means we are multiplying each element in the first row of 3x26 with each corresponding element in the second column of 3x27.

Khi đã hoàn thành, chúng tôi sử dụng hàm Python tích hợp # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 7 để thêm tất cả các yếu tố trong X[0][0]8 và trả về kết quả.

Với điều đó, ba chức năng mà chúng ta cần hoàn thành.

Bây giờ, chúng tôi đã sẵn sàng để có được đầu vào người dùng của chúng tôi. Chúng tôi sử dụng chức năng In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 0 để nhắc người dùng nhập dữ liệu cho hai ma trận và lưu trữ chúng bên trong các biến 3x26 và 3x27.

Chúng tôi cũng sử dụng hàm X[0][0]0 tích hợp để có được số lượng hàng và cột trong cả hai ma trận.

Giả sử 3x26 và 3x27 như được hiển thị bên dưới:

Trong trường hợp đó, [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 16, [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 17, [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 18 và [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 19.

Do đó, chúng ta sẽ nhận được ma trận 2 × 4 sau khi chúng ta nhân hai ma trận.

Để lưu trữ ma trận kết quả này, chúng tôi khởi tạo một danh sách có tên [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 20 như sau:

[114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 21

Chúng tôi sẽ cập nhật các yếu tố trong [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 20 sau khi chúng tôi nhân 3x26 với 3x27.

Để nhân hai ma trận, chúng tôi sử dụng câu lệnh # Program to multiply two matrices using list comprehension # 3x3 matrix X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # 3x4 matrix Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # result is 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r) 2.

Nếu [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 26 không bằng [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 27, hai ma trận không thể được nhân và chúng tôi chỉ cần thông báo cho người dùng.

Mặt khác, nếu hai ma trận có thể được nhân lên, chúng tôi sử dụng hàm 3x25 để lấy mỗi ô cho ma trận kết quả.

Khi [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 29, vòng lặp [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 3 bên trong ([114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 31) cho chúng ta kết quả cho [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 32, [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 33, [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 34 và [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 35

Điều này tương ứng với hàng đầu tiên trong ma trận kết quả.

Sử dụng 3x26 và 3x27 được hiển thị ở trên,

[114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 38Hence, [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 39
Hence, [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 39

Sau khi được thực hiện, chúng tôi in [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 40. Tiếp theo, chúng tôi sử dụng vòng [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 3 bên ngoài để di chuyển In [1]: import numpy as np In [3]: np.dot([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]]) Out[3]: array([1, 1]) 4 sang hàng tiếp theo để nhận giá trị là [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 43.

Điều này cho chúng ta [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 44
[114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 44

Sau đó chúng tôi in giá trị này. Khi đã hoàn thành, vòng lặp [114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 3 bên ngoài đã hoàn tất và chương trình kết thúc.

Nếu bạn chạy chương trình này cho 2 × 3 3x26 và 3 × 4 3x27 ở trên, bạn sẽ nhận được

[114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23] 48a đầu ra.
as the output.

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

Để nhân hai ma trận, sử dụng hàm dot () của numpy.Chỉ mất 2 đối số và trả về sản phẩm của hai ma trận.use the dot() function of NumPy. It takes only 2 arguments and returns the product of two matrices.

Làm thế nào để bạn nhân hai ma trận trong một con trăn khôn ngoan?

Kỹ thuật nhân () sẽ được sử dụng để thực hiện phép nhân phần tử của ma trận trong Python.Phương thức NP.Multiply (x1, x2) của Thư viện Numpy nhận được hai ma trận làm đầu vào và thực hiện phép nhân phần tử theo chúng trước khi trả lại ma trận kết quả.np. multiply(x1, x2) method receives two matrices as input and executes element-wise multiplication over them before returning the resultant matrix.

Làm thế nào để bạn giải quyết hai ma trận trong Python?

Để giải một phương trình ma trận tuyến tính, hãy sử dụng phương thức numpy.linalg.solve () trong Python.Phương pháp này tính toán giải pháp chính xác của người Viking, x, của các phương trình ma trận tuyến tính được xác định rõ ràng, tức là, phương trình ma trận tuyến tính AX = b.use the numpy. linalg. solve() method in Python. The method computes the “exact” solution, x, of the well-determined, i.e., full rank, linear matrix equation ax = b.

Làm thế nào để bạn nhân danh sách 2D trong Python?

Nhân hai danh sách trong python bằng phương thức numpy.multiply ().Phương thức nhân () của thư viện Numpy trong Python, lấy hai mảng/danh sách làm đầu vào và trả về một mảng/danh sách sau khi thực hiện phép nhân phần tử.Using the numpy. multiply() Method. The multiply() method of the NumPy library in Python, takes two arrays/lists as input and returns an array/list after performing element-wise multiplication.

Chủ đề