Ma trận Python và Giới thiệu về NumPy

Trong bài viết này, chúng ta sẽ tìm hiểu về ma trận Python sử dụng danh sách lồng nhau và gói NumPy.

Ma trận là một cấu trúc dữ liệu hai chiều trong đó các số được sắp xếp thành các hàng và cột. Ví dụ:

Ma trận này là ma trận 3x4 (phát âm là "ba x bốn") vì nó có 3 hàng và 4 cột.

Ma trận Python

Python không có kiểu cài sẵn cho ma trận. Tuy nhiên, chúng ta có thể coi danh sách một danh sách như một ma trận. Ví dụ:

 A = ((1, 4, 5), (-5, 8, 9)) 

Chúng ta có thể coi danh sách danh sách này như một ma trận có 2 hàng và 3 cột.

Hãy chắc chắn tìm hiểu về danh sách Python trước khi tiếp tục bài viết này.

Hãy xem cách làm việc với một danh sách lồng nhau.

 A = ((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19)) print("A =", A) print("A(1) =", A(1)) # 2nd row print("A(1)(2) =", A(1)(2)) # 3rd element of 2nd row print("A(0)(-1) =", A(0)(-1)) # Last element of 1st Row column = (); # empty list for row in A: column.append(row(2)) print("3rd column =", column) 

Khi chúng tôi chạy chương trình, kết quả đầu ra sẽ là:

 A = ((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19)) A (1) = (-5, 8, 9, 0) A (1) (2) = 9 A (0) (- 1) = 12 cột thứ 3 = (5, 9, 11) 

Dưới đây là một số ví dụ khác liên quan đến ma trận Python sử dụng danh sách lồng nhau.

  • Thêm hai ma trận
  • Chuyển đổi một ma trận
  • Nhân hai ma trận

Sử dụng danh sách lồng nhau dưới dạng ma trận hoạt động cho các tác vụ tính toán đơn giản, tuy nhiên, có một cách tốt hơn để làm việc với ma trận trong Python bằng cách sử dụng gói NumPy.

Mảng NumPy

NumPy là một gói dành cho máy tính khoa học có hỗ trợ cho một đối tượng mảng N-chiều mạnh mẽ. Trước khi có thể sử dụng NumPy, bạn cần cài đặt nó. Để biết thêm thông tin,

  • Truy cập: Làm thế nào để cài đặt NumPy?
  • Nếu bạn đang sử dụng Windows, hãy tải xuống và cài đặt bản phân phối anaconda của Python. Nó đi kèm với NumPy và một số gói khác liên quan đến khoa học dữ liệu và học máy.

Sau khi NumPy được cài đặt, bạn có thể nhập và sử dụng nó.

NumPy cung cấp mảng số đa chiều (thực chất là một đối tượng). Hãy lấy một ví dụ:

 import numpy as np a = np.array((1, 2, 3)) print(a) # Output: (1, 2, 3) print(type(a)) # Output: 

Như bạn có thể thấy, lớp mảng của NumPy được gọi ndarray.

Làm thế nào để tạo một mảng NumPy?

Có một số cách để tạo mảng NumPy.

1. Mảng số nguyên, số thực và số phức

 import numpy as np A = np.array(((1, 2, 3), (3, 4, 5))) print(A) A = np.array(((1.1, 2, 3), (3, 4, 5))) # Array of floats print(A) A = np.array(((1, 2, 3), (3, 4, 5)), dtype = complex) # Array of complex numbers print(A) 

Khi bạn chạy chương trình, đầu ra sẽ là:

 ((1 2 3) (3 4 5)) ((1.1 2. 3.) (3. 4. 5.)) ((1. + 0.j 2. + 0.j 3. + 0.j) (3. + 0.j 4. + 0.j 5. + 0.j)) 

2. Mảng số không và dãy số

 import numpy as np zeors_array = np.zeros( (2, 3) ) print(zeors_array) ''' Output: ((0. 0. 0.) (0. 0. 0.)) ''' ones_array = np.ones( (1, 5), dtype=np.int32 ) // specifying dtype print(ones_array) # Output: ((1 1 1 1 1)) 

Ở đây, chúng tôi đã chỉ định dtypethành 32 bit (4 byte). Do đó, mảng này có thể nhận các giá trị từ đến .-2-312-31-1

3. Sử dụng arange () và shape ()

 import numpy as np A = np.arange(4) print('A =', A) B = np.arange(12).reshape(2, 6) print('B =', B) ''' Output: A = (0 1 2 3) B = (( 0 1 2 3 4 5) ( 6 7 8 9 10 11)) ''' 

Tìm hiểu thêm về các cách tạo mảng NumPy khác.

Hoạt động ma trận

Trên đây, chúng tôi đã cung cấp cho bạn 3 ví dụ: phép cộng hai ma trận, phép nhân hai ma trận và chuyển vị ma trận. Chúng tôi đã sử dụng danh sách lồng nhau trước đây để viết các chương trình đó. Hãy xem cách chúng ta có thể thực hiện tác vụ tương tự bằng cách sử dụng mảng NumPy.

Phép cộng hai ma trận

Chúng tôi sử dụng +toán tử để thêm các phần tử tương ứng của hai ma trận NumPy.

 import numpy as np A = np.array(((2, 4), (5, -6))) B = np.array(((9, -3), (3, 6))) C = A + B # element wise addition print(C) ''' Output: ((11 1) ( 8 0)) '''

Phép nhân hai ma trận

Để nhân hai ma trận, chúng tôi sử dụng dot()phương pháp. Tìm hiểu thêm về cách numpy.dot hoạt động.

Lưu ý: * được sử dụng cho phép nhân mảng (phép nhân các phần tử tương ứng của hai mảng) không phải phép nhân ma trận.

 import numpy as np A = np.array(((3, 6, 7), (5, -3, 0))) B = np.array(((1, 1), (2, 1), (3, -3))) C = A.dot(B) print(C) ''' Output: (( 36 -12) ( -1 2)) ''' 

Chuyển vị của một ma trận

Chúng tôi sử dụng numpy.transpose để tính toán chuyển vị của một ma trận.

 import numpy as np A = np.array(((1, 1), (2, 1), (3, -3))) print(A.transpose()) ''' Output: (( 1 2 3) ( 1 1 -3)) ''' 

Như bạn có thể thấy, NumPy đã làm cho nhiệm vụ của chúng tôi dễ dàng hơn nhiều.

Truy cập các phần tử ma trận, hàng và cột

Access matrix elements

Similar like lists, we can access matrix elements using index. Let's start with a one-dimensional NumPy array.

 import numpy as np A = np.array((2, 4, 6, 8, 10)) print("A(0) =", A(0)) # First element print("A(2) =", A(2)) # Third element print("A(-1) =", A(-1)) # Last element 

When you run the program, the output will be:

 A(0) = 2 A(2) = 6 A(-1) = 10 

Now, let's see how we can access elements of a two-dimensional array (which is basically a matrix).

 import numpy as np A = np.array(((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19))) # First element of first row print("A(0)(0) =", A(0)(0)) # Third element of second row print("A(1)(2) =", A(1)(2)) # Last element of last row print("A(-1)(-1) =", A(-1)(-1)) 

When we run the program, the output will be:

 A(0)(0) = 1 A(1)(2) = 9 A(-1)(-1) = 19 

Access rows of a Matrix

 import numpy as np A = np.array(((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19))) print("A(0) =", A(0)) # First Row print("A(2) =", A(2)) # Third Row print("A(-1) =", A(-1)) # Last Row (3rd row in this case)

When we run the program, the output will be:

 A(0) = (1, 4, 5, 12) A(2) = (-6, 7, 11, 19) A(-1) = (-6, 7, 11, 19) 

Access columns of a Matrix

 import numpy as np A = np.array(((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19))) print("A(:,0) =",A(:,0)) # First Column print("A(:,3) =", A(:,3)) # Fourth Column print("A(:,-1) =", A(:,-1)) # Last Column (4th column in this case) 

When we run the program, the output will be:

 A(:,0) = ( 1 -5 -6) A(:,3) = (12 0 19) A(:,-1) = (12 0 19) 

If you don't know how this above code works, read slicing of a matrix section of this article.

Slicing of a Matrix

Slicing of a one-dimensional NumPy array is similar to a list. If you don't know how slicing for a list works, visit Understanding Python's slice notation.

Hãy lấy một ví dụ:

 import numpy as np letters = np.array((1, 3, 5, 7, 9, 7, 5)) # 3rd to 5th elements print(letters(2:5)) # Output: (5, 7, 9) # 1st to 4th elements print(letters(:-5)) # Output: (1, 3) # 6th to last elements print(letters(5:)) # Output:(7, 5) # 1st to last elements print(letters(:)) # Output:(1, 3, 5, 7, 9, 7, 5) # reversing a list print(letters(::-1)) # Output:(5, 7, 9, 7, 5, 3, 1) 

Bây giờ, hãy xem làm thế nào chúng ta có thể cắt một ma trận.

 import numpy as np A = np.array(((1, 4, 5, 12, 14), (-5, 8, 9, 0, 17), (-6, 7, 11, 19, 21))) print(A(:2, :4)) # two rows, four columns ''' Output: (( 1 4 5 12) (-5 8 9 0)) ''' print(A(:1,)) # first row, all columns ''' Output: (( 1 4 5 12 14)) ''' print(A(:,2)) # all rows, second column ''' Output: ( 5 9 11) ''' print(A(:, 2:5)) # all rows, third to the fifth column '''Output: (( 5 12 14) ( 9 0 17) (11 19 21)) ''' 

Như bạn có thể thấy, việc sử dụng NumPy (thay vì danh sách lồng nhau) làm cho việc làm việc với ma trận dễ dàng hơn rất nhiều và chúng tôi thậm chí còn chưa hoàn thiện những điều cơ bản. Chúng tôi khuyên bạn nên khám phá gói NumPy một cách chi tiết, đặc biệt nếu bạn đang cố gắng sử dụng Python cho khoa học / phân tích dữ liệu.

Tài nguyên NumPy bạn có thể thấy hữu ích:

  • Hướng dẫn NumPy
  • Tham khảo NumPy

thú vị bài viết...