반응형
numpy 배열에서 n번째 항목마다 하위 샘플링
저는 numpy 초보자이고 긴 numpy 배열에서 데이터를 추출하려고 합니다.어레이의 정의된 위치에서 시작하여 해당 위치에서 어레이의 끝까지 모든 n번째 데이터 지점을 서브샘플링해야 합니다.
기본적으로 내가 그랬다면,
a = [1,2,3,4,1,2,3,4,1,2,3,4....]
나는 이것을 서브샘플링하여 시작하고 싶습니다.a[1]
그리고 거기서 네 번째 지점마다 샘플을 채취하여 비슷한 것을 생산합니다.
b = [2,2,2.....]
너는 Numpy의 슬라이싱을 사용할 수 있어, 간단하게.start:stop:step
.
>>> 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])
이것은 일정한 시간은 아니지만 결과는 원래 배열과 연결되지 않습니다.또한 복사본은 메모리에 연속되어 있으므로 일부 작업을 더 빠르게 수행할 수 있습니다.
베자드 누리의 대답을 보완합니다.최종 요소의 수를 제어하고 하위 표본 사이의 고정 단계를 제어하는 대신 항상 미리 정의된 값으로 고정되도록 하려면 numpy의 linspace 방법과 정수 반올림을 사용할 수 있습니다.
예를 들어, num_delay=4:
>>> a
array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> choice = np.round(np.linspace(1, len(a)-1, num=4)).astype(int)
>>> a[choice]
array([ 2, 5, 7, 10])
또는 일반적으로 최종 시작점/끝점이 있는 배열을 서브샘플링합니다.
>>> import numpy as np
>>> np.round(np.linspace(0, len(a)-1, num=4)).astype(int)
array([0, 3, 6, 9])
>>> np.round(np.linspace(0, len(a)-1, num=15)).astype(int)
array([0, 1, 1, 2, 3, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9])
언급URL : https://stackoverflow.com/questions/25876640/subsampling-every-nth-entry-in-a-numpy-array
반응형
'source' 카테고리의 다른 글
최대 절전 모드의 기준 이해#setMaxResults (0) | 2023.07.21 |
---|---|
Oracle 복합 기본 키/외부 키 질문 (0) | 2023.07.21 |
Oracle에서 마지막으로 실행된 SQL 문을 가져오고 변수 값을 바인딩하는 방법 (0) | 2023.07.21 |
Spring Boot 2 - 콩이 초기화되기 전에 조치를 취합니다. (0) | 2023.07.21 |
비어 있지 않은 오라클의 기존 테이블에 자동 증분 ID를 추가하는 중 (0) | 2023.07.21 |