Penulisan untuk menguji apakah suatu titik berada dalam ruang lambung, menggunakan scipy.optimize.minimize.Berdasarkan jawaban user1071136. Show
Memang berjalan jauh lebih cepat jika Anda menghitung lambung cembung, jadi saya menambahkan beberapa baris untuk orang yang ingin melakukan itu. Saya beralih dari pemindaian graham (hanya 2D) ke algoritma qhull yang cerdik. dokumentasi
scipy.optimize.minimize:
Tes pada beberapa sampel data:
Keluaran:
Visualisasikan:
Dalam tutorial ini, Anda akan belajar: SciPy adalah perpustakaan berbasis Python Open Source, yang digunakan dalam matematika, komputasi ilmiah, Teknik, dan komputasi teknis. SciPy juga diucapkan sebagai Sigh Pi. Sub-paket SciPy: lumpuh: SciPy: Anda juga dapat menginstal SciPy di Windows melalui pip Instal Scipy di Linux Instal SciPy di Mac Sebelum
mulai belajar SciPy, Anda perlu mengetahui fungsionalitas dasar serta berbagai jenis array NumPy Cara standar untuk mengimpor modul infSciPy 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 yang biasa digunakan MatLab: apa itu koin bcd? 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
Paket Fungsi Khusus
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. Sintaksis: 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+1] 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 Log Sum Fungsi EksponensialLog Sum Eksponensial menghitung log elemen input jumlah eksponensial. Sintaks: scipy.special.logsumexp(x) Fungsi BesselFungsi perhitungan urutan bilangan bulat ke-n Sintaks: scipy.special.jn() Aljabar Linier dengan SciPy
Sekarang mari kita lakukan beberapa tes dengan scipy.linalg, Menghitung penentu 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 - bahan formula keseimbangan darah scipy.linalg.inv() Matriks Terbalik dari Scipy menghitung kebalikan 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()
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) Keluaran: [ 9.+0.j -1.+0.j] #eigenvalues [ [ 0.70710678 -0.5547002 ] #eigenvectors [ 0.70710678 0.83205029] ] Transformasi Fourier Diskrit – scipy.fftpack
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. Frekuensi adalah 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:
Optimasi dan Fit di SciPy – scipy.optimize
%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])
mengoptimalkan.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:
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
Contoh: Mari kita ambil contoh transformasi geometris dari 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
Contoh: Sekarang ambil contoh dari Integrasi Tunggal
Di Sini ke 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) cara membeli token gmr 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 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
Terima kasih telah membaca! #python #Python SciPy #scipy #tutorial |