Pendahuluan
Komputasi adalah bagian penting dari penelitian ilmiah. Masalah matematika, teknik, ilmiah, dan masalah teknis lainnya rumit dan membutuhkan daya dan kecepatan komputasi. Python menyediakan library SciPy untuk memecahkan masalah teknis secara komputasi.
Artikel ini menyajikan tutorial SciPy dan cara mengimplementasikan kode dalam Python dengan contoh.
Prasyarat
- Menginstal Python 2.7 atau Python 3
- Lingkungan Python untuk menjalankan kode.
- Perpustakaan SciPy terpasang.
- NumPy library diinstal (Ikuti panduan kami:Cara Memasang NumPy).
- Library Matplotlib diinstal untuk membuat plot (opsional).
Apa itu SciPy?
SciPy (Ilmu entific Py thon) adalah modul komputasi ilmiah sumber terbuka untuk Python. Berdasarkan NumPy, SciPy menyertakan alat untuk memecahkan masalah ilmiah. Para ilmuwan menciptakan perpustakaan ini untuk memenuhi kebutuhan mereka yang terus meningkat untuk memecahkan masalah yang kompleks.
SciPy vs NumPy
Pustaka NumPy (Num erical Py thon) melakukan perhitungan numerik. Para ilmuwan menggunakan perpustakaan ini untuk bekerja dengan array karena NumPy mencakup penggunaan dasar dalam ilmu data, statistik, dan matematika.
SciPy mencakup perhitungan dan fungsi lanjutan. Pustaka ini menambahkan lebih banyak fitur ilmu data, semua fungsi aljabar linier, dan algoritme ilmiah standar.
Mengapa Menggunakan SciPy?
Pustaka SciPy dibangun di atas NumPy dan beroperasi pada array. Kekuatan komputasinya cepat karena NumPy menggunakan C untuk evaluasi.
Tumpukan ilmiah Python mirip dengan MATLAB, Oktaf, Scilab, dan Fortran. Perbedaan utamanya adalah Python mudah dipelajari dan ditulis.
Subpaket SciPy
Pustaka SciPy memiliki grup subpaket yang berbeda. Ada dua cara untuk mengimpor subpaket dari modul SciPy:
import scipy.<sub package name> as <alias>
Atau sebagai alternatif:
from scipy import <sub package name> as <alias>
Dalam kedua metode pengimporan, alias bersifat opsional.
Fungsi SciPy
SciPy menyertakan banyak fungsi larik utama yang tersedia di NumPy dan beberapa modul yang umum digunakan dari subpaket SciPy.
Untuk mengimpor fungsi dari subpaket, gunakan:
from scipy.<subpackage> import <function>
Fungsi Dasar
Untuk mendapatkan bantuan dan informasi untuk fungsi SciPy apa pun, gunakan help()
perintah:
help(<name of function>)
help()
perintah tidak membutuhkan parameter. Setelah mengeksekusi tanpa parameter, sebuah prompt akan muncul di mana Anda memasukkan nama fungsi.
Cara cepat lainnya untuk mendapatkan bantuan dengan perintah apa pun dengan Python adalah dengan menulis nama perintah, memberi tanda tanya di akhir, dan menjalankan kodenya.
Fungsi Khusus
Fungsi khusus dalam modul SciPy mencakup komputasi dan algoritma yang umum digunakan. Semua fungsi khusus menerima array NumPy sebagai input. Perhitungannya berdasarkan elemen.
Untuk mengimpor special
subpaket, gunakan:
import scipy.special as special
Atau sebagai alternatif:
from scipy import special
Untuk mengimpor fungsi tertentu dari special
subpaket, gunakan:
from scipy.special import <function name>
Faktorial
Evaluasi faktorial bilangan apa pun dengan menjalankan:
special.factorial(<integer or array>)
Misalnya, untuk mencari faktorial dari sepuluh, gunakan:
special.factorial(10)
Permutasi dan Kombinasi
Untuk mencari jumlah permutasi, gunakan:
special.perm(<number of elements>, <number of elements taken>)
Misalnya, untuk melihat jumlah permutasi dari tiga elemen yang diambil dua sekaligus:
special.perm(6,2)
Demikian pula, temukan jumlah kombinasi dengan:
special.comb(<number of elements>, <number of elements taken>, repetition=<True or False>)
Untuk mencari jumlah kombinasi dari tiga elemen yang diambil dua sekaligus dengan pengulangan, masukkan:
special.comb(6,2, repetition=True)
Permutasi dan kombinasi digunakan dalam algoritme pengurutan ilmu komputer.
Fungsi Eksponensial
Fungsi eksponensial mengevaluasi eksponen untuk basis yang berbeda.
Hitung eksponen dari basis sepuluh dengan:
special.exp10(<integer or array>)
Misalnya:
special.exp10([0,1,2])
Ilmu komputer sering menggunakan fungsi eksponensial dari basis dua:
special.exp2(<integer or array>)
Hitung pangkat sepuluh dari basis dua dengan:
special.exp2(10)
Jumlah Eksponen Logaritmik
Jumlah Eksponensial Logaritmik (LSE atau LogSumExp) adalah perkiraan yang digunakan oleh algoritme pembelajaran mesin. Hitung LSE dengan:
special.logsumexp(<integer or array>)
Fungsi Bessel
Fungsi Bessel muncul dalam perambatan gelombang, pemrosesan sinyal, dan masalah potensial statis. Temukan fungsi Bessel jenis pertama dengan:
special.jn(<integer order>, <integer or array>)
Manfaatkan tumpukan penuh untuk memvisualisasikan fungsi Bessel. Untuk menemukan fungsi Bessel orde kedua dari jenis pertama, gunakan:
#import stack
import scipy.special as special
import matplotlib.pyplot as plt
import numpy as np
#The X-axis
x = np.linspace(1,50,100)
#Bessel function of the first kind order two
jn1 = special.jn(2,x)
Gambarkan hasilnya:
#Plotting
plt.title('Bessel function first kind order two')
plt.plot(x, jn1)
Fungsi Integrasi dan ODE
SciPy menyediakan subpaket untuk perhitungan dengan integral tertentu. Untuk mengimpor integrate
subpaket, gunakan:
import scipy.integrate as integrate
Atau sebagai alternatif:
from scipy import integrate
Impor fungsi tertentu dari sub-paket integrate
dengan:
from scipy.integrate import <function name>
Integrasi Umum
Hitung integral variabel tunggal dengan quad
fungsi dari integrate
subpaket:
integrate.quad(<function>, <lower limit>, <upper limit>)
function
input didefinisikan menggunakan fungsi lambda.
Misalnya, untuk menghitung integral tentu dari fungsi x+1 antara nol dan satu:
from scipy import integrate
f = lambda x: x+1
integrate.quad(f, 0, 1)
Output menunjukkan dua nilai. Nilai pertama adalah integral yang dievaluasi, dan yang kedua adalah kesalahan estimasi.
Fungsi Optimasi
SciPy memiliki subpaket pengoptimalan untuk menemukan fungsi minimum atau maksimum. optimize
subpaket mencakup pemecah dan algoritme untuk menemukan nilai optimal lokal dan global.
Untuk mengimpor subpaket pengoptimalan:
from scipy import optimize
Atau gunakan:
import scipy.optimize as optimize
Untuk mengimpor fungsi tertentu dari sub-paket optimize
, jalankan:
from scipy.optimize import <function name>
Meminimalkan Fungsi
Menemukan fungsi minimum digunakan dalam pembelajaran mesin untuk menurunkan kerugian (atau kesalahan) algoritme.
Misalnya, Anda dapat membuat fungsi dan menemukan minimum. Untuk melakukannya, gunakan fmin
fungsi dari optimize
subpaket di SciPy:
#Import stack
import numpy as np
from scipy import optimize
#Defining inverse sine function
def f(x):
return -np.sin(x)
#X-axis
x = np.linspace(0,5,100)
#Starting point
start = 3
#Simplex algorithm for optimization
optimized = optimize.fmin(f,start)
Untuk memplot hasilnya, jalankan:
import matplotlib.pyplot as plt
plt.plot(x, f(x))
plt.scatter(start,f(start))
plt.scatter(optimized, f(optimized))
plt.legend(['Function -sin(x)', 'Starting point', 'Optimized minimum'])
Fungsi Transformasi Empat Empat
SciPy menyertakan subpaket untuk fungsi transformasi Fourier yang disebut fftpack
. Transformasi tersebut adalah Transformasi Fourier Diskrit (DFT). Semua transformasi diterapkan menggunakan algoritma Fast Fourier Transformation (FFT).
Untuk mengimpor fftpack
subpaket, gunakan:
import scipy.fftpack as fftpack
Atau:
from scipy import fftpack
Transformasi Fourier Cepat
Sebagai contoh, buat fungsi periodik sebagai jumlah dari tiga gelombang sinus:
import numpy as np
freq_samp = 100
#Time
t = np.linspace(0, 1, freq_samp*2, endpoint = False )
#Frequencies
f1, f2, f3 = 1, 5, 20
#Amplitudes
A1, A2, A3 = 3, 2, 1
x1 = A1*np.sin(f1*2*np.pi*t)
x2 = A2*np.sin(f2*2*np.pi*t)
x3 = A3*np.sin(f3*2*np.pi*t)
#Sum of waves
x = x1+x2+x3
Plot gelombang menggunakan matplotlib
:
import matplotlib.pyplot as plt
plt.subplot(2,1,1)
plt.plot(t,x1,t,x2,t,x3)
plt.subplot(2,1,2)
plt.plot(t,x)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude');
Selanjutnya, terapkan fft
dan fftfreq
fungsi dari fftpack
untuk melakukan transformasi Fourier dari sinyal.
from scipy import fftpack
A = fftpack.fft(x)
freq = fftpack.fftfreq(len(x))*freq_samp*2
Plot hasilnya untuk melihat domain frekuensi:
plt.stem(freq,np.abs(A)/freq_samp,use_line_collection=True)
plt.xlim(-25,25)
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.grid()
Fungsi Pemrosesan Sinyal
Sub-paket signal
termasuk fungsi yang digunakan dalam pemrosesan sinyal. Untuk mengimpor signal
, jalankan:
import scipy.signal as signal
Atau sebagai alternatif:
from scipy import signal
Konvolusi
Tugas umum dalam pemrosesan sinyal adalah konvolusi. Sub-paket SciPy signal
memiliki fungsi convolve
untuk melakukan tugas ini. Misalnya, buat dua sinyal dengan frekuensi berbeda:
import numpy as np
#Time
t = np.linspace(0,1,100)
#Frequency
f1, f2 = 5, 2
#Two signals of different frequencies
first_signal = np.sin(f1*2*np.pi*t)
second_signal = np.sin(f2*2*np.pi*t)
Gambarkan sinyalnya:
import matplotlib.pyplot as plt
#Plotting both signals
plt.subplot(2,1,1)
plt.plot(t, first_signal)
plt.subplot(2,1,2)
plt.plot(t, second_signal)
plt.ylabel('Amplitude')
plt.xlabel('Time (s)')
Impor signal
subpaket dari scipy
. Gunakan convolve
fungsi dari signal
subpaket untuk menggabungkan dua sinyal:
#Importing the signal subpackage
from scipy import signal
#Convolving two signals
convolution = signal.convolve(first_signal, second_signal, mode='same')
Gambarkan hasilnya:
#Plotting the result
plt.plot(t, convolution)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
Fungsi Interpolasi
Interpolasi digunakan dalam bidang analisis numerik untuk menggeneralisasi nilai antara dua titik. SciPy memiliki interpolate
subpaket dengan fungsi dan algoritme interpolasi.
Impor interpolate
subpaket dengan:
import scipy.interpolate as interpolate
Atau:
from scipy import interpolate
Interpolasi Satu Dimensi
SciPy interpolate
subpaket memiliki interp1d
fungsi untuk interpolasi satu dimensi data. Sebagai contoh, buat mainan data menggunakan numpy
:
import numpy as np
#Create toy data
x = np.arange(0,10,0.5)
y = np.sin(x)
Interpolasi data dengan interp1d
dari interpolate
subpaket:
from scipy import interpolate
#Interpolate
f = interpolate.interp1d(x, y)
#Create interpolation function
x_i = np.arange(0,10,3)
y_i = f(x_i)
Gambarkan hasilnya:
#Plot results
plt.scatter(x,y)
plt.plot(x_i, y_i)
plt.legend(['Interpolation', 'Data points'])
Aljabar Linier
SciPy memiliki subpaket aljabar linier berfitur lengkap. Subpaket aljabar linier SciPy dioptimalkan dengan pustaka ATLAS LAPACK dan BLAS untuk komputasi yang lebih cepat.
Untuk mengimpor paket aljabar linier dari SciPy, jalankan:
import scipy.linalg as linalg
Atau gunakan:
from scipy import linalg
Semua fungsi aljabar linier mengharapkan array NumPy untuk input.
Penentu
Hitung determinan matriks dengan det
dari linalg
subpaket:
linalg.det(<numpy array>)
Misalnya:
import numpy as np
#Generate a 2D array
A = np.array([[1,2],[3, 4]])
from scipy import linalg
#Calculate the determinant
linalg.det(A)
Matriks Terbalik
Tentukan matriks invers dengan menggunakan inv
:
linalg.inv(<numpy array>)
Misalnya:
import numpy as np
#Generate a 2D array
A = np.array([[1,2],[3,4]])
from scipy import linalg
#Calculate the inverse matrix
linalg.inv(A)
Vektor Eigen dan Nilai Eigen
Vektor eigen dan nilai eigen adalah metode dekomposisi matriks. Masalah vektor nilai eigen adalah masalah aljabar linier yang umum diterapkan.
eig
fungsi mencari nilai eigen dan vektor eigen suatu matriks:
linalg.eig(<numpy array>)
Output mengembalikan dua array. Yang pertama berisi nilai eigen, dan yang kedua memiliki vektor eigen untuk matriks yang diberikan. Misalnya:
import numpy as np
#Generate a 2D array
A = np.array([[1,2],[3, 4]])
from scipy import linalg
#Calculate the eigenvalues and eigenvectors
linalg.eig(A)
Struktur dan Algoritma Data Spasial
Struktur data spasial adalah objek yang terbuat dari titik, garis, dan permukaan. SciPy memiliki algoritme untuk struktur data spasial karena dapat diterapkan pada banyak disiplin ilmu.
Impor spatial
subpaket dari SciPy dengan:
import scipy.spatial as spatial
Atau:
from scipy import spatial
Contoh penting dari algoritma spasial adalah diagram Voronoi. Untuk sekumpulan titik tertentu, peta Voronoi membagi bidang menjadi beberapa wilayah. Jika titik baru jatuh ke suatu wilayah, titik di wilayah tersebut adalah tetangga terdekat.
Sebagai contoh, buat diagram Voronoi dari dua puluh titik acak:
from scipy.spatial import Voronoi
import numpy as np
points = np.random.rand(20,2)
voronoi = Voronoi(points)
from scipy.spatial import voronoi_plot_2d
fig = voronoi_plot_2d(voronoi,show_vertices=False)
Pemrosesan Gambar
SciPy memiliki subpaket untuk berbagai pemrosesan gambar n-dimensi. Untuk mengimpor ndimage
subpaket, jalankan:
import scipy.ndimage as ndimage
Atau gunakan:
from scipy import ndimage
SciPy misc
subpaket berisi contoh gambar untuk tujuan demonstrasi. Untuk mengimpor misc
subpaket dan tampilkan gambarnya:
from scipy import misc
from matplotlib import pyplot as plt
raccoon = misc.face()
#show image
plt.imshow(raccoon)
plt.show()
Impor ndimage
subpaket dan terapkan uniform_filter
ke gambar. Tunjukkan gambar untuk melihat hasilnya:
from scipy import ndimage
filtered = ndimage.uniform_filter(raccoon)
plt.imshow(filtered)
File IO (Paket Input / Output File)
SciPy memiliki sub-paket input dan output file yang disebut io
. io
subpackage digunakan untuk membaca dan menulis format data dari berbagai program dan bahasa komputasi ilmiah, seperti Fortran, MATLAB, IDL, dll.
Impor io
subpaket dari SciPy dengan:
import scipy.io as sio
Atau gunakan:
from scipy import io as sio