Professional Documents
Culture Documents
2 - Numpy
2 - Numpy
MACHINE LEARNING
2
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
NUMPY
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Nội dung
• Mảng đa chiều
• Hàm tiện ích trong NumPy
• Array-Oriented Programming with Arrays
• Xuất nhập File
• Đại số tuyến tính
• Số ngẫu nhiên
4
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Numpy là gì?
• NumPy (Numerical Python), là một thư viện tính toán quan
trọng nhất trong Python.
• NumPy thiết kế đối tương mảng (array objects) cho việc
trao đổi dữ liệu giữa các hàm một cách thuận tiện. Vì vậy
NumPy được sử dụng hầu hết tại các gói (packages) tính
toán trong lĩnh vực khoa học dữ liệu.
• NumPy cung cấp C API nên giúp cho Python trở thành
ngôn ngữ năng động và có khả năng kế thừa được các
thư viện có sẵn như C/C++ hay Fortran
5
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
6
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
7
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
8
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Vì sao?
9
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
L = list(range(10))
A = array.array('i', L)
print(A)
10
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
ndarray
• NumPy cho phép thực hiện
các phép toán trên mảng
tương tự như các phép toán
trên số thực
11
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
12
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
13
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
14
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
16
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Toán tử số học
• NumPy cung cấp các toán tử để thực hiện các phép tính trên mảng mà không
cần sử dụng các lệnh vòng lặp. Người dùng NumPy gọi là vector hóa
(vectorization).
import numpy as np
arr = np.array([[1., 2., 3.], [4., 5., 6.]])
print(arr)
print(arr*arr)
print(arr-arr)
print(1/arr)
print(arr**0.5)
print(arr*arr)
Broadcasting
18
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
import numpy as np
arr = np.arange(10)
print(arr)
print(arr[5])
print(arr[5:-1])
[0 1 2 3 4 5 6 7 8 9]
5
[5 6 7 8]
19
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
20
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
21
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
22
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
c) data[data < 0] = 0
print(data)
23
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Fancy Indexing
• NumPy cho phép tạo 1 mảng con theo chỉ mục cho trước
import numpy as np
names = np.array([ 'Tuan', 'Phuong', 'Khoi', 'Hieu’,
'Duy', 'Thang', 'Duc'])
print(names)
print(names[[0,5,4]])
24
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Fancy Indexing
• Hãy cho biết kết quả đoạn lệnh sau:
25
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Ma trận chuyển vị
import numpy as np
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
[[ 0 5 10]
[ 1 6 11]
[ 2 7 12]
[ 3 8 13]
[ 4 9 14]] 26
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Ma trận chuyển vị
• Đối với mảng nhiều chiều, ta cũng có thể chuyển vị mảng như sau:
27
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
28
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
• Hàm tính
toán 1 ngôi
29
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Ví dụ:
import numpy as np
arr = np.arange(10)
print(arr)
print(np.sqrt(arr))
# [0 1 2 3 4 5 6 7 8 9]
# [0. 1. 1.41421356 1.73205081 2.
2.23606798 2.44948974 2.64575131 2.82842712 3.
]
30
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
31
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Ví dụ:
import numpy as np
arr1 = np.arange(10) / 2
arr2 = np.arange(10) / 3 + 1
print(arr1)
print(arr2)
print(np.greater(arr1, arr2))
32
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
import numpy as np
import matplotlib.pyplot as plt
z = np.sqrt(xs ** 2 + ys ** 2)
plt.imshow(z, cmap = plt.cm.gray)
plt.colorbar()
plt.title("Image plot of $\sqrt{x^2 + y^2}$ for a grid of values")
plt.show()
33
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
34
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
arr = np.random.randn(2, 3)
[[-0.21050017 -0.47941506 -0.29274799]
print(arr) [-0.60584632 -1.53666652 0.43055528]]
print(arr.mean()) -0.4491034630493929
35
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Mảng Boolean
• Có thể sử dụng sum như 1 cách để đếm các giá trị True trong 1 mảng boolean
arr = np.random.randn(100)
print((arr > 0).sum())
• Có 2 hàm tiện dụng là any() và all() tương ứng với phép or và add
print(bools.any()) # True
print(bools.all()) # False
36
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Sắp xếp
• Sắp xếp mảng 1 chiều
arr = np.random.randn(6)
print(arr)
arr.sort()
print(arr)
37
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Sắp xếp
• Sắp xếp mảng nhiều chiều
arr = np.random.randn(2,3)
print(arr)
arr.sort(1)
print(arr)
38
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
39
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
40
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
arr1 = np.load('some_array.npy')
print(arr1)
41
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
arrz = np.load('array_archive.npz')
print(arrz['b'])
42
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
43
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
44
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Ví dụ:
import numpy as np
from numpy.linalg import inv, qr
X = np.random.randn(2, 2)
mat = X.T.dot(X)
print(mat)
print(inv(mat))
print(mat.dot(inv(mat)))
[[ 0.26721072 -0.15919219]
[-0.15919219 2.46121607]]
[[3.89235119 0.25175843]
[0.25175843 0.42258703]]
[[ 1.00000000e+00 -2.58814336e-18]
45
[-1.09420189e-16 1.00000000e+00]]
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Số ngẫu nhiên
• Các hàm liên quan
46
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Ví dụ 1: Random Walks
• Sinh ngẫu nhiên bước đi bắt đầu tại 0, bước tới
trước 1 hoặc bước lui -1
import random
import matplotlib.pyplot as plt
position = 0
walk = [position]
steps = 1000
for i in range(steps):
step = 1 if random.randint(0, 1) else -1
position += step
walk.append(position)
plt.plot(walk[:100])
plt.show() 47
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
nsteps = 1000
draws = np.random.randint(0, 2, size=nsteps)
steps = np.where(draws > 0, 1, -1)
walk = steps.cumsum()
print(walk.min())
print(walk.max())
48
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
nwalks = 5000
nsteps = 1000
walks = steps.cumsum(1)
49
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
np.random.seed(15)
arr = np.random.randint(low=0, high=100, size=10)
print(arr.mean()) # 42.2
print(arr.std()) # 30.261526729495987
50
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Ví dụ 3: Image process
import numpy as np
from PIL import Image
im = np.array(Image.open('cat.jpg').convert('L'))
print(type(im))
gr_im = Image.fromarray(im).save('gr_cat.png')
Ref: GitHub - Image processing examples with Numpy, Scipy, and Scikit-image 51
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên
Tổng kết
• Mảng đa chiều
• Hàm tiện ích trong NumPy
• Array-Oriented Programming with Arrays
• Xuất nhập File
• Đại số tuyến tính
• Số ngẫu nhiên
52
Khoa CÔNG NGHỆ THÔNG TIN
ThS. Nguyễn Thị Lệ Quyên