GNU/Linux >> Belajar Linux >  >> Ubuntu

Tutorial Python SciPy - Panduan untuk Pemula

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

Ubuntu
  1. Panduan terminal Linux untuk pemula

  2. Tutorial perintah cd Linux untuk pemula (8 Contoh)

  3. Tutorial Perintah Tanggal Linux untuk Pemula (8 Contoh)

  1. Panduan Streaming Spark untuk Pemula

  2. Tutorial Jenkins:Dasar-dasar untuk Pemula

  3. Cara Menginstal MongoDB di Ubuntu 18.04 – Panduan untuk Pemula

  1. Tutorial Podman - Dasar-dasar untuk Pemula

  2. Tutorial konfigurasi jaringan Netplan untuk pemula

  3. Tutorial perintah comm Linux untuk pemula (5 contoh)