Tutorial SciPy dengan Python:Apa itu | Contoh Perpustakaan &Fungsi
SciPy dengan Python
SciPy dengan Python adalah perpustakaan sumber terbuka yang digunakan untuk memecahkan masalah matematika, ilmiah, teknik, dan teknis. Ini memungkinkan pengguna untuk memanipulasi data dan memvisualisasikan data menggunakan berbagai perintah Python tingkat tinggi. SciPy dibangun di atas ekstensi NumPy Python. SciPy juga diucapkan sebagai “Sigh Pi.”
Sub-paket SciPy:
Input/output file – scipy.io
Fungsi Khusus – scipy.special
Operasi Aljabar Linier – scipy.linalg
Interpolasi – scipy.interpolate
Pengoptimalan dan kesesuaian – scipy.optimize
Statistik dan angka acak – scipy.stats
Integrasi Numerik – scipy.integrate
Transformasi Fourier Cepat – scipy.fftpack
Pemrosesan Sinyal – scipy.signal
Manipulasi gambar – scipy.ndimage
Dalam tutorial Python SciPy ini, Anda akan belajar:
Apa itu SciPy?
Mengapa menggunakan SciPy
Numpy VS SciPy
SciPy – Instalasi dan Pengaturan Lingkungan
Paket Input / Output File:
Paket Fungsi Khusus:
Aljabar Linier dengan SciPy:
Transformasi Fourier Diskrit – scipy.fftpack
Pengoptimalan dan Fit di SciPy – scipy.optimize
Algoritma Nelder –Mead:
Pemrosesan Gambar dengan SciPy – scipy.ndimage
Mengapa menggunakan SciPy
SciPy berisi berbagai sub paket yang membantu memecahkan masalah paling umum yang terkait dengan Komputasi Ilmiah.
Paket SciPy dalam Python adalah perpustakaan Ilmiah yang paling banyak digunakan setelah Perpustakaan Ilmiah GNU untuk C/C++ atau Matlab.
Mudah digunakan dan dipahami serta kekuatan komputasi yang cepat.
Dapat beroperasi pada array perpustakaan NumPy.
Numpy VS SciPy
Numpy:
Numpy ditulis dalam C dan digunakan untuk perhitungan matematis atau numerik.
Lebih cepat dari Library Python lainnya
Numpy adalah perpustakaan paling berguna untuk Ilmu Data untuk melakukan perhitungan 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 di Python adalah versi Aljabar Linear berfitur lengkap sementara Numpy hanya berisi beberapa fitur.
Sebagian besar fitur Ilmu Data baru tersedia di Scipy daripada 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 belajar SciPy Python, Anda perlu mengetahui fungsionalitas dasar serta berbagai jenis array NumPy
Cara standar untuk mengimpor modul SciPy dan Numpy:
from scipy import special #same for other modules
import numpy as np
Paket Input / Output File:
Scipy, paket I/O, memiliki berbagai fungsi untuk bekerja dengan format file yang berbeda yaitu Matlab, Arff, Wave, Matrix Market, IDL, NetCDF, TXT, CSV dan format biner.
Mari kita ambil satu contoh format file Python SciPy seperti 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']
Baris 1 &2: Impor pustaka SciPy penting dengan Python dengan paket I/O dan Numpy.
Baris 3 :Buat array 4 x 4 dimensi
Baris 4 :Simpan larik di example.mat mengajukan.
Baris 5: Dapatkan data dari example.mat berkas
Baris 6 :Hasil cetak.
Paket Fungsi Khusus
scipy.special paket berisi banyak fungsi fisika matematika.
Fungsi khusus SciPy meliputi Akar Kubik, Eksponensial, Log sum Eksponensial, Lambert, Permutasi dan Kombinasi, Gamma, Bessel, hipergeometrik, Kelvin, beta, silinder parabola, Eksponensial Kesalahan Relatif, dll.
Untuk deskripsi satu baris semua fungsi ini, ketik 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 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: array([3., 4.])
Fungsi Eksponensial:
Fungsi eksponensial menghitung 10**x elemen-bijaksana.
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.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 Eksponensial Jumlah Log
Log Sum Eksponensial menghitung log elemen input jumlah eksponensial.
Sintaks :
scipy.special.logsumexp(x)
Fungsi Bessel
Fungsi kalkulasi orde bilangan bulat ke-n
Sintaks :
scipy.special.jn()
Aljabar Linier dengan SciPy
Aljabar Linier SciPy adalah implementasi dari perpustakaan BLAS dan ATLAS LAPACK.
Kinerja Aljabar Linier sangat cepat dibandingkan dengan BLAS dan LAPACK.
Rutin aljabar linier menerima objek larik dua dimensi dan keluarannya juga larik dua dimensi.
Sekarang mari kita lakukan beberapa tes dengan scipy.linalg,
Menghitung determinan 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 kebalikan dari matriks persegi apa pun.
Mari kita 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 )
Masalah paling umum dalam aljabar linier adalah nilai eigen dan vektor eigen yang dapat diselesaikan dengan mudah menggunakan eig() fungsi.
Sekarang mari kita cari nilai Eigen dari (X ) dan berkorespondensi dengan vektor eigen dari matriks persegi dua dimensi.
Contoh
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)
DFT adalah teknik matematika yang digunakan untuk mengubah data spasial menjadi data frekuensi.
FFT (Fast Fourier Transformation) adalah algoritma untuk menghitung DFT
FFT diterapkan ke array multidimensi.
Frekuensi menentukan jumlah sinyal atau panjang gelombang dalam periode waktu tertentu.
Contoh: Ambil gelombang dan tunjukkan menggunakan perpustakaan Matplotlib. kita ambil contoh fungsi periodik sederhana dari 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 5 Hz dan sinyalnya berulang dalam 1/5 detik – disebut sebagai periode waktu tertentu.
Sekarang mari kita gunakan gelombang sinusoidal 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 melihat dengan jelas bahwa output adalah array satu dimensi.
Input yang berisi nilai kompleks adalah nol kecuali dua titik.
Dalam contoh DFT kami memvisualisasikan besarnya sinyal.
Optimasi dan Fit di SciPy – scipy.optimize
Optimasi menyediakan algoritme yang berguna untuk meminimalkan penyesuaian kurva, multidimensi atau skalar dan pemasangan akar.
Mari kita ambil contoh Fungsi Skalar, untuk menemukan 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
array([-1.67096375])
Dalam contoh ini, optimasi dilakukan dengan bantuan algoritma gradient descent dari titik awal
Tapi kemungkinan masalahnya adalah minima lokal, bukan minima global. Jika kita tidak menemukan tetangga minimum global, maka kita perlu menerapkan optimasi global dan menemukan fungsi minimum global yang digunakan sebagai basinhopping() yang menggabungkan pengoptimal lokal.
scipy.ndimage adalah submodul dari SciPy yang sebagian besar digunakan untuk melakukan operasi terkait gambar
ndimage berarti gambar berdimensi “n”.
SciPy Image Processing menyediakan transformasi Geometris (rotate, crop, flip), image filtering (sharp and de nosing), gambar tampilan, segmentasi gambar, klasifikasi dan ekstraksi fitur.
Paket MISC di SciPy berisi gambar prebuilt yang dapat digunakan untuk melakukan tugas manipulasi gambar
Contoh: Mari kita ambil contoh transformasi geometrik 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 Membalik 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
Saat kita mengintegrasikan fungsi apa pun yang tidak memungkinkan integrasi analitik, kita perlu mengaktifkan integrasi numerik
SciPy menyediakan fungsionalitas untuk mengintegrasikan fungsi dengan integrasi numerik.
scipy.integrate library memiliki aturan integrasi tunggal, ganda, tiga, ganda, kuadrat Gaussian, Romberg, Trapesium, dan Simpson.
Contoh: Sekarang ambil contoh Integrasi Tunggal
Di 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.333333333333333337, 3.700743415417189e-15)
Di sini fungsi mengembalikan dua nilai, di mana nilai pertama adalah integrasi dan nilai kedua adalah kesalahan yang diperkirakan dalam integral.
Contoh:Sekarang ambil contoh SciPy dari integrasi ganda. Kami 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 bahwa output di atas sama dengan yang sebelumnya.
Ringkasan
SciPy(diucapkan sebagai “Sigh Pi”) adalah library berbasis Python Open Source, yang digunakan dalam matematika, komputasi ilmiah, Teknik, dan komputasi teknis.
SciPy berisi berbagai sub-paket yang membantu memecahkan masalah paling umum yang terkait dengan Komputasi Ilmiah.