Вопрос: Могу ли я очистить массив numpy без цикла?


Возможно, это не так уж и важно, но это ломает мое сердце, чтобы следовать этому:

deltas = data[1:] - data[:-1]

с этим:

for i in range(len(deltas)):
        if deltas[i] < 0: deltas[i] = 0
        if deltas[i] > 100: deltas[i] = 0

Для этого конкретного примера ... есть ли лучший способ сделать очищающую часть?

Вопрос второй части: что, если правила очистки более сложны или менее сложны, чем этот пример. Например, мы можем просто хотеть изменить все отрицательные числа на ноль. Или мы можем сделать более сложное отображение.


6


источник


Ответы:


import numpy as np
deltas=np.diff(data)
deltas[deltas<0]=0
deltas[deltas>100]=0

Также возможно, и немного быстрее

deltas[(deltas<0) | (deltas>100)]=0

9



Попробуйте использовать numpy.vectorize  для применения функции к каждому элементу массива numpy.


1