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

Cara menggunakan fungsi lilitan Python

WBOY
WBOYke hadapan
2023-05-20 21:31:111730semak imbas

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)

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


左侧填充 数据 右侧填充
reflect d c b a a b c d d c b a
constant k k k k a b c d k k k k
nearest a a a a a b c d d d d d
mirror d c b a b c d c b a
wrap a b c d a b c d a 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

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

Sebagai perbandingan, convolve1d sememangnya fungsi lilitan yang menyatakan dengan jelas 1d, dan merupakan yang terpantas, manakala 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()

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

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam