Tutorial SciPy in Python: Apa itu | Contoh Perpustakaan & Fungsi

SciPy di ​​Python

SciPy di ​​Python adalah perpustakaan sumber terbuka yang digunakan untuk menyelesaikan masalah matematik, saintifik, kejuruteraan, dan teknikal. Ini memungkinkan pengguna memanipulasi data dan memvisualisasikan data menggunakan pelbagai perintah Python peringkat tinggi. SciPy dibina berdasarkan sambungan Python NumPy. SciPy juga diucapkan sebagai 'Sigh Pi.'

Sub-pakej SciPy:

Dalam tutorial Python SciPy ini, anda akan belajar:

Mengapa menggunakan SciPy

  • SciPy mengandungi pelbagai sub pakej yang membantu menyelesaikan masalah yang paling biasa berkaitan dengan Pengiraan Saintifik.
  • Pakej SciPy di ​​Python adalah perpustakaan Ilmiah yang paling banyak digunakan setelah kedua dengan Perpustakaan Ilmiah GNU untuk C / C ++ atau Matlab.
  • Mudah digunakan dan difahami serta kekuatan pengiraan yang cepat.
  • Ia boleh beroperasi pada pelbagai perpustakaan NumPy.

Numpy VS SciPy

Numpy:

  • Numpy ditulis dalam huruf C dan digunakan untuk pengiraan matematik atau angka.
  • Ia lebih pantas daripada Perpustakaan Python yang lain
  • Numpy adalah perpustakaan yang paling berguna bagi Sains Data untuk melakukan pengiraan asas.
  • Numpy tidak mengandungi apa-apa kecuali jenis data array yang melakukan operasi paling asas seperti menyusun, membentuk, mengindeks, dll.

SciPy:

  • SciPy dibina di atas NumPy
  • Modul SciPy di ​​Python adalah versi Algebra Linear yang lengkap sedangkan Numpy hanya mengandungi beberapa ciri.
  • Sebilangan besar ciri Sains Data baru terdapat di Scipy dan bukannya Numpy.

SciPy - Pemasangan dan Persediaan Alam Sekitar

Anda juga boleh memasang SciPy di ​​Windows melalui pip

 Python3 -m pip install --user numpy scipy 

Pasang Scipy di Linux

 sudo apt-get install python-scipy python-numpy 

Pasang SciPy di ​​Mac

 sudo port install py35-scipy py35-numpy 

Sebelum kita mula belajar SciPy Python, anda perlu mengetahui fungsi asas serta pelbagai jenis array NumPy

Kaedah standard untuk mengimport modul SciPy dan Numpy:

 from scipy import special #same for other modules import numpy as np 

Pakej Input / Output Fail:

Pakej Scipy, I / O, mempunyai pelbagai fungsi untuk bekerja dengan format fail yang berbeza seperti Matlab, Arff, Wave, Matrix Market, IDL, NetCDF, TXT, CSV dan format binary.

Mari kita ambil satu format fail contoh Python SciPy yang selalu digunakan di MatLab:

 import numpy as np from scipy import io as sio array = np.ones((4, 4)) sio.savemat('example.mat', {'ar': array}) data = sio.loadmat(‘example.mat', struct_as_record=True) data['ar'] 

Pengeluaran:

 array([[ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.]]) 

Penjelasan Kod

  • Baris 1 & 2: Import perpustakaan SciPy penting di Python dengan pakej I / O dan Numpy.
  • Baris 3 : Buat susunan dimensi 4 x 4
  • Baris 4 : Susun atur di contoh.mat fail.
  • Baris 5: Dapatkan data dari contoh.mat fail
  • Baris 6 : Hasil cetak.

Pakej Fungsi Khas

  • scipy.special pakej mengandungi banyak fungsi fizik matematik.
  • Fungsi khas SciPy merangkumi Cubic Root, Exponential, Log sum Exponential, Lambert, Permutation and Combinations, Gamma, Bessel, hypergeometric, Kelvin, beta, silinder parabola, Relative Error Exponential, dll.
  • Untuk penerangan satu baris semua fungsi ini, taipkan konsol Python:
 help(scipy.special) Output : NAME scipy.special DESCRIPTION ======================================== Special functions (:mod:`scipy.special`) ======================================== .. module:: scipy.special Nearly all of the functions below are universal functions and follow broadcasting and automatic array-looping rules. Exceptions are noted. 

Fungsi Akar Kubik:

Fungsi Cubic Root mencari punca nilai kubus.

Sintaks:

 scipy.special.cbrt(x) 

Contoh:

 from scipy.special import cbrt #Find cubic root of 27 & 64 using cbrt() function cb = cbrt([27, 64]) #print value of cb print(cb) 

Pengeluaran: tatasusunan ([3., 4.])

Fungsi Eksponen:

Fungsi eksponensial mengira elemen 10 ** x secara bijak.

Contoh:

 from scipy.special import exp10 #define exp10 function and pass value in its exp = exp10([1,10]) print(exp) 

Keluaran: [1.e + 01 1.e + 10]

Permutasi & Gabungan:

SciPy juga memberikan fungsi untuk mengira Permutasi dan Kombinasi.

Gabungan - scipy.special.comb (N, k )

Contoh:

 from scipy.special import comb #find combinations of 5, 2 values using comb(N, k) com = comb(5, 2, exact = False, repetition=True) print(com) 

Keluaran: 15.0

Permutasi -

 scipy.special.perm(N,k) 

Contoh:

 from scipy.special import perm #find permutation of 5, 2 using perm (N, k) function per = perm(5, 2, exact = True) print(per) 

Keluaran: 20

Fungsi Eksponen Log Log

Log Sum Exponential mengira log elemen input eksponensial jumlah.

Sintaks:

 scipy.special.logsumexp(x) 

Fungsi Bessel

Fungsi pengiraan urutan integer Nth

Sintaks:

 scipy.special.jn() 

Aljabar Linear dengan SciPy

  • Linear Algebra dari SciPy adalah pelaksanaan perpustakaan BLAS dan ATLAS LAPACK.
  • Prestasi Linear Algebra sangat pantas berbanding BLAS dan LAPACK.
  • Rutin aljabar linear menerima objek array dua dimensi dan output juga merupakan array dua dimensi.

Sekarang mari kita buat ujian dengan scipy.linalg,

Mengira penentu matriks dua dimensi,

 from scipy import linalg import numpy as np #define square matrix two_d_array = np.array([ [4,5], [3,2] ]) #pass values to det() function linalg.det( two_d_array ) 

Pengeluaran: -7.0

Matriks songsang -

scipy.linalg.inv()

Invers Matrix of Scipy mengira kebalikan dari sebarang matriks persegi.

Mari lihat,

 from scipy import linalg import numpy as np # define square matrix two_d_array = np.array([ [4,5], [3,2] ]) #pass value to function inv() linalg.inv( two_d_array ) 

Pengeluaran:

 array( [[-0.28571429, 0.71428571], [ 0.42857143, -0.57142857]] ) 

Nilai Eigen dan Eigenvector

scipy.linalg.eig ()

  • Masalah yang paling biasa dalam aljabar linear adalah nilai eigen dan eigenvektor yang dapat diselesaikan dengan mudah menggunakan sendiri () fungsi.
  • Sekarang mari kita cari Nilai Eigen dari ( X dan sesuai eigenvektor matriks dua dimensi persegi.

Contohnya

 from scipy import linalg import numpy as np #define two dimensional array arr = np.array([[5,4],[6,3]]) #pass value into function eg_val, eg_vect = linalg.eig(arr) #get eigenvalues print(eg_val) #get eigenvectors print(eg_vect) 

Pengeluaran:

 [ 9.+0.j -1.+0.j] #eigenvalues [ [ 0.70710678 -0.5547002 ] #eigenvectors [ 0.70710678 0.83205029] ] 

Transformasi Fourier Discrete - scipy.fftpack

  • DFT adalah teknik matematik yang digunakan dalam menukar data spatial menjadi data frekuensi.
  • FFT (Fast Fourier Transformation) adalah algoritma untuk mengira DFT
  • FFT digunakan untuk tatasusunan multidimensi.
  • Kekerapan menentukan bilangan isyarat atau panjang gelombang dalam jangka masa tertentu.

Contoh: Ikuti gelombang dan tunjukkan menggunakan perpustakaan Matplotlib. kita mengambil contoh fungsi berkala sederhana dosa (20 × 2πt)

 %matplotlib inline from matplotlib import pyplot as plt import numpy as np #Frequency in terms of Hertz fre = 5 #Sample rate fre_samp = 50 t = np.linspace(0, 2, 2 * fre_samp, endpoint = False ) a = np.sin(fre * 2 * np.pi * t) figure, axis = plt.subplots() axis.plot(t, a) axis.set_xlabel ('Time (s)') axis.set_ylabel ('Signal amplitude') plt.show() 

Pengeluaran:

Anda boleh melihatnya. Kekerapan adalah 5 Hz dan isyaratnya berulang dalam 1/5 saat - ia dipanggil sebagai jangka masa tertentu.

Sekarang mari kita gunakan gelombang sinusoid ini dengan bantuan aplikasi DFT.

 from scipy import fftpack A = fftpack.fft(a) frequency = fftpack.fftfreq(len(a)) * fre_samp figure, axis = plt.subplots() axis.stem(frequency, np.abs(A)) axis.set_xlabel('Frequency in Hz') axis.set_ylabel('Frequency Spectrum Magnitude') axis.set_xlim(-fre_samp / 2, fre_samp/ 2) axis.set_ylim(-5, 110) plt.show() 

Pengeluaran:

  • Anda dapat melihat dengan jelas bahawa output adalah tatasusunan satu dimensi.
  • Input yang mengandungi nilai kompleks adalah sifar kecuali dua titik.
  • Dalam contoh DFT kita menggambarkan besarnya isyarat.

Pengoptimuman dan Kesesuaian dalam SciPy - scipy.optimum

  • Pengoptimuman menyediakan algoritma berguna untuk meminimumkan pemasangan lengkung, multidimensi atau skalar dan pemasangan akar.
  • Mari kita ambil contoh Fungsi Skalar, untuk mencari fungsi skalar minimum .
 %matplotlib inline import matplotlib.pyplot as plt from scipy import optimize import numpy as np def function(a): return a*2 + 20 * np.sin(a) plt.plot(a, function(a)) plt.show() #use BFGS algorithm for optimization optimize.fmin_bfgs(function, 0) 

Pengeluaran:

Pengoptimuman berjaya ditamatkan.

Nilai fungsi semasa: -23.241676

Pengulangan: 4

Penilaian fungsi: 18

Penilaian kecerunan: 6

tatasusunan ([- 1.67096375])

  • Dalam contoh ini, pengoptimuman dilakukan dengan bantuan algoritma penurunan kecerunan dari titik awal
  • Tetapi masalah yang mungkin berlaku adalah minima tempatan dan bukannya minima global. Sekiranya kita tidak menemui jiran minima global, maka kita perlu menerapkan pengoptimuman global dan mencari fungsi minima global yang digunakan sebagai basinhopping () yang menggabungkan pengoptimum tempatan.

optimize.basinhopping (fungsi, 0)

Keluaran:

 fun: -23.241676238045315 lowest_optimization_result: fun: -23.241676238045315 hess_inv: array([[0.05023331]]) jac: array([4.76837158e-07]) message: 'Optimization terminated successfully.' nfev: 15 nit: 3 njev: 5 status: 0 success: True x: array([-1.67096375]) message: ['requested number of basinhopping iterations completed successfully'] minimization_failures: 0 nfev: 1530 nit: 100 njev: 510 x: array([-1.67096375]) 

Nelder –Algoritma Mead:

  • Algoritma Nelder-Mead memilih melalui parameter kaedah.
  • Ini menyediakan kaedah pengurangan yang paling mudah untuk fungsi berkelakuan adil.
  • Algoritma Nelder - Mead tidak digunakan untuk penilaian kecerunan kerana memerlukan masa yang lebih lama untuk mencari penyelesaiannya.
 import numpy as np from scipy.optimize import minimize #define function f(x) def f(x): return .4*(1 - x[0])**2 optimize.minimize(f, [2, -1], method='Nelder-Mead') 
Pengeluaran:
 final_simplex: (array([[ 1. , -1.27109375], [ 1. , -1.27118835], [ 1. , -1.27113762]]), array([0., 0., 0.])) fun: 0.0 message: 'Optimization terminated successfully.' nfev: 147 nit: 69 status: 0 success: True x: array([ 1. , -1.27109375]) 

Pemprosesan Imej dengan SciPy - scipy.ndimage

  • scipy.ndimage adalah submodul dari SciPy yang kebanyakannya digunakan untuk melakukan operasi berkaitan gambar
  • ndima bermaksud gambar dimensi 'n'.
  • Pemprosesan Imej SciPy menyediakan transformasi Geometri (putar, pangkas, balikkan), penyaringan gambar (tajam dan de nosing), gambar paparan, segmentasi gambar, pengelasan dan pengekstrakan ciri.
  • Pakej MISC dalam SciPy mengandungi gambar prebuilt yang dapat digunakan untuk melakukan tugas manipulasi gambar

Contoh: Mari ambil contoh transformasi geometri gambar

 from scipy import misc from matplotlib import pyplot as plt import numpy as np #get face image of panda from misc package panda = misc.face() #plot or show image of face plt.imshow( panda ) plt.show() 

Pengeluaran:

Sekarang kita Balikkan ke bawah gambar semasa:

 #Flip Down using scipy misc.face image flip_down = np.flipud(misc.face()) plt.imshow(flip_down) plt.show() 

Pengeluaran:

Contoh: Putaran Gambar menggunakan Scipy,

 from scipy import ndimage, misc from matplotlib import pyplot as plt panda = misc.face() #rotatation function of scipy for image – image rotated 135 degree panda_rotate = ndimage.rotate(panda, 135) plt.imshow(panda_rotate) plt.show() 

Pengeluaran:

Integrasi dengan Scipy - Integrasi Numerik

  • Apabila kita mengintegrasikan sebarang fungsi di mana pengintegrasian secara analitik tidak mungkin dilakukan, kita perlu mencari integrasi berangka
  • SciPy menyediakan fungsi untuk mengintegrasikan fungsi dengan integrasi berangka.
  • scipy.berintegrasi perpustakaan mempunyai peraturan integrasi tunggal, berganda, tiga, berganda, kuadrat Gauss, Romberg, Trapezoidal dan Simpson.

Contoh: Sekarang ambil contoh Integrasi Tunggal

Di sini ke adalah had atas dan b ialah had bawah

 from scipy import integrate # take f(x) function as f f = lambda x : x**2 #single integration with a = 0 & b = 1 integration = integrate.quad(f, 0 , 1) print(integration) 

Pengeluaran:

(0.33333333333333337, 3.700743415417189e-15)

Di sini fungsi mengembalikan dua nilai, di mana nilai pertama adalah integrasi dan nilai kedua dianggarkan ralat dalam kamiran.

Contoh: Sekarang ambil contoh SciPy penggabungan berganda. Kami dapati penyatuan berganda dari persamaan berikut,

 from scipy import integrate import numpy as np #import square root function from math lib from math import sqrt # set fuction f(x) f = lambda x, y : 64 *x*y # lower limit of second integral p = lambda x : 0 # upper limit of first integral q = lambda y : sqrt(1 - 2*y**2) # perform double integration integration = integrate.dblquad(f , 0 , 2/4, p, q) print(integration) 

Pengeluaran:

(3.0, 9.657432734515774e-14)

Anda telah melihat bahawa output di atas sama seperti yang sebelumnya.

Ringkasan

  • SciPy (diucapkan sebagai 'Sigh Pi') adalah perpustakaan berasaskan Open Source Python, yang digunakan dalam matematik, pengkomputeran saintifik, Kejuruteraan, dan pengkomputeran teknikal.
  • SciPy mengandungi pelbagai sub pakej yang membantu menyelesaikan masalah yang paling biasa berkaitan dengan Pengiraan Saintifik.
  • SciPy dibina di atas NumPy
Nama PakejPenerangan
scipy.io
  • Input / output fail
scipy.special
  • Fungsi Khas
scipy.linalg
  • Operasi Aljabar Linear
scipy.interpolate
  • Interpolasi
scipy.optimum
  • Pengoptimuman dan kesesuaian
scipy.stats
  • Statistik dan nombor rawak
scipy.berintegrasi
  • Integrasi Berangka
scipy.fftpack
  • Transformasi Fourier pantas
scipy.signal
  • Pemprosesan isyarat
scipy.ndimage
  • Manipulasi gambar -

Mengenai Krishna Rungta

Krishna mempunyai lebih dari 15 tahun pengalaman pengembangan dan pengujian perisian profesional, sebagai penyumbang individu, peneraju teknikal, dan hari ini sebagai Ketua Pegawai Eksekutif Guru99.