SciPy masuk Python Tutorial: Apa Itu, Library, Fungsi & Contoh
SciPy masuk Python
SciPy masuk Python adalah perpustakaan sumber terbuka yang digunakan untuk memecahkan masalah matematika, ilmiah, teknik, dan teknis. Hal ini memungkinkan pengguna untuk memanipulasi data dan memvisualisasikan data menggunakan berbagai tingkat tinggi Python perintah. SciPy dibangun di atas Python Ekstensi NumPy. SciPy juga diucapkan sebagai “Sigh Pi.”
Sub-paket SciPy:
- Masukan/keluaran berkas – scipy.io
- Fungsi Khusus – scipy.khusus
- Aljabar linier Operation – scipy.linalg
- Interpolasi – scipy.interpolasi
- Optimasi dan kesesuaian – scipy.optimalkan
- Statistik dan angka acak – scipy.stats
- Integrasi numerik - scipy.integrate
- Transformasi Fast Fourier – scipy.fftpack
- Signal Pemrosesan – scipy.sinyal
- Manipulasi gambar – scipy.ndimage
Mengapa menggunakan SciPy
- SciPy berisi berbagai subpaket yang membantu memecahkan masalah paling umum terkait Komputasi Ilmiah.
- Paket SciPy masuk Python adalah perpustakaan Ilmiah yang paling banyak digunakan setelah Perpustakaan Ilmiah GNU untuk C/C++ atau Matlab.
- Mudah digunakan dan dipahami serta daya komputasi yang cepat.
- Itu dapat beroperasi pada array perpustakaan NumPy.
Numpy VS SciPy
lumpuh
- Numpy ditulis dalam C dan digunakan untuk perhitungan matematis atau numerik.
- Ini lebih cepat dari yang lain Python perpustakaan
- Numpy adalah perpustakaan paling berguna untuk Ilmu Data untuk melakukan penghitungan dasar.
- Numpy hanya berisi tipe data array yang melakukan operasi paling dasar seperti pengurutan, pembentukan, pengindeksan, dll.
SciPy
- SciPy dibangun di atas NumPy
- Modul SciPy masuk Python adalah versi Aljabar Linier berfitur lengkap sementara Numpy hanya berisi beberapa fitur.
- Sebagian besar fitur Ilmu Data baru tersedia di Scipy, bukan Numpy.
SciPy – Instalasi dan Pengaturan Lingkungan
Anda juga dapat menginstal SciPy di Windows melalui pip
Python3 -m pip install --user numpy scipy
Instal Scipy di Linux
sudo apt-get install python-scipy python-numpy
Instal SciPy di Mac
sudo port install py35-scipy py35-numpy
Sebelum kita mulai mempelajari SciPy Python, Anda perlu mengetahui fungsionalitas dasar serta berbagai jenis array JumlahPy
Cara standar untuk mengimpor modul SciPy dan Numpy:
from scipy import special #same for other modules import numpy as np
Paket Masukan/Keluaran File
Scipy, paket I/O, memiliki berbagai fungsi untuk bekerja dengan format file berbeda yaitu Matlab, Arff, Wave, Matrix Market, IDL, NetCDF, TXT, CSV dan format biner.
Mari kita ambil satu format file Python Contoh SciPy yang biasa 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']
Keluaran:
array([[ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.]])
Penjelasan Kode
- Baris 1 & 2: Impor perpustakaan SciPy yang penting ke dalamnya Python dengan paket I/O dan Numpy.
- Jalur 3: Membuat array berdimensi 4 x 4
- Jalur 4: Simpan susunan di contoh.mat file.
- Baris 5: Dapatkan data dari contoh.mat fillet
- Jalur 6: Hasil cetak.
Paket Fungsi Khusus
- scipy.khusus paket berisi berbagai fungsi fisika matematika.
- Fungsi khusus SciPy meliputi Akar Kubik, Eksponensial, Log sum Eksponensial, Lambert, Permutasi dan Kombinasi, Gamma, Bessel, hipergeometri, Kelvin, beta, silinder parabola, Eksponensial Kesalahan Relatif, dll.
- Untuk deskripsi satu baris semua fungsi ini, ketik Python menghibur:
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 Akar Kubik menemukan akar pangkat tiga dari nilai.
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)
Keluaran: larik([3., 4.])
Fungsi eksponensial:
Fungsi eksponensial menghitung 10**x per elemen.
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 & Kombinasi
SciPy juga memberikan fungsionalitas untuk menghitung Permutasi dan Kombinasi.
Kombinasi - scipy.khusus.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 Eksponensial Jumlah Log
Log Sum Eksponensial menghitung log jumlah elemen input eksponensial.
Sintaks:
scipy.special.logsumexp(x)
Fungsi Besel
Fungsi perhitungan bilangan bulat ke-n
Sintaks:
scipy.special.jn()
Aljabar Linier dengan SciPy
- Aljabar Linier SciPy merupakan implementasi dari perpustakaan BLAS dan ATLAS LAPACK.
- Performa Aljabar Linier sangat cepat dibandingkan BLAS dan LAPACK.
- Rutinitas aljabar linier menerima objek array dua dimensi dan keluarannya juga berupa array dua dimensi.
Sekarang mari kita lakukan tes dengan scipy.linalg,
Menghitung penentu dari 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 )
Keluaran: -7.0
Matriks Terbalik –
scipy.linalg.inv()
Matriks Invers Scipy menghitung invers dari matriks persegi apa pun.
Ayo 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 )
Keluaran:
array( [[-0.28571429, 0.71428571], [ 0.42857143, -0.57142857]] )
Nilai Eigen dan Vektor Eigen
scipy.linalg.eig()
- Masalah yang paling umum dalam aljabar linier adalah nilai eigen dan vektor eigen yang dapat diselesaikan dengan mudah menggunakan eig()fungsi.
- Sekarang mari kita mencari Nilai Eigen dari (X) dan sesuai dengan vektor eigen matriks persegi dua dimensi.
Example
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)
Keluaran:
[ 9.+0.j -1.+0.j] #eigenvalues [ [ 0.70710678 -0.5547002 ] #eigenvectors [ 0.70710678 0.83205029] ]
Transformasi Fourier Diskrit – scipy.fftpack
- DFT adalah teknik matematika yang digunakan untuk mengubah data spasial menjadi data frekuensi.
- FFT (Fast Fourier Transformation) adalah algoritma untuk menghitung DFT
- FFT diterapkan pada array multidimensi.
- Frekuensi mendefinisikan jumlah sinyal atau panjang gelombang dalam periode waktu tertentu.
Contoh: Ambil gelombang dan tunjukkan menggunakan perpustakaan Matplotlib. kita ambil contoh fungsi periodik sederhana sin(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()
Keluaran:
Anda dapat melihat ini. Frekuensinya adalah 5 Hz dan sinyalnya berulang dalam 1/5 detik – disebut periode waktu tertentu.
Sekarang mari kita gunakan gelombang sinusoida 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()
Keluaran:
- Anda dapat dengan jelas melihat bahwa keluarannya adalah array satu dimensi.
- Masukan yang berisi nilai kompleks adalah nol kecuali dua titik.
- Dalam contoh DFT kami memvisualisasikan besarnya sinyal.
Optimasi dan Kesesuaian di SciPy – scipy.optimize
- Optimasi menyediakan algoritma yang berguna untuk meminimalkan pemasangan kurva, 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)
Keluaran:
Pengoptimalan berhasil dihentikan.
Nilai fungsi saat ini: -23.241676
Iterasi: 4
Evaluasi fungsi: 18
Evaluasi gradien: 6
susunan([-1.67096375])
- Dalam contoh ini, optimasi dilakukan dengan bantuan algoritma penurunan gradien dari titik awal
- Namun permasalahan yang mungkin timbul adalah nilai minimum lokal, bukan nilai minimum global. Jika kita tidak menemukan tetangga dari minimum global, maka kita perlu menerapkan optimasi global dan mencari fungsi minimum global yang digunakan sebagai belanja baskom() yang menggabungkan pengoptimal lokal.
optimalkan.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])
Algoritma Nelder –Mead:
- Algoritma Nelder-Mead memilih melalui parameter metode.
- Ini memberikan cara minimalisasi yang paling mudah untuk fungsi yang berperilaku adil.
- Algoritma Nelder – Mead tidak digunakan untuk evaluasi gradien karena mungkin memerlukan waktu lebih lama untuk menemukan solusinya.
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")
Keluaran:
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])
Pemrosesan Gambar dengan SciPy – scipy.ndimage
- scipy.ndimage adalah submodul SciPy yang banyak digunakan untuk melakukan operasi terkait gambar
- ndimage berarti gambar berdimensi “n”.
- Pemrosesan Gambar SciPy menyediakan transformasi Geometris (memutar, memotong, membalik), pemfilteran gambar (menajamkan dan menghilangkan nosing), menampilkan gambar, segmentasi gambar, klasifikasi dan ekstraksi fitur.
- Paket LAIN-LAIN di SciPy berisi gambar bawaan yang dapat digunakan untuk melakukan tugas manipulasi gambar
Contoh: Mari kita 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()
Keluaran:
Sekarang kita Membalikkan ke bawah gambar saat ini:
#Flip Down using scipy misc.face image flip_down = np.flipud(misc.face()) plt.imshow(flip_down) plt.show()
Keluaran:
Contoh: Rotasi 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()
Keluaran:
Integrasi dengan Scipy – Integrasi Numerik
- Ketika kita mengintegrasikan fungsi apa pun yang tidak memungkinkan untuk diintegrasikan secara analitis, kita perlu menggunakan integrasi numerik
- SciPy menyediakan fungsionalitas untuk mengintegrasikan fungsi dengan integrasi numerik.
- scipy.integrate pustaka memiliki integrasi tunggal, ganda, rangkap tiga, kelipatan, kuadrat Gaussian, Romberg, Trapesium, dan aturan Simpson.
Contoh: Sekarang ambil contoh Integrasi Tunggal
Sini a adalah batas atas dan b adalah batas 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)
Keluaran:
(0.33333333333333337, 3.700743415417189e-15)
Di sini fungsi mengembalikan dua nilai, di mana nilai pertama adalah integrasi dan nilai kedua adalah perkiraan kesalahan integral.
Contoh: Sekarang ambil contoh SciPy integrasi ganda. Kita menemukan integrasi ganda 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)
Keluaran:
(3.0, 9.657432734515774e-14)
Anda telah melihat keluaran di atas seperti keluaran sebelumnya.
Kesimpulan
- SciPy (diucapkan sebagai “Sigh Pi”) adalah Open Source Pythonperpustakaan berbasis, yang digunakan dalam matematika, komputasi ilmiah, Teknik, dan komputasi teknis.
- SciPy berisi berbagai subpaket yang membantu memecahkan masalah paling umum terkait Komputasi Ilmiah.
- SciPy dibangun di atas NumPy
Nama Paket | Description |
---|---|
scipy.io | Masukan/keluaran berkas |
scipy.khusus | Fungsi Khusus |
scipy.linalg | Aljabar linier Operaproduksi |
scipy.interpolasi | Interpolasi |
scipy.optimalkan | Optimasi dan kesesuaian |
scipy.stats | Statistik dan angka acak |
scipy.integrate | Integrasi numerik |
scipy.fftpack | Transformasi Fast Fourier |
scipy.sinyal | Signal Pengolahan |
scipy.ndimage | Manipulasi gambar – |