Professional Documents
Culture Documents
VỚI NUMPY
2
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++ hãy Fortran
3
Tính năng quan trọng của NumPy
• Tăng tốc toán tử tính toán với vector như làm sạch dữ liệu, tập con hóa, lọc,
phép biến đổi,…
• Cung cấp các thuật toán phổ biến như sắp xếp, hợp nhất mảng, toán tử tập
hợp (set operations)
• Thống kê và tổng hợp dự liệu
• Hợp nhất các dữ liệu không đồng nhất
• Biểu diễn logic có điều kiện dưới dạng mảng thay vì sử dụng vòng lặp và
lệnh điều kiện
• Thao tác dữ liệu theo nhóm
4
Tốc độ xử lý của NumPy
• Gấp 10 đến 100 lần so với Python thuần túy.
• Ví dụ:
my_list = list(range(1000000))
%time for _ in range(10): my_list2 = [x * 2 for x in my_list]
CPU times: user 609 ms, sys: 183 ms, total: 792 ms
Wall time: 792 ms
import numpy as np
my_arr = np.arange(1000000)
%time for _ in range(10): my_arr2 = my_arr * 2
CPU times: user 21.9 ms, sys: 638 µs, total: 22.5 ms
Wall time: 23.7 ms
5
Mảng đa chiều
• N-dimensional array object
• Cách khởi tạo mảng trong NumPy
6
N-dimensional array object
• NumPy cho phép thực hiện các phép toán trên mảng tương tự các phép toán
trên số thực.
• Ví dụ:
import numpy as np
data = np.random.randn(2, 3)
data
array([[-1.42520151, 1.15562887, 0.99419858],
[ 0.33606262, -1.80350791, 1.0079208 ]])
data * 2
array([[-2.85040302, 2.31125774, 1.98839716],
[ 0.67212524, -3.60701581, 2.0158416 ]])
data + data
array([[-2.85040302, 2.31125774, 1.98839716],
[ 0.67212524, -3.60701581, 2.0158416 ]])
7
Cách khởi tạo mảng trong NumPy
• Sử dụng phương thức array để chuyển mảng trong Python qua mảng trong
NumPy
import numpy as np
data1 = [6, 7.5, 8, 0, 1] Question:
arr1 = np.array(data1)
arr1 arr1.ndim = ??
array([6. , 7.5, 8. , 0. , 1. ]) arr1.dtype = ??
8
Cách khởi tạo mảng trong NumPy
• Khởi tạo mảng đa chiều với các phần tử ‘0’
import numpy as np
np.empty((2, 3, 3))
9
Các cách khởi tạo mảng khác
Hàm Giải thích
array Chuyển dữ liệu kiểu list, tuple, array,… trong Python qua mảng trong NumPy
asarray Tương tự như array nhưng không copy nếu như đã là mảng.
ones Tạo mảng với tất cả phẩn từ đều bằng 1 khi có shape và dtype
Tạo mảng với tất cả phẩn từ đều bằng 1 với shape và dtype tương tự 1 mảng cho
ones_like trước
zeros, Tạo mảng với tất cả phẩn từ đều bằng 0 khi có shape và dtype
Tạo mảng với tất cả phẩn từ đều bằng 0 với shape và dtype tương tự 1 mảng cho
zeros_like trước
empty, Tạo 1 mảng tưởng tự như ones hay zeros nhưng với giá trị tùy thuộc vào vùng nhớ
Tạo 1 mảng tưởng tự như ones_like hay zeros_like nhưng với giá trị tùy thuộc vào
empty_like vùng nhớ
full, Tạo 1 mảng tưởng tự như ones hay zeros nhưng với giá trị tùy ý
full_like Tạo 1 mảng tưởng tự như ones_like hay zeros_like nhưng với giá trị tùy ý
eye, identity Tạo mảng 2 chiều cơ sở
Ví dụ:
arr1 = np.array([1, 2, 3], dtype=np.float64)
10
Kiểu dữ liệu trọng NumPy
11
Toán tử
• 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 đây 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)
arr2 = np.array([[0., 4., 1.], [7., 2., 12.]])
print(arr>arr2)
12
Thao tác trong mảng
• Để thao tác với các phần tử hay các tập con trong mảng của NumPy, ta thao
tác như List của Python.
• Ví du:
import numpy as np [0 1 2 3 4 5 6 7 8 9]
arr = np.arange(10) 5
print(arr) [5 6 7 8]
print(arr[5])
print(arr[5:-1])
13
Chỉ mục Boolean
• Ta có thể dùng mảng Boolean để tạo mảng con cho 1 mảng khác nếu như có
cùng chiều dài như nhau
14
Chỉ mục Boolean (tiếp theo)
• Hãy cho biết kết quả của các lệnh sau:
• A)
print(data[names == 'Bob', 2:])
• B)
print(data[names == 'Bob', 3])
• C)
data[data < 0] = 0
print(data)
15
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]])
16
Fancy Indexing
• Hãy cho biết kết quả của đoạn lệnh sau
17
Ma trận chuyển vị
• Ma trận chuyển vị
import numpy as np
arr = np.arange(15).reshape((3, 5))
print(arr)
print(arr.T)
[[ 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]]
18
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
import numpy as np
arr = np.arange(16).reshape((2, 2, 4))
print(arr)
print(arr.transpose((1, 0, 2)))
[[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]]
[[[ 0 1 2 3]
[ 8 9 10 11]]
[[ 4 5 6 7]
[12 13 14 15]]]
19
Hoán đổi trục ma trận
import numpy as np
import numpy as np
arr = np.arange(16).reshape((2, 2, 4))
print(arr)
print(arr.swapaxes(1, 2))
[[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]]
[[[ 0 4]
[ 1 5]
[ 2 6]
[ 3 7]]
[[ 8 12]
[ 9 13]
[10 14]
[11 15]]]
20
Hàm tiện ích trong NumPy
• Các hàm tính toán
21
Các hàm tính toán 1 ngôi
22
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]
23
Các hàm tính toán 2 ngôi
24
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))
[False False False False False False False True True True]
25
Array-Oriented Programming with Arrays
• Array-Oriented Programming with Arrays
26
Ví dụ
• NumPy cho phép thể hiện nhiều loại tác vụ xử lý dữ liệu với mảng ngắn gọn
mà không cần viết vòng lặp
import numpy as np
import matplotlib.pyplot as plt
27
Điều kiện logic được biểu diễn bởi mảng
• NumPy có các hàm tiện ích khi có các điều logic được biểu diễn bởi mảng
• Cho: xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])
• Để lựa chọn phần tử, Thay vì:
*The arrays passed to np.where can be more than just equal-sized arrays or scalars.
28
Các hàm toán học, thống kê
• NumPy có rất nhiều hàm liên quan đến thống kê
29
Mảng boolean
• Có 2 hai 2 hàm tiện dụng là any() và all() tưởng ứng với phép or hay add
True
False
30
Sorting
• Sắp xếp trong mảng 1 chiều
arr = np.random.randn(6)
print(arr)
arr.sort()
print(arr)
31
Sắp xếp trong mảng nhiều chiều
arr = np.random.randn(2, 3)
print(arr)
arr.sort(1)
print(arr)
32
Toán tử liên quan đến tập hợp
• Hàm unique(): tạo tập sắp xếp tăng dần
[1 2 3 4]
33
Toán tử liên quan đến tập hợp
34
Xuất nhập File
• Xuất nhập mảng bằng file
35
Xuất nhập mảng bằng file
• Ta có thể lưu 1 mảng vào file
arr = np.arange(10)
np.save('some_array', arr)
arr1 = np.load('some_array.npy')
print(arr1)
36
Xuất nhập nhiều mảng bằng file
• Ta có thể lưu nhiều mảng vào file .npz
arr1 = np.arange(10)
arr2 = np.arange(5)
np.savez('array_archive.npz', a=arr1, b=arr2)
arrz = np.load('array_archive.npz')
print(arrz['b'])
37
Đại số tuyến tính
• Các hàm tính toán trong lĩnh vực đại số tuyến
38
Đại số tuyến tính
• NumPy cung cấp cho chúng ta nhiều hàm để tính toán trong lĩnh vực đại số
tuyến tính như, nhân ma trận, phân rã ma trận, tính định thức,…
39
Các hàm quan trọng
40
Ví dụ:
[[0.48539824 0.05819806]
[0.05819806 0.82105197]]
[[ 2.07782266 -0.14728086]
[-0.14728086 1.22838931]]
[[ 1.00000000e+00 2.07405664e-18]
[-3.15475053e-18 1.00000000e+00]]
41
Số ngẫu nhiên
• Các hàm liên quan
42
Các hàm liên quan
43
• 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
44