Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Meningkatkan Pelaksanaan Penapis Purata Bergerak dengan Trik Langkah?

Bagaimana untuk Meningkatkan Pelaksanaan Penapis Purata Bergerak dengan Trik Langkah?

Susan Sarandon
Susan Sarandonasal
2024-10-19 10:02:30321semak imbas

How to Enhance Moving Average Filter Implementation with Stride Tricks?

Menggunakan Trik Langkah untuk Pelaksanaan Penapis Purata Pergerakan yang Cekap

Siasatan ini meneroka penggunaan helah langkah untuk membangunkan penapis purata bergerak yang lebih cekap daripada kaedah berasaskan lilitan yang diterangkan dalam catatan sebelumnya. Matlamatnya adalah untuk menapis tatasusunan titik terapung yang besar untuk tugasan yang scipy.ndimage.filters.convolve agak perlahan.

Pendekatan awal menggunakan helah langkah untuk menjana satu siri tatasusunan yang mewakili bahagian atas, tengah dan bawah baris kernel penapis 3x3. Tatasusunan ini kemudiannya dijumlahkan dan dipuratakan untuk menghasilkan output penapis bagi setiap piksel. Walau bagaimanapun, penyoal mencari kaedah yang lebih cekap yang secara langsung boleh mendapatkan jumlah atau nilai individu bagi elemen kernel untuk keseluruhan tatasusunan.

Pendekatan Yang Diperbaiki Menggunakan Trik Langkah Berbilang Dimensi

Penyelesaian yang dipertingkatkan melibatkan penggunaan helah langkah berbilang dimensi untuk mencipta paparan tatasusunan asal di mana setiap elemen mewakili tetingkap bergerak dengan saiz yang dikehendaki. Ini membolehkan untuk menggunakan fungsi arbitrari pada paksi terakhir beberapa kali, mengira purata bergerak atau ukuran statistik lain yang dikehendaki pada tetingkap gelongsor.

Contoh Kod

<code class="python">import numpy as np

def rolling_window(array, window):
    """Multidimensional moving window function"""
    # Validate window dimensions
    if not hasattr(window, '__iter__'):
        return rolling_window_lastaxis(array, window)
    for i, win in enumerate(window):
        if win > 1:
            array = array.swapaxes(i, -1)
            array = rolling_window_lastaxis(array, win)
            array = array.swapaxes(-2, i)
    return array

filtsize = (3, 3)
array = np.arange(100).reshape((10, 10))
windowed_array = rolling_window(array, filtsize)
blurred_array = windowed_array.mean(axis=-1).mean(axis=-1)</code>

Kelebihan Penyelesaian Dipertingkat

  • Penjanaan terus tetingkap bergerak menggunakan helah langkah, menghapuskan keperluan untuk langkah perantaraan.
  • Kesesuaian pada tatasusunan berbilang dimensi, membenarkan untuk penapisan yang cekap di sepanjang berbilang paksi.
  • Vektorisasi operasi tetingkap bergerak, menyebabkan masa pengiraan dikurangkan dengan ketara.

Penghadan

Walaupun demikian kelebihan, adalah penting untuk ambil perhatian bahawa menggunakan helah langkah untuk tetingkap bergerak multidimensi boleh membawa kepada peningkatan penggunaan memori. Oleh itu, pertimbangan yang teliti harus diberikan kepada sumber yang tersedia dan saiz tatasusunan input.

Perbandingan dengan scipy.ndimage

Sementara helah langkah menawarkan faedah fleksibiliti dan vektorisasi , fungsi scipy.ndimage biasanya lebih cekap memori dan dioptimumkan untuk tugas pemprosesan imej berbilang dimensi. Untuk tatasusunan yang besar, scipy.ndimage.uniform_filter disyorkan sebagai pilihan yang lebih pantas dan lebih mantap untuk menggunakan penapis purata bergerak.

Atas ialah kandungan terperinci Bagaimana untuk Meningkatkan Pelaksanaan Penapis Purata Bergerak dengan Trik Langkah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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