Hướng dẫn về SciPy: Python SciPy là gì và cách sử dụng nó?



SciPy là một thư viện Python được sử dụng để giải quyết các vấn đề khoa học và toán học. NumPy vs SciPy. Cơ bản, Đặc biệt, Tích hợp, Tối ưu hóa, v.v. với các ví dụ.

Toán học giải quyết một số lượng lớn các khái niệm rất quan trọng nhưng đồng thời, phức tạp và tốn thời gian. Tuy nhiên, cung cấp thư viện SciPy đầy đủ để giải quyết vấn đề này cho chúng tôi. Trong hướng dẫn SciPy này, bạn sẽ học cách sử dụng thư viện này cùng với một vài hàm và ví dụ của chúng.

Trước khi tiếp tục, hãy xem tất cả các chủ đề được thảo luận trong bài viết này:





Vậy hãy bắt đầu. :)

SciPy là gì?

SciPy là một thư viện Python mã nguồn mở được sử dụng để giải quyết các vấn đề khoa học và toán học. Nó được xây dựng trên mở rộng và cho phép người dùng thao tác và trực quan hóa dữ liệu với một loạt các lệnh cấp cao. Như đã đề cập trước đó, SciPy xây dựng dựa trên NumPy và do đó nếu bạn nhập SciPy, không cần nhập NumPy.



NumPy vs SciPy

Cả NumPy và SciPy đều được sử dụng để phân tích toán học và số được sử dụng. NumPy chứa dữ liệu mảng và các hoạt động cơ bản như sắp xếp, lập chỉ mục, v.v. trong khi, SciPy bao gồm tất cả các mã số. Mặc dù NumPy cung cấp một số có thể giúp giải quyết đại số tuyến tính, biến đổi Fourier, v.v., SciPy là thư viện thực sự chứa các phiên bản đầy đủ tính năng của các hàm này cùng với nhiều hàm khác. Tuy nhiên, nếu bạn đang thực hiện phân tích khoa học bằng Python, bạn sẽ cần cài đặt cả NumPy và SciPy vì SciPy được xây dựng dựa trên NumPy.

Các gói con trong SciPy:

SciPy có một số gói con cho các phép tính khoa học khác nhau được hiển thị trong bảng sau:

TênSự miêu tả
cụmCác thuật toán phân cụm
hằng sốHằng số vật lý và toán học
fftpackQuy trình chuyển đổi Fourier nhanh
tích hợpTích hợp và giải phương trình vi phân thông thường
nội suyNội suy và làm mịn splines
TôiĐầu vào và đầu ra
linalgĐại số tuyến tính
tôi bayXử lý hình ảnh N-chiều
odrHồi quy khoảng cách trực giao
tối ưu hóaTối ưu hóa và các quy trình tìm kiếm gốc rễ
tín hiệuXử lý tín hiệu
thưa thớtMa trận thưa thớt và các quy trình liên quan
không gianCấu trúc dữ liệu không gian và thuật toán
đặc biệtChức năng đặc biệt
số liệu thống kêPhân phối thống kê và chức năng

Tuy nhiên, để biết mô tả chi tiết, bạn có thể làm theo tài liệu chính thức .



Các gói này cần phải được nhập riêng trước khi sử dụng chúng. Ví dụ:

từ cụm nhập khẩu scipy

Trước khi xem xét chi tiết từng chức năng này, trước tiên chúng ta hãy xem xét các chức năng phổ biến cả trong NumPy và SciPy.

Chức năng cơ bản:

Tương tác với NumPy:

SciPy xây dựng dựa trên NumPy và do đó bạn có thể sử dụng chính các hàm NumPy để xử lý các mảng. Để biết chuyên sâu về các hàm này, bạn chỉ cần sử dụng các hàm help (), info () hoặc source ().

Cứu giúp():

Để nhận thông tin về bất kỳ chức năng nào, bạn có thể sử dụng Cứu giúp() chức năng. Có hai cách để sử dụng chức năng này:

  • không có bất kỳ thông số nào
  • sử dụng các thông số

Đây là một ví dụ cho thấy cả hai phương pháp trên:

from scipy import cluster help (cluster) #with tham số help () #without tham số

Khi bạn thực thi mã trên, trợ giúp đầu tiên () trả về thông tin về cụm mô-đun con. Trợ giúp thứ hai () yêu cầu người dùng nhập tên của bất kỳ mô-đun, từ khóa, v.v. nào mà người dùng muốn tìm kiếm thông tin. Để dừng thực thi chức năng này, chỉ cần gõ ‘thoát’ và nhấn enter.

thông tin ():

Hàm này trả về thông tin về , mô-đun, v.v.

scipy.info (cụm)

nguồn ():

Mã nguồn chỉ được trả về cho các đối tượng được viết bằng . Hàm này không trả về thông tin hữu ích trong trường hợp các phương thức hoặc đối tượng được viết bằng bất kỳ ngôn ngữ nào khác chẳng hạn như C. Tuy nhiên, trong trường hợp bạn muốn sử dụng hàm này, bạn có thể thực hiện như sau:

scipy.source (cụm)

Chức năng đặc biệt:

SciPy cung cấp một số hàm đặc biệt được sử dụng trong vật lý toán học như elliptic, chức năng tiện lợi, gamma, beta, v.v.Để tìm kiếm tất cả các hàm, bạn có thể sử dụng hàm help () như đã mô tả trước đó.

Hàm số mũ và hàm lượng giác:

Gói Chức năng Đặc biệt của SciPy cung cấp một số hàm mà qua đó bạn có thể tìm số mũ và giải các bài toán lượng giác.

Hãy xem xét ví dụ sau:

THÍ DỤ:

from scipy import special a = special.exp10 (3) print (a) b = special.exp2 (3) print (b) c = special.sindg (90) print (c) d = special.cosdg (45) print ( d)

ĐẦU RA:

1000.0
8.0
1,0
0,7071067811865475

Có rất nhiều chức năng khác có trong gói chức năng đặc biệt của SciPy mà bạn có thể thử cho mình.

Chức năng tích hợp:

SciPy cung cấp một số hàm để giải tích phân. Từ tích phân vi phân thông thường đến sử dụng các quy tắc hình thang để tính tích phân, SciPy là một kho các hàm để giải quyết tất cả các dạng bài toán về tích phân.

Tích hợp chung:

SiPy cung cấp một hàm có tên quad để tính tích phân của một hàm có một biến. Các giới hạn có thể là ±&infin(± inf) để chỉ giới hạn vô hạn. Cú pháp của hàm quad () như sau:

TỔNG HỢP:

quad (func, a, b, args = (), full_output = 0, epsabs = 1.49e-08, epsrel = 1.49e-08, limit = 50, points = None, weight = None, wvar = None, wopts = None , maxp1 = 50, limlst = 50)

Tại đây, hàm sẽ được tích phân giữa các giới hạn a và b (cũng có thể là vô hạn).

THÍ DỤ:

from scipy import Special from scipy import integration a = lambda x: special.exp10 (x) b = scipy.integrate.quad (a, 0, 1) print (b)

Trong ví dụ trên, hàm ‘a’ được đánh giá giữa các giới hạn 0, 1. Khi mã này được thực thi, bạn sẽ thấy kết quả sau.

ĐẦU RA:

(3,9086503371292665, 4,3394735994897923e-14)

Hàm tích phân kép:

SciPy cung cấp dblquad có thể được sử dụng để tính tích phân kép. Một tích phân kép, như nhiều người trong chúng ta đã biết, bao gồm hai biến thực. Hàm dblquad () sẽ lấy hàm được tích hợp làm tham số của nó cùng với 4 biến khác xác định các giới hạn và hàm dydx.

THÍ DỤ:

from scipy import integration a = lambda y, x: x * y ** 2 b = lambda x: 1 c = lambda x: -1 integration.dblquad (a, 0, 2, b, c)

ĐẦU RA:

-1.3333333333333335, 1.4802973661668755e-14)

SciPy cung cấp nhiều chức năng khác để đánh giá tích phân ba, tích phân n, Tích phân Romberg, v.v. mà bạn có thể khám phá thêm chi tiết. Để tìm tất cả chi tiết về các chức năng cần thiết, hãy sử dụng chức năng trợ giúp.

Chức năng Tối ưu hóa:

Scipy.optimize cung cấp một số thuật toán tối ưu hóa thường được sử dụng có thể được nhìn thấy bằng cách sử dụng hàm trợ giúp.

Về cơ bản nó bao gồm những điều sau:

  • Giảm thiểu không bị ràng buộc và hạn chế của các hàm vô hướng đa biến, tức là giảm thiểu (ví dụ: BFGS, Newton Conjugate Gradient, Nelder_mead simplex, v.v.)
  • Các quy trình tối ưu hóa toàn cầu (ví dụ: diff_evolution, dual_annealing, v.v.)
  • Giảm thiểu bình phương tối thiểu và phù hợp với đường cong (ví dụ: less_squares, curve_fit, v.v.)
  • Các hàm đơn biến vô hướng và các công cụ tìm gốc (ví dụ :mize_scalar và root_scalar)
  • Bộ giải hệ phương trình đa biến sử dụng các thuật toán như hybrid Powell, Levenberg-Marquardt.

Chức năng Rosenbrook:

Hàm Rosenbrook ( rosen ) là một bài toán kiểm tra được sử dụng cho các thuật toán tối ưu hóa dựa trên gradient. Nó được định nghĩa như sau trong SciPy:

rosen-Scipy hướng dẫn-edurekaTHÍ DỤ:

import numpy dưới dạng np từ scipy.optimize import rosen a = 1.2 * np.arange (5) rosen (a)

ĐẦU RA: 7371.0399999999945

Nelder-Mead:

CácNelder–Mead method là một phương pháp số thường được sử dụng để tìm min / max của một hàm trong không gian nhiều chiều. Trong ví dụ sau, phương pháp thu nhỏ được sử dụng cùng với thuật toán Nelder-Mead.

THÍ DỤ:

từ thao tác nhập scipy, tối ưu hóa a = [2.4, 1.7, 3.1, 2.9, 0.2] b =mize.minimize (mize.rosen, a, method = 'Nelder-Mead') b.x

ĐẦU RA: mảng ([0,96570182, 0,93255069, 0,86939478, 0,75497872, 0,56793357])

Chức năng nội suy:

Trong lĩnh vực phân tích số, nội suy đề cập đến việc xây dựng các điểm dữ liệu mới trong một tập hợp các điểm dữ liệu đã biết. Thư viện SciPy bao gồm một gói con có tên là scipy.interpolate bao gồmcác hàm và lớp spline, các lớp nội suy một chiều và đa chiều (đơn biến và đa biến), v.v.

Nội suy đơn biến:

Nội suy đơn biến về cơ bản là một khu vực phù hợp đường cong màtìm đường cong cung cấp sự phù hợp chính xác với một loạt các điểm dữ liệu hai chiều. SciPy cung cấp interp1d có thể được sử dụng để tạo ra phép nội suy đơn biến.

THÍ DỤ:

nhập matplotlib.pyplot dưới dạng plt từ nhập nội suy scipy x = np.arange (5, 20) y = np.exp (x / 3.0) f = interpolate.interp1d (x, y) x1 = np.arange (6, 12) y1 = f (x1) # sử dụng hàm nội suy được trả về bởi `interp1d` plt.plot (x, y, 'o', x1, y1, '-') plt.show ()

ĐẦU RA:

Nội suy đa biến:

Nội suy đa biến(không gianphép nội suy) là một loạiphép nội suytrên các hàm có nhiều hơn một biến. Ví dụ sau minh họa một ví dụ về interp2d chức năng.
Nội suy trên lưới 2-D bằng hàm interp2d (x, y, z) về cơ bản sẽ sử dụng các mảng x, y, z để tính gần đúng một số hàm f: 'z = f (x, y)' và trả về một hàm có phương thức gọi sử dụng nội suy spline để tìm giá trị của điểm mới.
THÍ DỤ:

từ scipy import nội suy nhập matplotlib.pyplot dưới dạng plt x = np.arange (0,10) y = np.arange (10,25) x1, y1 = np.meshgrid (x, y) z = np.tan (xx + yy) f = interpolate.interp2d (x, y, z, kind = 'square') x2 = np.arange (2,8) y2 = np.arange (15,20) z2 = f (xnew, ynew) plt. plot (x, z [0,:], 'ro-', x2, z2 [0,:], '-') plt.show ()

ĐẦU RA:

Các chức năng biến đổi Fourier:

Phân tích Fourier là một phương pháp xử lý việc thể hiện một hàm dưới dạng tổng các thành phần tuần hoàn và khôi phục tín hiệu từ các thành phần đó. Các fft các hàm có thể được sử dụng để trả vềbiến đổi Fourier rời rạc của một chuỗi thực hoặc phức.

THÍ DỤ:

từ scipy.fftpack import fft, ifft x = np.array ([0,1,2,3]) y = fft (x) print (y)

ĐẦU RA: [6. + 0.j -2. + 2.j -2. + 0.j -2.-2.j]

Tương tự, bạn có thể tìm thấy nghịch đảo của điều này bằng cách sử dụng ifft chức năng như sau:

tổng các chữ số trong java

THÍ DỤ:

rom scipy.fftpack import fft, ifft x = np.array ([0,1,2,3]) y = ifft (x) print (y)

ĐẦU RA: [1,5 + 0,j -0,5-0,5j -0,5 + 0,j -0,5 + 0,5j]

Chức năng xử lý tín hiệu:

Xử lý tín hiệu giao dịch vớiphân tích, sửa đổi và tổng hợp các tín hiệu như âm thanh, hình ảnh, v.v. SciPy cung cấp một số chức năng mà bạn có thể thiết kế, lọc và nội suy dữ liệu một chiều và hai chiều.

Lọc:

Bằng cách lọc một tín hiệu, về cơ bản bạn đã loại bỏ các thành phần không mong muốn khỏi nó. Để thực hiện lọc theo thứ tự, bạn có thể sử dụng order_filter chức năng. Hàm này về cơ bản thực hiện lọc theo thứ tự trên một mảng. Cú pháp của hàm này như sau:

TỔNG HỢP:
order_filter (a, miền, xếp hạng)

a = mảng đầu vào N chiều

domain = mảng mặt nạ có cùng số kích thước với `a`

rank = Số không âm chọn các phần tử từ danh sách sau khi nó đã được sắp xếp (0 là số nhỏ nhất theo sau là 1…)

THÍ DỤ:

từ tín hiệu nhập scipy x = np.arange (35) .reshape (7, 5) domain = np.identity (3) print (x, end = 'nn') print (signal.order_filter (x, domain, 1))

ĐẦU RA:

[[0 1 2 3 4]
[5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]
[25 26 27 28 29]
[30 31 32 33 34]]

[[0. 1. 2. 3. 0.]
[5. 6. 7. 8. 3.]
[10. 11. 12. 13. 8.]
[mười lăm. 16. 17. 18. 13.]
[hai mươi. 21. 22. 23. 18.]
[25. 26. 27. 28. 23.]
[0. 25. 26. 27. 28.]]

Dạng sóng:

Gói con scipy.signal cũng bao gồm các chức năng khác nhau có thể được sử dụng để tạo ra các dạng sóng. Một trong những chức năng như vậy là tiếng kêu . Hàm này là một fBộ tạo cosine quét theo yêu cầu và cú pháp như sau:

TỔNG HỢP:
chirp (t, f0, t1, f1, method = ’linear’, phi = 0, vertex_zero = True)

Ở đâu,

THÍ DỤ:

từ scipy.signal import chirp, Spectrogram import matplotlib.pyplot as plt t = np.linspace (6, 10, 500) w = chirp (t, f0 = 4, f1 = 2, t1 = 5, method = 'linear') plt.plot (t, w) plt.title ('Chirp tuyến tính') plt.xlabel ('thời gian tính bằng giây)') plt.show ()

ĐẦU RA:

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

Đại số tuyến tính giải quyết các phương trình tuyến tính và biểu diễn của chúng bằng cách sử dụng không gian vectơ và ma trận. SciPy được xây dựng trênCác thư viện ATLAS LAPACK và BLAS và làcực nhanh trong việc giải quyết các vấn đề liên quan đến đại số tuyến tính. Ngoài tất cả các chức năng từ numpy.linalg, scipy.linalg cũng cung cấp một số chức năng nâng cao khác. Ngoài ra, nếu numpy.linalg không được sử dụng cùng vớiHỗ trợ ATLAS LAPACK và BLAS, scipy.linalg nhanh hơn numpy.linalg.

Tìm nghịch đảo của ma trận:

Về mặt toán học, nghịch đảo của ma trận Alà ma trậnBnhư vậy màAB = IỞ đâuTôilà ma trận nhận dạng bao gồm các ma trận nằm dưới đường chéo chính được ký hiệu làB = A-một. Trong SciPy, nghịch đảo này có thể đạt được bằng cách sử dụng linalg.inv phương pháp.

THÍ DỤ:

import numpy dưới dạng np từ scipy import linalg A = np.array ([[1,2], [4,3]]) B = linalg.inv (A) print (B)

ĐẦU RA:

[[-0,6 0,4]
[0,8 -0,2]]

Tìm các yếu tố quyết định:

Giá trị thu được về mặt số học từ các hệ số của ma trận được gọi là định thức của ma trận vuông. Trong SciPy, điều này có thể được thực hiện bằng cách sử dụng một hàm các có cú pháp sau:

TỔNG HỢP:
det (a, override_a = False, check_finite = True)
Ở đâu,

a: (M, M) Là một ma trận vuông

override_a (bool, tùy chọn): Cho phép ghi đè dữ liệu trong một

check_finite (bool, tùy chọn): Để kiểm tra xem ma trận đầu vào chỉ chứa các số hữu hạn hay không

THÍ DỤ:

import numpy dưới dạng np từ scipy import linalg A = np.array ([[1,2], [4,3]]) B = linalg.det (A) print (B)

ĐẦU RA: -5.0

Giá trị riêng thưa thớt:

Giá trị riêng là một tập hợp vô hướng cụ thể được liên kết với các phương trình tuyến tính. ARPACK cung cấp cho phép bạn tìm các giá trị riêng (eigenvectors) khá nhanh. Chức năng đầy đủ của ARPACK được đóng gói tronghai giao diện cấp cao là scipy.sparse.linalg.eigs và scipy.sparse.linalg.eigsh. eigs. Giao diện eigs cho phép bạn tìm các giá trị riêng của các ma trận vuông không đối xứng thực hoặc phức tạp trong khi giao diện eigsh chứa các giao diện cho các ma trận đối xứng thực hoặc phức-hermitian.

Các thứ tám hàm giải quyết một vấn đề giá trị riêng tổng quát cho một ma trận đối xứng thực hoặc Hermitian phức tạp.

THÍ DỤ:

from scipy.linalg import 8 import numpy as np A = np.array ([[1, 2, 3, 4], [4, 3, 2, 1], [1, 4, 6, 3], [2, 3, 2, 5]]) a, b = 1/8 (A) print ('Các giá trị riêng đã chọn:', a) print ('Complex ndarray:', b)

ĐẦU RA:

Các giá trị riêng đã chọn: [-2.53382695 1.66735639 3.69488657 12.17158399]
Phức hợp ndarray: [[0,69205614 0,5829305 0,25682823 -0,33954321]
[-0,68277875 0,46838936 0,03700454 -0,5595134]
[0,23275694 -0,29164622 -0,72710245 -0,57627139]
[0,02637572 -0,59644441 0,63560361 -0,48945525]]

Cấu trúc dữ liệu không gian và thuật toán:

Dữ liệu không gian về cơ bản bao gồm các đối tượng được tạo thành từ các đường, điểm, bề mặt, v.v. Gói scipy.spatial của SciPy có thể tính toánSơ đồ Voronoi, tam giác, v.v. bằng cách sử dụng thư viện Qhull. Nó cũng bao gồm các triển khai KDTree cho các truy vấn điểm lân cận gần nhất.

Tam giác Delaunay:

Về mặt toán học, tam giác Delaunay cho một tập hợp các điểm rời rạc trong một mặt phẳng là một tam giác sao cho không có điểm nào trong tập hợp các điểm đã cho làbên trong đường tròn ngoại tiếp tam giác bất kỳ.

THÍ DỤ:

nhập matplotlib.pyplot dưới dạng plt từ scipy.spatial import Delaunay points = np.array ([[0, 1], [1, 1], [1, 0], [0, 0]]) a = Delaunay (điểm) Đối tượng #Delaunay print (a) print (a.simplices) plt.triplot (điểm [:, 0], điểm [:, 1], a.simplices) plt.plot (điểm [:, 1], điểm [:, 0], 'o') plt.show ()

ĐẦU RA:

Chức năng xử lý hình ảnh đa chiều:

Xử lý hình ảnh về cơ bản liên quan đến việc thực hiện các thao tác trên hình ảnh để truy xuất thông tin hoặc để có được hình ảnh nâng cao từ hình ảnh gốc. Gói scipy.ndimage bao gồm một sốcác chức năng xử lý và phân tích hình ảnh được thiết kế để làm việc với các mảng có kích thước tùy ý.

Chuyển đổi và tương quan:

SciPy cung cấp một số chức năng cho phép tương quan và tích hợp các hình ảnh.

  • Chức năng tương quan1d có thể được sử dụng để tính toán mối tương quan một chiều dọc theo một trục nhất định
  • Chức năng tương quan cho phép tương quan nhiều chiều của bất kỳ mảng nhất định nào với hạt nhân được chỉ định
  • Chức năng chuyển đổi1d có thể được sử dụng để tính tích chập một chiều dọc theo một trục nhất định
  • Chức năng cây dây leo cho phép tích chập nhiều chiều của bất kỳ mảng nhất định nào với nhân được chỉ định

THÍ DỤ:

nhập numpy dưới dạng np từ scipy.ndimage nhập tương quan1d tương quan1d ([3,5,1,7,2,6,9,4], weights = [1,2])

ĐẦU RA: mảng ([9, 13, 7, 15, 11, 14, 24, 17])

Tệp IO:

Gói scipy.io cung cấp một số chức năng giúp bạn quản lý các tệp có định dạng khác nhau như tệp MATLAB, tệp IDL, tệp Matrix Market, v.v.

Để sử dụng gói này, bạn sẽ cần nhập nó như sau:

nhập scipy.io dưới dạng sio

Để biết thông tin đầy đủ về gói con, bạn có thể tham khảo tài liệu chính thức về Tệp IO .

Đây là phần cuối của Hướng dẫn SciPy này. Tôi hy vọng bạn đã hiểu mọi thứ rõ ràng. Đảm bảo bạn luyện tập càng nhiều càng tốt .

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần nhận xét của blog “Hướng dẫn khoa học” này và chúng tôi sẽ liên hệ lại với bạn trong thời gian sớm nhất.

Để có kiến ​​thức chuyên sâu về Python cùng với các ứng dụng khác nhau của nó, bạn có thể đăng ký tham gia trực tiếp với hỗ trợ 24/7 và truy cập trọn đời.