효율적인 이동 평균 필터 구현을 위한 스트라이드 트릭 사용
이 조사에서는 스트라이드 트릭을 사용하여 보다 효율적인 이동 평균 필터를 개발하는 방법을 탐구합니다. 이전 게시물에서 설명한 컨볼루션 기반 방법입니다. 목표는 scipy.ndimage.filters.convolve가 상대적으로 느린 작업에 대해 대규모 부동 소수점 배열을 필터링하는 것입니다.
초기 접근 방식에서는 스트라이드 트릭을 사용하여 상단, 중간 및 하단을 나타내는 일련의 배열을 생성했습니다. 3x3 필터 커널 행. 그런 다음 이러한 배열을 합산하고 평균하여 각 픽셀에 대한 필터 출력을 생성했습니다. 그러나 질문자는 전체 배열에 대한 커널 요소의 합계 또는 개별 값을 직접 얻을 수 있는 보다 효율적인 방법을 모색했습니다.
다차원 스트라이드 트릭을 사용한 향상된 접근 방식
향상된 솔루션에는 다차원 보폭 트릭을 적용하여 각 요소가 원하는 크기의 움직이는 창을 나타내는 원본 배열의 보기를 만드는 것이 포함됩니다. 이를 통해 마지막 축에 임의의 함수를 여러 번 적용하여 슬라이딩 창에서 이동 평균 또는 기타 원하는 통계 측정값을 효과적으로 계산할 수 있습니다.
코드 예
<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>
향상된 솔루션의 장점
제한 사항
이에도 불구하고 장점으로는 다차원 이동 창에 보폭 트릭을 사용하면 메모리 사용량이 증가할 수 있다는 점에 유의하는 것이 중요합니다. 따라서 사용 가능한 리소스와 입력 배열의 크기를 신중하게 고려해야 합니다.
scipy.ndimage와의 비교
스트라이드 트릭은 유연성과 벡터화 이점을 제공하지만 , scipy.ndimage 함수는 일반적으로 메모리 효율성이 더 높으며 다차원 이미지 처리 작업에 최적화되어 있습니다. 대규모 배열의 경우 이동 평균 필터를 적용하기 위한 더 빠르고 강력한 옵션으로 scipy.ndimage.uniform_filter를 권장합니다.
위 내용은 Stride 트릭을 사용하여 이동 평균 필터 구현을 향상시키는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!