Могу ли я очистить массив без цикла? - PullRequest
6 голосов
/ 02 декабря 2010

Возможно, не такая уж и большая проблема, но мне больно разбираться в следующем:

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

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

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

Ответы [ 2 ]

9 голосов
/ 02 декабря 2010
import numpy as np
deltas=np.diff(data)
deltas[deltas<0]=0
deltas[deltas>100]=0

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

deltas[(deltas<0) | (deltas>100)]=0
1 голос
/ 02 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...