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:

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:

Transformasi Fourier Diskrit

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:

Transformasi Fourier Diskrit

  • 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:

Optimasi dan Kesesuaian di SciPy

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:

Pemrosesan Gambar dengan SciPy

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:

Pemrosesan Gambar dengan SciPy

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:

Pemrosesan Gambar dengan SciPy

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

Integrasi dengan Scipy

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,

Integrasi dengan Scipy

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 –