You are on page 1of 51

WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

CHƯƠNG 8:
NUMPY

Trang 1
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

Mục tiêu bài học


 Numpy module.

Trang 2
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

Nội dung bài học


 Giới thiệu Numpy
 Mảng Numpy
 Đánh chỉ mục mảng
 Cắt lát (slicing)
 Một số phép toán
 Broadcasting
 Sắp xếp, tìm kiếm và đếm
 Sao chép
 Numpy và đại số tuyến tính
 Tổng kết
 Bài tập
Trang 3
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.1 Giới thiệu Numpy


Numpy là một package của python. Nó là viết tắt của 'Numerical
Python'. Thư viện bao gồm các đối tượng mảng nhiều chiều và một
tập hợp các quy trình để xử lý mảng.
Numeric, tổ tiên của NumPy, được phát triển bởi Jim Hugunin. Một
gói khác Numarray cũng được phát triển, có một số chức năng bổ
sung.
Năm 2005, Travis Oliphant tạo ra gói NumPy bằng cách kết hợp các
tính năng của Numarray vào Numeric. Có rất nhiều người đóng góp
cho dự án mã nguồn mở này.

Trang 4
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.1 Giới thiệu Numpy


Sử dụng NumPy, nhà phát triển có thể thực hiện các thao tác sau:
• Các phép toán toán học và logic trên mảng.
• Các biến đổi Fourier và các quy trình để thao tác hình dạng.
• Các phép toán liên quan đến đại số tuyến tính. NumPy tích hợp
sẵn các hàm cho đại số tuyến tính và tạo số ngẫu nhiên.

Trang 5
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.1 Giới thiệu Numpy


NumPy thường được sử dụng cùng với các gói như SciPy (Scientific
Python) và Mat-plotlib (thư viện vẽ đồ thị). Sự kết hợp này được sử
dụng rộng rãi để thay thế cho MatLab, một nền tảng phổ biến cho
tính toán kỹ thuật.
Python thay thế cho MatLab hiện được xem như một ngôn ngữ lập
trình hoàn thiện và hiện đại hơn.
Nó là mã nguồn mở, là một lợi thế của NumPy.

Trang 6
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.1 Giới thiệu Numpy


Cách cài đặt python phổ biến là sử dụng pip:

Sử dụng:

Trang 7
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.2 Mảng Numpy - Ndarray Object


Đối tượng quan trọng nhất được định nghĩa trong NumPy là một
kiểu mảng N chiều được gọi là ndarray. Nó mô tả bộ sưu tập các đối
tượng cùng loại. Các mục trong bộ sưu tập có thể được truy cập
bằng cách sử dụng chỉ mục dựa trên phần tử đầu tiên.
Mọi mục trong một ndarray có cùng kích thước khối trong bộ nhớ.
Mỗi phần tử trong ndarray là một đối tượng của đối tượng kiểu dữ
liệu (được gọi là dtype).
Bất kỳ mục nào được trích xuất từ đối tượng ndarray (bằng cách cắt)
được đại diện bởi một đối tượng Python thuộc một trong các
kiểu mảng vô hướng.

Trang 8
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.2 Mảng Numpy – Ví dụ các phép toán

Trang 9
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.3 Mảng Numpy – Khởi tạo

Trang 10
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.4 Đánh chỉ mục mảng


axis 0 = row, axis 1 = column

Trang 11
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.5 Cắt lát (slicing)

Trang 12
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.5 Cắt lát (slicing)


Cú pháp: #array[from:to:step], xem ví dụ

Trang 13
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.5 Cắt lát (slicing)


Chú ý khi dùng slice tạo ra mảng mới, nhưng địa chỉ vẫn cùng với
mảng ban đầu, ví dụ:

Trang 14
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.5 Cắt lát (slicing)


Slicing với mảng 2 chiều:

Trang 15
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.5 Cắt lát (slicing)


Slicing có thể truyền tuần tự:

Trang 16
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.6 Một số phép toán


 np.sqrt
 np.exp
 np.maximum
 np.modf
 others

Trang 17
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.6.1 sqrt, exp

Trang 18
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.6.2 maximum

Trang 19
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.6.3 modf

Trang 20
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.6.4 others

Trang 21
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.6.4 others

Trang 22
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.7 Broadcasting
Thuật ngữ broadcast đề cập đến khả năng của NumPy để xử lý các
mảng có hình dạng khác nhau trong các phép toán số học. Các phép
toán số học trên mảng thường được thực hiện trên các phần tử tương
ứng. Nếu hai mảng có hình dạng hoàn toàn giống nhau thì các thao
tác này được thực hiện trơn tru.

Trang 23
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.7 Broadcasting
Nếu kích thước của hai mảng không giống nhau, thì không thể thực
hiện các thao tác giữa phần tử với phần tử. Tuy nhiên, các thao tác
trên các mảng có hình dạng không giống nhau vẫn có thể thực hiện
được trong NumPy, vì khả năng broadcasting. Mảng nhỏ hơn được
phát tới kích thước của mảng lớn hơn để chúng có hình dạng tương
thích.

Trang 24
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.7 Broadcasting – Ví dụ broadcasting axis 0

Trang 25
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.7 Broadcasting – Ví dụ broadcasting axis 1

Trang 26
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.7 Broadcasting – Ví dụ broadcasting axis 0

Trang 27
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.8 Sắp xếp, tìm kiếm, đếm


 numpy.sort()
 numpy.argsort()
 numpy.lexsort()
 numpy.argmax(), numpy.argmin()
 numpy.nonzero() :
 numpy.where()
 numpy.extract()

Trang 28
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.8.1 numpy.sort()
Hàm sort() trả về một bản sao đã được sắp xếp của mảng đầu vào

Trang 29
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.8.2 numpy.argsort()
Hàm numpy.argsort() thực hiện sắp xếp và trả về mảng chỉ số dữ
liệu.

Trang 30
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.8.3 numpy. lexsort()


Hàm thực hiện sắp xếp bằng cách sử dụng một chuỗi khóa. Các
khóa có thể được xem như một cột trong bảng tính. Hàm trả về một
mảng chỉ số.

Trang 31
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.8.4 numpy.argmax()
Hàm này trả về chỉ số của phần tử cực đại.

Trang 32
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.8.5 numpy.argmin()
Hàm này trả về chỉ số của phần tử cực tiểu.

Trang 33
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.8.6 numpy. nonzero()


Hàm trả về chỉ số của các phần tử khác 0 trong mảng đầu vào.

Trang 34
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.8.7 numpy.where()
Hàm where() trả về chỉ số trong mảng đầu vào thỏa mãn điều kiện
đã cho

Trang 35
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.8.8 numpy.extract()
Hàm extract() trả về các phần tử thỏa mãn bất kỳ điều kiện nào.

Trang 36
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.9 Sao chép


Trong khi thực thi các hàm, một số hàm trả về bản sao của mảng đầu
vào, trong khi một số trả về dạng xem. Khi nội dung được lưu trữ
vật lý ở một vị trí khác, nó được gọi là Sao chép. Mặt khác, nếu một
dạng xem khác của cùng một nội dung bộ nhớ được cung cấp, ta gọi
nó là Dạng xem.

Trang 37
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.9.1. No copy
Các phép gán đơn giản không tạo ra bản sao của đối tượng mảng.

Trang 38
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.9.2. View hoặc Shallow Copy


NumPy có phương thức ndarray.view() là một đối tượng mảng mới
xem xét cùng một dữ liệu của mảng ban đầu. Không giống như
trường hợp trước đó, thay đổi kích thước của mảng mới không thay
đổi kích thước của mảng ban đầu.

Trang 39
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.9.2. View hoặc Shallow Copy – Ví dụ

Trang 40
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.9.3. Deep Copy


Hàm ndarray.copy() tạo một bản sao sâu. Nó là một bản sao hoàn
chỉnh của mảng và dữ liệu của nó, và không chia sẻ với mảng ban
đầu.

Trang 41
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.10 Đại số tuyến tính


1. numpy.dot()
2. numpy.vdot()
3. numpy.inner()
4. numpy.matmul()
5. numpy.linalg.det() ( Định thức )
6. numpy.linalg.inv()
7. numpy.linalg.solve()

Trang 42
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.10.1 Đại số tuyến tính - numpy.dot()


Hàm này trả về tích số chấm của hai mảng.

Trang 43
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.10.2 Đại số tuyến tính - numpy.vdot()


Hàm này trả về tích số chấm của hai vectơ.

Trang 44
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.10.3 Đại số tuyến tính - numpy.inner()


Hàm này trả về tích bên trong của vectơ cho mảng 1-D. Đối với các
kích thước cao hơn, nó trả về tích tổng trên các trục.

Trang 45
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.10.4 Đại số tuyến tính - numpy.matmul()


Trả về tích ma trận của hai mảng (giống numpy.dot).

Trang 46
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.10.5 Đại số tuyến tính – Định thức


Định thức được tính toán từ các phần tử đường chéo của một ma
trận vuông.
với ma trận [[a, b], [c, d]], định thức được tính là ‘ad-bc’. Ma trận
vuông lớn hơn được coi là hợp của ma trận 2x2.
Hàm numpy.linalg.det() tính toán định thức của ma trận đầu vào.

Trang 47
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.10.6 Đại số tuyến tính – numpy.linalg.inv()


numpy.linalg.inv() để tính nghịch đảo của ma trận. Nghịch đảo của
ma trận nhân với ma trận ban đầu sẽ được kết quả là ma trận đơn vị.

Trang 48
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.10.7 Đại số tuyến tính – numpy.linalg.solve()


Tìm nghiệm của phương trình tuyến tính ở dạng ma trận.

Trang 49
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

8.11 Tổng kết


Giải đáp thắc mắc
Giao bài tập về nhà

Trang 50
WORKING HARD & SMART TODAY FOR A BETTER TOMORROW Lập trình python cho phân tích dữ liệu

Hey!
Coding
is easy!

END

Trang 51

You might also like