Header ads

Header ads
» » Ma trận trong Python

Trong bài viết này, chúng ta sẽ tìm hiểu về các ma trận trong Python bằng cách sử dụng nested list (danh sách lồng ghép) và thư viện NumPy.

Ma trận là 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ụ:

Đây là ma trận 3x4 vì nó có 3 hàng và 4 cột.

Ma trận trong Python

Python không có kiểu xây dựng riêng dành cho ma trận, vậy nên chúng ta có thể biểu diễn ma trận dưới dạng một nested list.

Vậy nested list là gì?

Nested list là dạng danh sách lồng ghép, nghĩa là một list xuất hiện với vai trò là phần tử của một list khác. Ví dụ:

A = [ 1, 4, 5, [8, 9]]

Ở ví dụ này, nếu in ra A[3] ta được output là [8, 9].

Nested list thường được dùng để trình bày ma trận trong Python. Biểu diễn như sau:

A = [[1, 4, 5], 
    [-5, 8, 9]]

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

Để kết xuất phần tử từ ma trận, ta có thể chọn cả một hàng của ma trận theo cách thông thường hoặc dùng dạng chỉ số kép, chỉ số thứ nhất để chọn hàng, còn chỉ số thứ hai chọn cột. Cùng xem ví dụ sau:

A = [[1, 4, 5, 12], 
[-5, 8, 9, 0],
[-6, 7, 11, 19]]

print("A =", A)
print("A[1] =", A[1]) # Hàng thứ 2 của ma trân
print("A[1][2] =", A[1][2]) # Phần tử thứ 3 của hàng thứ 2
print("A[0][-1] =", A[0][-1]) # Phần tử cuối cùng của hàng 1

column = [];
for row in A:
column.append(row[2])

print("Cột thứ 3 =", column)

Chạy chương trình, output được trả về 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ùng nested list để biểu diễn ma trận là một cách thông dụng và thường dùng trong các tính toán đơn giản. Tuy nhiên có một cách hay hơn đó là sử dụng thư viện NumPy.

Sử dụng NumPy cho ma trận

NumPy là thư viện được viết bằng Python nhằm phục vụ cho việc tính toán khoa học, hỗ trợ nhiều kiểu dữ liệu đa chiều giúp cho việc tính toán, lập trình, làm việc với các hệ cơ sở dữ liệu cực kì thuận tiện.

Để tạo một ma trận ta có thể sử dụng ndarray (viết gọn là array) của NumPy

Array này là một đối tượng mảng đa chiều thuần nhất tức là mọi phần tử đều cùng 1 kiểu.

Hãy thử với một ví dụ:

import numpy as np
a = np.array([1, 2, 3])
print(a)

# Output: [1, 2, 3]


print(type(a))

# Output: <class 'numpy.ndarray'>

Cách tạo array của NumPy

Mảng số nguyên, số thực, số phức (integer, float, complex)

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]]) # mảng số thực
print(A)

A = np.array([[1, 2, 3], [3, 4, 5]], dtype = complex) # mảng số phức
print(A)

Chương trình trả về kết quả:

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

Mảng giá trị mặc định (0 và 1)

import numpy as np

# Mọi phần tử đều là 0
A = np.zeros( (2, 3) )
print(A)

# Output:
[[0. 0. 0.]
[0. 0. 0.]]

# Mọi phần tử đều là 1
B = np.ones( (1, 5) )
print(B)

# Output: [[1 1 1 1 1]]

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

Các phép toán với ma trận

Các phép toán trên ma trận là những tính toán cơ bản khi làm việc. Trong phần này, Quantrimang chỉ đề cập tới 3 phép toán cơ bản thường được sử dụng là cộng ma trận, nhân ma trận và chuyển vị ma trận.

Các phép toán ở đây sử dụng cả nested list và thư viện NumPy.

Cộng 2 ma trận

Để cộng hai ma trận, ta cộng từng phần tử tương ứng của 2 ma trận cùng cấp với nhau.

import numpy as np

A = np.array([[2, 4], [5, -6]])
B = np.array([[9, -3], [3, 6]])
C = A + B
print(C)

'''
Output:
[[11 1]
[ 8 0]]
'''

Nhân 2 ma trận

Nhân 2 ma trận là phép lấy tổng của tích từng phần tử của hàng tương ứng với cột tương ứng.

Chú ý: Nhân ma trận chỉ xảy ra khi số cột của ma trận A bằng với số hàng của ma trận B. Ví dụ cho 2 ma trận [A]mp và [B]pn, tích chúng theo thứ tự đó sẽ được kết quả là ma trận [AB]mn.

Biểu diễn với NumPy như sau:

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ị ma trận

Chuyển vị là phép biến cột thành hàng và hàng thành cột 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]]

Xuất các phần tử, cột, dòng của ma trận

Xuất các phần tử của ma trận

Tương tự với cách kết xuất bằng list, chúng ta có thể sử dụng bằng NumPy. Trước tiên, hãy thử với mảng một chiều:

import numpy as np
A = np.array([12, 14, 16, 18, 20])

print("A[0] =", A[0]) # phần tử đầu tiên
print("A[2] =", A[2]) # phần tử thứ 3
print("A[-1] =", A[-1]) # phần tử cuối cùng

Output được trả về ở đây là:

A[0] = 12
A[2] = 16
A[-1] = 20

Ví dụ về mảng hai chiều:

import numpy as np

A = np.array([[1, 4, 5, 12],
[-5, 8, 9, 0],
[-6, 7, 11, 19]])

# Phần tử đầu tiên của hàng đầu tiên
print("A[0][0] =", A[0][0])

# Phần tử thứ 3 của hàng thứ 2
print("A[1][2] =", A[1][2])

# Phần tử cuối cùng của hàng cuối cùng
print("A[-1][-1] =", A[-1][-1])

Chạy chương trình, kết quả được trả về là:

A[0][0] = 1
A[1][2] = 9
A[-1][-1] = 19

Xuất các dòng của ma trận

import numpy as np

A = np.array([[1, 4, 5, 12],
[-2, 8, 6, 14],
[-1, 5, 10, 22]])

print("A[0] =", A[0]) # Dòng đầu tiên
print("A[2] =", A[2]) # Dòng thứ 3
print("A[-1] =", A[-1]) # Dòng cuối cùng (dòng thứ 3)

Output được trả về ở đây là:

A[0] = [1, 4, 5, 12]
A[2] = [-1, 5, 10, 22]
A[-1] = [-1, 5, 10, 22]

Xuất các cột của ma trận

import numpy as np

A = np.array([[1, 4, 5, 12],
[-2, 8, 6, 14],
[-1, 5, 10, 22]])

print("A[:,0] =",A[:,0]) # Cột đầu tiên
print("A[:,3] =", A[:,3]) # Cột thứ 4
print("A[:,-1] =", A[:,-1]) # Cột cuối cùng (Cột thứ 4)

Output được trả về:

A[:,0] = [ 1 -2 -1]
A[:,3] = [12 14 22]
A[:,-1] = [12 14 22]

Lát cắt của Ma trận

Lát cắt của mảng một chiều trong NumPy được biểu diễn tương tự như list.

import numpy as np
A = np.array([1, 3, 5, 7, 9, 7, 5])

# Phần tử thứ tự từ 3 đến 5
print(A[2:5]) # Output: [5, 7, 9]

# Phần tử thứ tự từ 1 đến 4
print(A[:-5]) # Output: [1, 3]

# Phần tử thứ 6 trở đi
print(A[5:]) # Output:[7, 5]

# Lấy cả mảng
print(A[:]) # Output:[1, 3, 5, 7, 9, 7, 5]

# đổi chiều mảng
print(A[::-1]) # Output:[5, 7, 9, 7, 5, 3, 1]

Vậy để cắt ma trận, ta có ví dụ sau:

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]) # 2 hàng, 4 cột

''' Output:
[[ 1 4 5 12]
[-5 8 9 0]]
'''

print(A[:1,]) # hàng đầu tiên, tất cả cột

''' Output:
[[ 1 4 5 12 14]]
'''

print(A[:,2]) # tất cả các hàng, cột 2

''' Output:
[ 5 9 11]
'''

print(A[:, 2:5]) # tất cả các hàng, cột 3 đến 5

'''Output:
[[ 5 12 14]
[ 9 0 17]
[11 19 21]]
'''

Vậy như bạn thấy, sử dụng thư viện NumPy thay vì nested list làm cho các phép toán với ma trận dễ dàng hơn rất nhiều. Quantrimang khuyên bạn nên tìm hiểu và học cách sử dụng thư viện NumPy thật kĩ đặc biệt khi sử dụng Python để áp dụng cho việc tính toán khoa học hay phân tích dữ liệu.

Chúc các bạn thành công!

Xem thêm:


    Khóa đào tạo Power BI phân tích báo cáo để bán hàng thành công

    Khóa học Lập trình Visual Foxpro 9 - Dành cho nhà quản lý và kế toán

    Khóa học hướng dẫn về Moodle chuyên nghiệp và hay
    Xây dựng hệ thống đào tạo trực tuyến chuyên nghiệp tốt nhất hiện nay.


    Khóa học AutoIt dành cho dân IT và Marketing chuyên nghiệp

    Khóa học hướng dẫn sử dụng Powerpoint từ đơn giản đến phức tạp HIỆU QUẢ
    Khóa học Thiết kế, quản lý dữ liệu dự án chuyên nghiệp cho doanh nghiệp bằng Bizagi
     Khoa hoc hay
    Khóa học Phân tích dữ liệu sử dụng Power Query trong Excel
    Khóa học Phân tích dữ liệu sử dụng TableAU - Chìa khóa thành công!
    Nhấn vào đây để bắt đầu khóa học

    Khóa học "Thiết kế bài giảng điện tử", Video, hoạt hình 
    kiếm tiền Youtube bằng phần mềm Camtasia Studio
    Khóa học HƯỚNG DẪN THIẾT KẾ VIDEO CLIP CHO DÂN MARKETING CHUYÊN NGHIỆP
     Xây dựng website​​​​
    HƯỚNG DẪN THIẾT KẾ QUẢNG CÁO VÀ ĐỒ HỌA CHUYÊN NGHIỆP VỚI CANVA
    Hãy tham gia khóa học để trở thành người chuyên nghiệp. Tuyệt HAY!😲👍
     Khoa hoc hay
    MICROSOFT ACCESS



    GOOGLE SPREADSHEETS phê không tưởng
     Khoa hoc hay
    Khóa hoc lập trình bằng Python tại đây

    Hacker mũ trắng




    Hãy tham gia khóa học để biết mọi thứ

    Để tham gia tất cả các bài học, Bạn nhấn vào đây 
    Khóa học sử dụng Adobe Presenter-Tạo bài giảng điện tử
     Khoa hoc hay

    Khóa học sử dụng Edmodo để dạy và học hiện đại để thành công


    Cập nhật công nghệ từ Youtube tại link: http://congnghe.hocviendaotao.com
    Tham gia nhóm Facebook
    Để tham gia khóa học công nghệ truy cập link: http://thuvien.hocviendaotao.com
    Mọi hỗ trợ về công nghệ email: dinhanhtuan68@gmail.com

    About Học viện đào tạo trực tuyến

    Xinh chào bạn. Tôi là Đinh Anh Tuấn - Thạc sĩ CNTT. Email: dinhanhtuan68@gmail.com .
    - Nhận đào tạo trực tuyến lập trình dành cho nhà quản lý, kế toán bằng Foxpro, Access 2010, Excel, Macro Excel, Macro Word, chứng chỉ MOS cao cấp, IC3, tiếng anh, phần mềm, phần cứng .
    - Nhận thiết kế phần mềm quản lý, Web, Web ứng dụng, quản lý, bán hàng,... Nhận Thiết kế bài giảng điện tử, số hóa tài liệu...
    HỌC VIỆN ĐÀO TẠO TRỰC TUYẾN:TẬN TÂM-CHẤT LƯỢNG.
    «
    Next
    Bài đăng Mới hơn
    »
    Previous
    Bài đăng Cũ hơn