Nhân ma trận python

>>> a = np. cái([9, 5, 7, 4]) >>> c = np. cái([9, 5, 4, 3]) >>> np. dấu chấm (a, c). hình dạng (9, 5, 7, 9, 5, 3) >>> np. matmul(a, c). shape (9, 5, 7, 3) >>> # n là 7, k là 4, m là 3

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

Phép nhân hai ma trận X và Y chỉ được xác định nếu số cột trong X bằng số hàng Y

Nếu X là ma trận n x m và Y là ma trận m x l thì XY được xác định và có thứ nguyên là n x l (nhưng YX không được xác định). Dưới đây là một số cách để triển khai phép nhân ma trận trong Python

Mã nguồn. Phép nhân ma trận bằ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 vòng lặp

[114, 160, 60, 27]
[74, 97, 73, 14]
[119, 157, 112, 23]
0 lồng nhau để lặp qua từng hàng và từng 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 ta tăng bậc 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 dùng các gói phần mềm được tối ưu hóa như NumPy, nhanh hơn vài lần (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

# 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 đoạn mã trên, trước tiên chúng ta phải biết về hàm tích hợp sẵn

[114, 160, 60, 27]
[74, 97, 73, 14]
[119, 157, 112, 23]
1 và giải nén danh sách đối số bằng toán tử *

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

Home> python> allow kernel ma trận trong Python bằng cách sử dụng đầu vào của người dùng > Python > Matrix multiplication in Python using user input

Nội dung chính Hiển thị

  • Use the loops loops (cho / while)
  • Nhập Row0Value
  • Sử dụng chức năng tổng hợp danh sách và zip()
  • Làm thế nào để bạn thực hiện phép nhân ma trận trong Python?
  • Làm thế nào để bạn nhân hai yếu tố ma trận không ngoan trong Python?
  • Làm thế nào để bạn nhân hai ma trận trong một vòng lặp trong Python?
  • Làm thế nào để bạn nhập và nhân vào python?

Trong bài đăng này, chúng ta sẽ thấy cách lấy đầu vào ma trận từ người dùng và thực hiện cấp phép nhân ma trận trong Python

Please see the first ví dụ. Ví dụ.
Ví dụ.

Đầu vào. matrix1=[[1,2],  . ma trận1 = [[1,2],

                    [2,3]][2,3]]

& nbsp; matrix2=[[1,2],

                    [2,3]][2,3]]

Đầu ra. [5,8]. [5,8]

  [8,13]

Bây giờ, hãy để Lừa xem các cách khác nhau để thực hiện nhiệm vụ này

Use the loops loops (cho / while)

Trong phương pháp này, chúng tôi phải lặp qua từng hàng và từng cột mà tại sao chúng tôi sử dụng các vòng lặp xen kẽ ở đây. Dưới đây là mã Python được cung cấp.
Dưới đây là mã Python được cung cấp.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

in ("Nhập thứ tự của ma trận 1. ")("Nhập thứ tự của ma trận thứ nhất. ")

# Get the headers in a integer in a line

m,n=list(map(int,input(). split())),n = danh sách(map(int,input().tách()))

In ("Nhập các giá trị không ngoan hàng")("Nhập các giá trị khôn ngoan")

# Danh sách trống cho trận 1

mat1=[] = []

# Chèn hàng không ngoan vào ma trận

foriinrange(m). itrongphạm vi(m . ):

  . ")in("Nhập hàng",i,"value:")

& nbsp; # take 1d- integer array input in one line

    row=list(map(int,input(). split()))hàng = danh sách(map(int,input().tách()))

    mat1. nối thêm(hàng)mat1. chắp thêm(hàng)

in ("Nhập thứ tự của trận thứ 2. ")("Nhập thứ tự của ma trận thứ 2. ")

# Get the headers in a integer in a line

p,q=list(map(int,input(). split())),q = danh sách(map(int,input().tách()))

In ("Nhập các giá trị không ngoan hàng")("Nhập các giá trị khôn ngoan")

# Danh sách trống cho trận 1

mat2=[] = []

# Chèn hàng không ngoan vào ma trận

forjinrange(p). jtrongphạm vi(p . ):

  . ")in("Nhập hàng",j,"value:")

& nbsp; # take 1d- integer array input in one line

    row=list(map(int,input(). split()))hàng = danh sách(map(int,input().tách()))

    mat2. nối thêm(hàng)mat2. chắp thêm(hàng)

in ("Nhập thứ tự của ma trận thứ 2. ")

# Danh sách trống cho ma trận thứ 2("Ma trận 1. ",mat1)

& nbsp; . ")("Ma trận 2. ",mat2)

# Show ma trận thứ 1 và 2

resultant=[] = []

in ("Ma trận 1. ", MAT1)

foriinrange(m). itrong phạm vi(m . ):

    row=[]row = []<

    forjinrange(q). chojtrongphạm vi( . q):

        hàng. nối thêm(0)hàng. chắp thêm(0)

    kết quả. nối thêm (hàng)kết quả. chắp thêm(hàng)

in ("Ma trận 2. ", MAT2)("Phép nhân ma trận. ")

# Danh sách trống cho ma trận kết quả

# Create a ma trận 0 của đơn hàng m x Q

foriinrange(m). itrongphạm vi(m . ):

    forjinrange(q). cho jtrongphạm vi( . q):

        forkinrange(n). choktrongphạm vi( . n):

            kết quả[i][j]+=mat1[i][k]*mat2[k][j]kết quả[<i][j] +=mat1[i][k]*mat2[k][j]

in ("phép nhân ma trận. ")

# thực hiện cho phép nhân ma trậnhàng trongkết quả:

    in(hàng)in(hàng)<

đầu ra

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# Sử dụng Nested cho các vòng lặpthứ tự củathứ nhấtmatrix:

222

# Ma trận trong hàng Khôn ngoan   Row wise values

Forrow Inresultant. hàng0giá trị.

122

Nhập đơn đặt hàng của 1stmatrix. hàng 1giá trị.

233

Nhập các giá trị không ngoan hàngđơn hàng củathứ 2matrix:

222

# Ma trận trong hàng Khôn ngoan   Row wise values

Forrow Inresultant. hàng0giá trị.

12 2

Nhập đơn đặt hàng của 1stmatrix. hàng1giá trị.

233

Ma trận1. [[1,2],[2,3]]1. [[1,2],[2,3]]

Ma trận2. [[1,2],[2,3]] 2. [[1,2],[2,3]]

Nhập các giá trị không ngoan hàngPhép nhân.

[5,8]5,8]

[8,13]8, 13]

Nhập Row0Value

Nhập ROW1VALUE

Nhập thứ tự 2NDMatrix

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

ma trận nhân

Sử dụng phương thức DOT() của thư viện Numpy. numpy

in ("Nhập thứ tự của ma trận 1. ")("Nhập thứ tự của ma trận thứ nhất. ")

m,n=list(map(int,input(). split())),n = danh sách(map(int,input().tách()))

In ("Nhập các giá trị không ngoan hàng")("Nhập các giá trị khôn ngoan")

mat1=[] = []

# Chèn hàng không ngoan vào ma trận

foriinrange(m). itrongphạm vi(m . ):

  . ")in("Nhập hàng",i,"value:")

    row=list(map(int,input(). split()))hàng = danh sách(map(int,input().tách()))

    mat1. nối thêm(hàng)mat1. chắp thêm(hàng)

in ("Nhập thứ tự của trận thứ 2. ")("Nhập thứ tự của ma trận thứ 2. ")

p,q=list(map(int,input(). split())),q = danh sách(map(int,input().tách()))

In ("Nhập các giá trị không ngoan hàng")("Nhập các giá trị khôn ngoan")

mat2=[] = []

# Chèn hàng không ngoan vào ma trận

forjinrange(p). jtrongphạm vi(p . ):

  . ")in("Nhập hàng",j,"value:")

    row=list(map(int,input(). split()))hàng = danh sách(map(int,input().tách()))

    mat2. nối thêm(hàng)mat2. chắp thêm(hàng)

# Danh sách trống cho ma trận thứ 2("Ma trận 1. ",mat1)

& nbsp; . ")("Ma trận 2. ",mat2)

in ("Ma trận 2. ", MAT2)("Phép nhân ma trận. ")

# Danh sách trống cho ma trận kết quả

# Create a ma trận 0 của đơn hàng m x Q

resultant=numpy. dot(mat1,mat2) = numpy. chấm(mat1,mat2)

in ("phép nhân ma trận. ")

# thực hiện cho phép nhân ma trận hàng trongkết quả:

    in(hàng)in(hàng)<

đầu ra

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# Sử dụng Nested cho các vòng lặpthứ tự củathứ nhấtmatrix:

222

# Ma trận trong hàng Khôn ngoan   Row wise values

Forrow Inresultant. hàng0giá trị.

122

Nhập đơn đặt hàng của 1stmatrix. hàng 1giá trị.

233

Nhập các giá trị không ngoan hàngđơn hàng củathứ 2matrix:

222

# Ma trận trong hàng Khôn ngoan   Row wise values

Forrow Inresultant. hàng0giá trị.

12 2

Nhập đơn đặt hàng của 1stmatrix. hàng1giá trị.

233

Ma trận1. [[1,2],[2,3]]1. [[1,2],[2,3]]

Ma trận2. [[1,2],[2,3]] 2. [[1,2],[2,3]]

Nhập các giá trị không ngoan hàngPhép nhân.

[5,8]5,8]

[8,13]8, 13]

Sử dụng chức năng tổng hợp danh sách và zip()

Trong phương thức này, hàm zip() được sử dụng để kết hợp danh sách và đối tượng ZIP được tạo là đối tượng của danh sách bộ dữ liệu và tổng hợp danh sách được sử dụng để tạo danh sách và thực hiện hoạt động

Dưới đây là mã Python được đưa ra

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

in ("Nhập thứ tự của ma trận 1. ")("Nhập thứ tự của ma trận thứ nhất. ")

m,n=list(map(int,input(). split())),n = danh sách(map(int,input().tách()))

In ("Nhập các giá trị không ngoan hàng")("Nhập các giá trị khôn ngoan")

mat1=[] = []

# Chèn hàng không ngoan vào ma trận

foriinrange(m). itrongphạm vi(m . ):

  . ")in("Nhập hàng",i,"value:")

    row=list(map(int,input(). split()))hàng = danh sách(map(int,input().tách()))

    mat1. nối thêm(hàng)mat1. chắp thêm(hàng)

in ("Nhập thứ tự của trận thứ 2. ")("Nhập thứ tự của ma trận thứ 2. ")

p,q=list(map(int,input(). split())),q = danh sách(map(int,input().tách()))

In ("Nhập các giá trị không ngoan hàng")("Nhập các giá trị khôn ngoan")

mat2=[] = []

# Chèn hàng không ngoan vào ma trận

forjinrange(p). jtrongphạm vi(p . ):

  . ")in("Nhập hàng",j,"value:")

    row=list(map(int,input(). split()))hàng = danh sách(map(int,input().tách()))

    mat2. nối thêm(hàng)mat2. chắp thêm(hàng)

in ("Nhập thứ tự của trận thứ 2. ")("Ma trận 1. ",mat1)

& nbsp; . ")("Ma trận 2. ",mat2)

in ("Ma trận 1. ", MAT1)("Phép nhân ma trận. ")

trong ("Ma trận 2. ", MAT2)

in ("phép nhân ma trận. ")

# cho phép nhân ma trận hoàn thành bằng cách sử dụng = [[sum(ele1*ele2 forele1,ele2 inzip(row,col))

# Danh sách hiểuchocol inzip<(*mat2)]

resultant = [[sum (ele1*ele2 forele1, ele2 inzip (hàng, col))cho hàng inmat1]

 

& nbsp; . row inresultant:

    in(hàng)in(hàng)<

đầu ra

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# Hàng trong ma trận không ngoanthứ tự củathứ nhấtmatrix:

222

Forrow Inresultant. Hàng giá trị khôn ngoan

Nhập đơn đặt hàng của 1stmatrix. hàng0giá trị.

122

Nhập các giá trị không ngoan hànghàng 1giá trị:

344

Nhập Row0Value. thứ tự củathứ 2ma trận.

222

Forrow Inresultant. Hàng giá trị khôn ngoan

Nhập đơn đặt hàng của 1stmatrix. hàng0giá trị.

56 6

Nhập các giá trị không ngoan hànghàng1giá trị:

788

Ma trận1. [[1,2],[3,4]]1. [[1,2],[3,4]]

Ma trận2. [[5,6],[7,8]] 2. [[5,6],[7,8]]

Nhập Row0Value. Phép nhân.

[19,22]19,22]

[43,50]43, 50]

Nhập ROW1VALUE

Làm thế nào để bạn thực hiện phép nhân ma trận trong Python?

To kernel hai ma trận, sử dụng hàm dot() của numpy. Chỉ mất 2 đối số và trả lại sản phẩm của hai ma trận. sử dụng hàm dot() của NumPy . Chỉ cần 2 đối số và trả về tích của hai ma trận.

Làm thế nào để bạn nhân hai yếu tố ma trận không ngoan trong Python?

Kỹ thuật nhân () sẽ được sử dụng để thực hiện cấp phép phần tử của ma trận trong Python. Phương thức NP. Multiply (x1, x2) of The Library NumPy nhận được hai ma trận bắt đầu vào và thực hiện cho phép nhân phần tử theo họ trước khi trả lại kết quả ma trận. np. phương thức multiply(x1, x2) nhận hai ma trận làm đầu vào và thực hiện phép nhân từng phần tử trên chúng trước khi trả về ma trận kết quả .

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 trong vòng lặp để thực hiện logic, kết quả mang lại [i] [j] += matrixa [i] [k] * matrixb [k] [j]