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


95

저는 numpy 초보자이며 긴 numpy 배열에서 일부 데이터를 추출하려고합니다. 내가해야 할 일은 배열의 정의 된 위치에서 시작한 다음 배열이 끝날 때까지 해당 위치에서 n 번째 데이터 포인트마다 서브 샘플링하는 것입니다.

기본적으로 내가 가지고 있다면

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

나는 이것을 서브 샘플링하여 시작하고 a[1]거기에서 매 4 점마다 샘플링하여 다음과 같은 것을 생성하고 싶습니다.

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

답변:


162

numpy의 slicing 을 간단히 사용할 수 있습니다 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])

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


1
참조 / 값 사본에 대해 경고 해 주셔서 감사합니다. 난 그렇지 않으면 확실히 함정에 빠지지 것입니다
영원히
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.