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
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áchList