Rumah > pembangunan bahagian belakang > Tutorial Python > Cara menggunakan fungsi lilitan Python

Cara menggunakan fungsi lilitan Python

WBOY
Lepaskan: 2023-05-20 21:31:11
ke hadapan
1780 orang telah melayarinya

Fungsi lilitan

python menyediakan pelbagai skema lilitan Sebagai perbandingan, fungsi lilitan yang ditakrifkan dalam ndimage lebih berfungsi daripada numpy dan signal Konvolusi dalam adalah lebih rumit sedikit. , yang boleh dilihat hanya daripada bilangan parameter input

numpy.convolve(a, v, mode='full')
scipy.ndimage.convolve1d(input, weights, axis=-1, output=None, mode='reflect', cval=0.0, origin=0)

scipy.signal.convolve(in1, in2, mode='full', method='auto')
scipy.ndimage.convolve(input, weights, output=None, mode='reflect', cval=0.0, origin=0)
Salin selepas log masuk

Dua yang pertama ialah fungsi konvolusi 1 dimensi, dan ndimage boleh melakukan tatasusunan berbilang dimensi di sepanjang paksi koordinat tunggal menjalankan operasi konvolusi, dan dua yang terakhir ialah lilitan pelbagai dimensi.

Fungsi lilitan dalam numpy dan isyarat mempunyai tiga mod, yang digunakan untuk melaraskan ciri tepi selepas lilitan Jika dimensi dua objek lilitan input ialah N NN dan M MM, maka Hasil keluaran ini tiga mod ialah

  • full: Dimensi output ialah N + M &tolak; bertindih, jadi kesan tepi adalah jelas.

  • same: Dimensi output maks ⁡ ( M , N ) maks(M,N)max(M,N), kesan tepi masih kelihatan

  • valid: Dimensi output ∣ M &tolak; N ∣ |M-N|∣M&tolak;N∣, hanya mengembalikan kawasan bertindih sepenuhnya, yang bersamaan dengan menghapuskan kadar mata dengan kesan tepi

ndimage dalam convolve mengembangkan imej untuk kesan tepi, dan modenya menentukan format pelapik selepas pengembangan Katakan tatasusunan yang akan ditapis ialah a b c d, kemudian dalam Dalam berbeza mod, tepi diisi seperti berikut


左侧填充数据右侧填充
reflectd c b aa b c dd c b a
constantk k k ka b c dk k k k
nearesta a a aa b c dd d d d
mirrord c ba b c dc b a
wrapa b c da b c da b c d

, dengan k ditetapkan oleh parameter cval.

Lima kaedah mengubah suai sempadan ini sangat biasa dalam fungsi scipy.ndimage, terutamanya fungsi penapis yang melibatkan lilitan, yang merupakan standard.

Ujian perbandingan

Seterusnya, lakukan ujian prestasi untuk fungsi lilitan yang berbeza ini, menggunakan templat 5 &kali; pada kelajuan lilitan dalam pelaksanaan berbeza

import numpy as np
import scipy.signal as ss
import scipy.ndimage as sn
from timeit import timeit


A = np.random.rand(1000,1000)
B = np.random.rand(5,5)

timeit(lambda : ss.convolve(A, B), number=10)
# 0.418
timeit(lambda : sn.convolve(A, B), number=10)
# 0.126
Salin selepas log masuk

Sebagai perbandingan, lilitan dalam ndimage jelas lebih cekap.

Seterusnya, mari kita uji prestasi lilitan satu dimensi

A = np.random.rand(10000)
B = np.random.rand(15)

timeit(lambda : np.convolve(A, B), number=1000)
# 0.15256029999727616
timeit(lambda : ss.convolve(A, B), number=1000)
# 0.1231262000001152
timeit(lambda : sn.convolve(A, B), number=1000)
# 0.09218210000108229
timeit(lambda : sn.convolve1d(A, B), number=1000)
# 0.03915820000111125
Salin selepas log masuk

Sebagai perbandingan, convolve1d sememangnya fungsi lilitan yang menyatakan dengan jelas 1d, dan merupakan yang terpantas, manakala < The fungsi yang disediakan dalam 🎜> adalah yang paling perlahan. numpy

Aplikasi lilitan

Operasi lilitan sering digunakan dalam penapisan imej dan pengekstrakan tepi Contohnya, melalui matriks yang serupa dengan yang di bawah, tepi menegak imej boleh diekstrak.

Cara menggunakan fungsi lilitan Python

Jom buat ujian mudah

from scipy.misc import ascent
import matplotlib.pyplot as plt
img = ascent()
temp = np.zeros([3,3])
temp[:,0] = -1
temp[:,2] = 1

edge = sn.convolve(img, temp)

fig = plt.figure()
ax = fig.add_subplot(121)
ax.imshow(img)
ax = fig.add_subplot(122)
ax.imshow(edge)
plt.show()
Salin selepas log masuk

Atas ialah kandungan terperinci Cara menggunakan fungsi lilitan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan