복붙노트

[PYTHON] numpy 배열의 n 번째 항목마다 서브 샘플링

PYTHON

numpy 배열의 n 번째 항목마다 서브 샘플링

저는 초보자입니다. 나는 길고 매끄러운 배열에서 데이터를 추출하려고합니다. 내가해야 할 일은 배열의 정의 된 위치부터 시작한 다음 배열의 끝까지 해당 위치의 모든 n 번째 데이터 포인트를 서브 샘플링하는 것입니다.

기본적으로 내가 가진다면

a = [1,2,3,4,1,2,3,4,1,2,3,4....] 

나는 이것을 [1]에서 시작하여 거기에서 네 번째 점을 모두 샘플링하여 원하는 것과 같은 것을 만들어 내고 싶습니다.

b = [2,2,2.....]

해결법

  1. ==============================

    1.numpy의 슬라이싱을 사용하면 간단하게 시작 : 중지 : 단계.

    numpy의 슬라이싱을 사용하면 간단하게 시작 : 중지 : 단계.

    >>> xs
    array([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4])
    >>> xs[1::4]
    array([2, 2, 2])
    

    이렇게하면 원본 데이터의보기가 만들어 지므로 일정 시간입니다. 또한 원래 배열의 변경 사항을 반영하고 전체 원래 배열을 메모리에 유지합니다.

    >>> a
    array([1, 2, 3, 4, 5])
    >>> b = a[::2]         # O(1), constant time
    >>> b[:] = 0           # modifying the view changes original array
    >>> a                  # original array is modified
    array([0, 2, 0, 4, 0])
    

    위의 사항 중 하나라도 문제가 발생하면 명시 적으로 복사본을 만들 수 있습니다.

    >>> a
    array([1, 2, 3, 4, 5])
    >>> b = a[::2].copy()  # explicit copy, O(n)
    >>> b[:] = 0           # modifying the copy
    >>> a                  # original is intact
    array([1, 2, 3, 4, 5])
    

    이것은 일정한 시간이 아니지만 결과는 원래 배열에 묶여 있지 않습니다. 복사본은 또한 메모리에서 연속적이어서 일부 작업을 더 빨리 수행 할 수 있습니다.

  2. from https://stackoverflow.com/questions/25876640/subsampling-every-nth-entry-in-a-numpy-array by cc-by-sa and MIT license