Hướng dẫn multiply matrices python without numpy - nhân ma trận python mà không có numpy

Cách tiếp cận Numpythonic: (sử dụng

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]
0 để có được sản phẩm chấm 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

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]
1 thứ hai của bạn là
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]
2 và bạn cố gắng lập chỉ mụ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]
3 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
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 để lấy các cột của danh sách sau đó sử dụng
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 và
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]
6 trong danh sách hiểu biết:

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]

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ụ

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]
7 sẽ đại diện cho một ma trận
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]
8.

Hàng đầu tiên có thể được chọn là

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. Và, phần tử trong hàng đầu tiên, cột đầu tiên có thể được chọn là
# 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)
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

# 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)
1 và y là ma trận
# 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)
2 thì XY được xác định và có kích thước
# 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)
3 (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

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

# 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)
5 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.

Phép nhân ma trận trong Python

Hướng dẫn multiply matrices python without numpy - nhân ma trận python mà không có numpy

Phép nhân ma trận mà không cần sử dụng bất kỳ chức năng tích hợp nào

rows=2
cols=3
M1=[[1,2,3],
    [4,5,6]]
M2=[[7,8],
    [9,10],
    [11,12]]
my_list=[]

for  l_row in range(0,rows):
    temp_list=[]
    for k in range(0,rows):
        sum1=0
        for l_col in range(0,cols):
            sum1=sum1+(M1[l_row][l_col]*M2[l_col][k])
        
        temp_list.append(sum1)
    my_list.append(temp_list)    
for row in my_list:
    print(row)
Đầu ra ở đây
[58, 64]
[139, 154]
Chúng tôi có thể tạo ma trận bằng cách sử dụng các số ngẫu nhiên ____ lượng đầu ra
[[3, 3, 8, 3], [0, 3, 8, 0], [3, 5, 4, 7], [7, 5, 6, 9]]
M1 shown above 
[[4, 5, 1, 2], [5, 6, 3, 6], [9, 7, 3, 2], [8, 4, 1, 6]]
M2 is shown above 
[123, 101, 39, 58]
[87, 74, 33, 34]
[129, 101, 37, 86]
[179, 143, 49, 110]
bằng thư viện Numpy, chúng tôi có thể kiểm tra mã của mình. Chỉ cần thêm các dòng này ở cuối mã trên.
print("Using Numpy and checking result")    
import numpy as np
res = np.dot(M1,M2) 
print(res)
Danh sách

List



Hướng dẫn multiply matrices python without numpy - nhân ma trận python mà không có numpy

plus2net.com


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 một ma trận 2x2 trong Python?

Bước 1: Nhập hai ma trận.Bước 2: lồng nhau cho các vòng lặp để lặp qua mỗi hàng và mỗi cột.Bước 3: Lấy một ma trận kết quả ban đầu chứa tất cả 0. Sau đó, chúng tôi nhân từng phần tử hàng của ma trận thứ nhất với mỗi phần tử của ma trận thứ hai, sau đó thêm tất cả giá trị nhân.

Matmul có nhanh hơn DOT không?

Matmul và cả hai vượt trội so với np.dot.Cũng lưu ý, như được giải thích trong tài liệu, NP. dot . Also note, as explained in the docs, np.

Làm thế nào để bạn nhân hai ma trận trong một vòng lặp trong Python?

Sử dụng một vòng lặp lồng trong vòng lặp để thực hiện logic, kết quả mang lại [i] [j] += matrixa [i] [k] * matrixb [k] [j]..