>백엔드 개발 >파이썬 튜토리얼 >NumPy에서 스트라이드를 사용하여 하위 배열을 효율적으로 추출하는 방법은 무엇입니까?

NumPy에서 스트라이드를 사용하여 하위 배열을 효율적으로 추출하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-03 18:05:16270검색

How to Efficiently Extract Subarrays with Strides in NumPy?

Numpy 배열의 스트라이드를 사용한 하위 배열 추출

Python Numpy 배열을 고려해보세요.

a = numpy.array([1,2,3,4,5,6,7,8,9,10,11])

우리는 다음을 목표로 합니다. 스트라이드가 3인 길이가 5인 하위 배열을 추출합니다. 결과는 다음과 같습니다. 다음 내용이 포함된 행렬:

numpy.array([[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11]])

보다 깔끔한 구현

for-loop 접근 방식이 실행 가능하지만 Numpy는 보다 효율적인 방법을 제공합니다.

접근 방식 1: 방송

이 접근 방식은 이점을 제공합니다. 방송:

def broadcasting_app(a, L, S ):  # Window len = L, Stride len/stepsize = S
    nrows = ((a.size-L)//S)+1
    return a[S*np.arange(nrows)[:,None] + np.arange(L)]

접근 방식 2: 보폭 최적화

이 방법은 Numpy의 효율적인 보폭을 활용합니다.

def strided_app(a, L, S ):  # Window len = L, Stride len/stepsize = S
    nrows = ((a.size-L)//S)+1
    n = a.strides[0]
    return np.lib.stride_tricks.as_strided(a, shape=(nrows,L), strides=(S*n,n))

사용법 예:

a = numpy.array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

broadcasting_app(a, L = 5, S = 3)
# [[ 1  2  3  4  5]
#  [ 4  5  6  7  8]
#  [ 7  8  9 10 11]]

strided_app(a, L = 5, S = 3)
# [[ 1  2  3  4  5]
#  [ 4  5  6  7  8]
#  [ 7  8  9 10 11]]

이러한 접근 방식은 Numpy 배열에서 부분 배열을 추출하는 데 더 효율적이고 최적화된 솔루션을 제공합니다.

위 내용은 NumPy에서 스트라이드를 사용하여 하위 배열을 효율적으로 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.