Подтвердить что ты не робот

Подвыбор каждой n-й записи в массиве numpy

Я начинаю с numpy, и я пытаюсь извлечь некоторые данные из длинного массива numpy. То, что мне нужно сделать, это начать с определенной позиции в моем массиве и затем подвыбрать каждую n-ю точку данных из этой позиции до конца моего массива.

в основном, если у меня

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

Я хочу подзапросить это, чтобы начать с a[1], а затем пробовать каждую четвертую точку оттуда, чтобы создать что-то вроде

b = [2,2,2.....]
4b9b3361

Ответ 1

Вы можете использовать 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])

Это не постоянное время, но результат не привязан к исходному массиву. Копия также смежна в памяти, что может сделать некоторые операции над ней быстрее.