2014-02-20 1 views

ответ

8

Вы близки ... Пройди весь arange, как subslice удалить вместо того, чтобы пытаться удалить каждый элемент в свою очередь, например:

import numpy as np 

x = np.array([0,10,27,35,44,32,56,35,87,22,47,17]) 
x = np.delete(x, np.arange(0, x.size, 3)) 
# [10 27 44 32 35 87 47 17] 
+1

Это на самом деле намного лучше сделано как 'np.delete (x, slice (None, None, 3))'. – Jaime

+0

@Jaime очень приятное наблюдение - не думал проверить, '' np.delete' взял собственные 'slice' объекты! Похоже, что нет никакого преимущества в скорости, хотя даже с миллионом массива элементов (на самом деле это всегда так немного медленнее *), но хорошо знать - спасибо. –

+0

Это странно ... В моей системе удаление каждого третьего элемента массива длиной 1 миллион элементов на срезе примерно на 1,7 раза быстрее: 'a = np.random.rand (1e6); % timeit np.delete (a, np.arange (0, 1e6, 3)) -> 100 циклов, лучше всего 3: 14,5 мс за цикл; % timeit np.delete (a, slice (None, None, 3)) -> 100 циклов, лучше всего 3: 8,41 мс за цикл'. – Jaime

Смежные вопросы