6.16. Kurva dan integrasi¶
Halaman matematika mencakup operasi yang mengambil array sebagai input dan menghasilkan array (atau skalar) sebagai output -- aritmetika, reduksi, broadcasting. Halaman ini mencakup kelas operasi yang berbeda: yang memperlakukan array sebagai fungsi yang disampel dan mengajukan pertanyaan tentang fungsi itu sendiri. Menginterpolasi antar sampel, memasang kurva ke sampel tersebut, mengintegrasikan di bawahnya, mengkonvolusi dengan buffer lain.
Semua ini menerima input ndarray dan mengembalikan skalar float atau ndarray float.
6.16.1. Interpolasi¶
interp() melakukan interpolasi linear satu dimensi. xp adalah array 1-D yang meningkat secara monoton dari nilai independen; fp adalah nilai dependen yang sesuai; x adalah tempat interpolant harus dievaluasi:
xp = np.array([0.0, 1.0, 2.0, 3.0])
fp = np.array([10.0, 20.0, 25.0, 30.0])
x = np.array([0.5, 1.5, 2.5])
np.interp(x, xp, fp)
# array([15.0, 22.5, 27.5])
Di luar rentang [xp[0], xp[-1]] hasilnya dipotong ke fp[0] dan fp[-1] masing-masing; kata kunci left= dan right= menggantikan titik ujung tersebut.
Digunakan pada kamera untuk memetakan ulang tabel kalibrasi ke posisi sampel yang sewenang-wenang -- tabel suhu-ke-tegangan dari termistor, kurva respons piksel non-linear, pencarian gamma per kanal. Satu panggilan library, satu kali penelusuran atas input, tanpa loop Python.
6.16.2. Pencocokan dan evaluasi polinomial¶
polyfit() memasang polinomial derajat deg ke titik data (x, y) dengan kuadrat terkecil dan mengembalikan koefisiennya (derajat tertinggi lebih dulu):
x = np.array([0.0, 1.0, 2.0, 3.0, 4.0])
y = np.array([0.0, 1.1, 3.9, 9.1, 15.8])
coeffs = np.polyfit(x, y, 2)
# array([1.0, 0.0, 0.0]) (approximately)
Ketika x dihilangkan, range(len(y)) digunakan -- berguna untuk memasang polinomial cepat ke buffer yang disampel secara teratur tanpa sumbu x yang terkait:
np.polyfit(y, 2)
polyval() mengevaluasi polinomial yang koefisiennya adalah p pada x. Input x dapat berupa skalar (mengembalikan float) atau ndarray (mengembalikan ndarray):
p = np.polyfit(x, y, 2)
fitted = np.polyval(p, x)
Pasangan alami adalah memanggil polyfit sekali pada saat kalibrasi, menyimpan koefisien, dan memanggil polyval untuk mengevaluasi kurva yang dihasilkan setiap bingkai. Langkah evaluasi polinomial adalah segelintir operasi float per sampel, yang murah bahkan pada kamera terkecil sekalipun.
6.16.3. Konvolusi¶
convolve() mengembalikan konvolusi linear diskrit panjang penuh dari dua array 1-D. Hanya mode full yang diimplementasikan; panjang output adalah len(a) + len(v) - 1. Iris hasilnya untuk efek yang sama seperti mode same dan valid yang ditawarkan numpy desktop:
a = np.array([1.0, 2.0, 3.0])
v = np.array([0.5, 0.5])
np.convolve(a, v)
# array([0.5, 1.5, 2.5, 1.5])
Berguna untuk filter FIR pendek dan kernel pemulusan (kotak, segitiga, gaussian) di mana menyiapkan rantai SOS terlalu berlebihan. Waktu proses sebanding dengan hasil kali panjang dua array -- baik untuk kernel pendek tetapi dengan cepat menjadi lebih mahal dibanding konvolusi FFT untuk kernel yang panjang.
6.16.4. Integrasi trapesium¶
trapz() mengintegrasikan fungsi yang disampel menggunakan aturan trapesium komposit:
x = np.linspace(0, np.pi, num=128)
y = np.sin(x)
np.trapz(y, x) # ~ 2.0
Teruskan dx= ketika spasi sampel seragam dan hanya langkahnya yang penting; teruskan x= ketika sampel tidak berjarak merata. Panggilan yang tepat untuk mengintegrasikan data sensor yang sudah ditangkap, di mana bentuk analitik tidak tersedia.
Untuk data sampel yang telah dibatasi frekuensinya (buffer audio setelah filter anti-aliasing, misalnya), aturan trapesium konvergen sebagai kuadrat jumlah sampel, yang berarti menggandakan panjang buffer memotong error sebesar faktor empat.
Ketika integrand bukan buffer sampel melainkan fungsi Python yang dapat dievaluasi aplikasi pada titik-titik sewenang-wenang, keluarga solver yang berbeda adalah pilihan yang tepat.