You are on page 1of 16

Bài 14 Sử dụng thư viện Scipy

Bài 14 Sử dụng thư viện Scipy 1


MỤC TIÊU
• Giới thiệu
• Cài đặt và khai báo thư viện
• Các hàm cơ bản
• Gói phân cụm (scipy.cluster)

Bài 14 Sử dụng thư viện Scipy 2


Giới thiệu
• Scipy là phần mềm nguồn mở cho toán học, khoa học và kỹ thuật. Thư viện SciPy được xây
dựng dựa trên thư viện NumPy, cung cấp thao tác mảng N chiều thuận tiện và nhanh chóng.
SciPy gồm các gói con (submodule) cho đại số tuyến tính, tối ưu hóa, tích hợp và thống kê.

• Vì sao nên sử dụng Scipy?


• SciPy chứa nhiều loại gói phụ giúp giải quyết vấn đề phổ biến nhất liên quan đến tính toán khoa học.

• SciPy là thư viện Khoa học được sử dụng nhiều nhất chỉ sau Thư viện Khoa học GNU cho C/C ++ hoặc
Matlab.

• Dễ sử dụng và hiểu cũng như sức mạnh tính toán nhanh.

• Nó có thể hoạt động trên mảng (array) của thư viện NumPy.

Bài 14 Sử dụng thư viện Scipy 3


Cài đặt và khai báo thư viện
• Sử dụng pip: pip install --user scipy

• Lưu ý: Numpy phải được cài đặt trước. Bạn cũng nên cài đặt Matplotlib khi sử dụng
Scipy

• Khai báo thư viện: Để đơn giản và thuận tiện, các gói con của thư viện Scipy và các
thư viện Numpy, Matplotlib thường được khai báo dưới dạng:

from scipy import special


import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

Bài 14 Sử dụng thư viện Scipy 4


Các hàm cơ bản
• Scipy được xây dựng trên Numpy nên bạn có thể sử dụng các hàm của Numpy để
thực hiện tất cả các thao tác array cơ bản
# khai báo numpy
import numpy as np
# Hàm mrid() tạo 1 lưới nhiều chiều dày đặc
m=np.mgrid[0:5,0:5]
print(m)

# sử dụng hàm grid tạo mảng số ảo


m1=np.mgrid[0:5:3j,0:5:6j]
print(m1)

Bài 14 Sử dụng thư viện Scipy 5


Các hàm cơ bản

# hàm đa thức bậc 1


p1=np.poly1d([2,6])
print(p1) # 2x+6
# nhân hai đa thức
p2=p1*p1
print(p2) # (2x+6)*(2x+6)=4x^2+24x+6
# tính đạo hàm của p1
print(p1.deriv()) # 2
# tính đạo hàm của p2
print(p2.deriv()) # 8x+24

Bài 14 Sử dụng thư viện Scipy 6


Các hàm cơ bản
# tạo mảng 15 phần tử
x = np.arange(15)
print(x)
# tạo điều kiện lấy dữ liệu
dieu_kien=[x<10,x>=5]
# chọn ra dữ liệu cần lấy
chon_ra=[x,x*2]
# thực hiện
ket_qua=np.select(dieu_kien,chon_ra)
print(ket_qua)

Bài 14 Sử dụng thư viện Scipy 7


Các gói con của Scipy
• Scipy có nhiều gói con và liên tục được phát triển, bổ sung tính năng mới. Bảng tổng
hợp các gói con của Scipy theo thứ tự alphabet:
gói con Miêu tả
cluster Thuật toán phân cụm (Clustering Algorithms)
constants Các hằng số toán học và vật lý
fftpack Hàm biến đổi Fourier nhanh (Fast Fourier Transform)
integrate Giải phương trình vi phân và tích phân
interpolate Nội suy và làm mịn spline
io Đầu vào và đầu ra
linalg Đại số tuyến tính
ndimage Xử lý ảnh N chiều
odr Hồi quy khoảng cách trực giao
optimize Tối ưu hóa và chương trình root-finding
signal Xử lý tín hiệu
sparse Ma trận sparse và các đoạn chương trình liên quan
spatial Các cấu trúc dữ liệu không gian và thuật toán
special Các hàm toán học đặc biệt
stats Các hàm và phân phối thống kê

Bài 14 Sử dụng thư viện Scipy 8


Gói phân cụm (scipy.cluster)
• Các thuật toán phân cụm rất hữu ích trong lý thuyết thông tin, phát hiện mục tiêu,
truyền thông, nén và các lĩnh vực khác. scipy.cluster gồm scipy.cluster.vq và
scipy.cluster.hierarchy.

• Phân cụm K-mean và lượng tử hóa vestor (scipy.cluster.vq)

Bài 14 Sử dụng thư viện Scipy 9


Gói phân cụm (scipy.cluster)
import numpy as np
from scipy.cluster.vq import whiten
# hàm kmeans - Thực hiện k-mean trên một tập các vectơ quan sát tạo thành các cụm k
from scipy.cluster.vq import vq, kmeans, whiten
import matplotlib.pyplot as plt
# Tạo 60 điểm dữ liệu trong 2 cụm a và b
pts = 60
a = np.random.multivariate_normal([0, 0], [[4, 1], [1, 4]], size=pts)
b = np.random.multivariate_normal([20, 10], [[14, 2], [2, 1]], size=pts)
features = np.concatenate((a, b))
# Whiten dữ liệu
whitened = whiten(features)

Bài 14 Sử dụng thư viện Scipy 10


Gói phân cụm (scipy.cluster)
# Tìm 2 cụm dữ liệu
codebook, distortion = kmeans(whitened, 2)
# Vẽ Whiten dữ liệu và tâm cụm (màu đỏ)
plt.scatter(whitened[:, 0], whitened[:, 1])
plt.scatter(codebook[:, 0], codebook[:, 1], c='r')
plt.show()
# hàm k-mean2
from scipy.cluster.vq import kmeans2
# Tạo mảng z có hình dạng (100, 2) chứa hỗn hợp các mẫu từ ba phân phối bình thường đa biến.
np.random.seed(12345678)
a = np.random.multivariate_normal([0, 6], [[2, 1], [1, 2.5]], size=45)
b = np.random.multivariate_normal([1, 0], [[1, -1], [-1, 3]], size=35)
c = np.random.multivariate_normal([6, 5], [[4, 0], [0, 1.]], size=25)
z = np.concatenate((a, b, c))
np.random.shuffle(z)

Bài 14 Sử dụng thư viện Scipy 11


Gói phân cụm (scipy.cluster)
# Tính toán 3 cụm
centroid, label = kmeans2(z, 3, minit='points')
# Số điểm trong mỗi cụm
counts = np.bincount(label)
# Vẽ các cụm
w0 = z[label == 0]
w1 = z[label == 1]
w2 = z[label == 2]
plt.plot(w0[:, 0], w0[:, 1], 'o', alpha=0.5, label='cụm 1')
plt.plot(w1[:, 0], w1[:, 1], 's', alpha=0.5, label='cụm 2')
plt.plot(w2[:, 0], w2[:, 1], 'd', alpha=0.5, label='cụm 3')
plt.plot(centroid[:, 0], centroid[:, 1], 'ro', label='tâm')
plt.axis('equal')
plt.legend(shadow=True)
plt.show()

Bài 14 Sử dụng thư viện Scipy 12


Gói phân cụm (scipy.cluster)

Bài 14 Sử dụng thư viện Scipy 13


HỎI ĐÁP

Bài 14 Sử dụng thư viện Scipy 14


Bài 14 Sử dụng thư viện Scipy 15
238 Hoàng Quốc Việt, Bắc Từ Liêm, Hà Nội

0968.27.6996

tuyensinh@bachkhoa-aptech.edu.vn

www.bachkhoa-aptech.edu.vn

Bài 14 Sử dụng thư viện Scipy 16

You might also like