У меня есть 1D массив NumPy, содержащий некоторые «плохие» значения.Я хочу отбросить их.
Соседи каждого плохого значения являются просто "непослушными", но я также хочу отбросить их.
Надежный тест для плохих значений состоит в том, чтобы спросить:
arr<0.1
Однако, единственный надежный тест (который я могу придумать) для непослушного значения - это то, что он находится рядом с плохим значением.
Я использую следующую стратегию дляисключить плохие и вредные значения:
import numpy as np
c = np.random.random(100) #Construct test data
who = np.where(c<0.1)[0] #Reliable test for bad values
c[who] = 0 #Zero bad values
#Add and subtract from the indices of the bad values to cull
#their neighbours
wht = who-1; wht = wht[np.logical_and(0<wht,wht<len(c))]; c[wht]=0
wht = who+1; wht = wht[np.logical_and(0<wht,wht<len(c))]; c[wht]=0
wht = who+2; wht = wht[np.logical_and(0<wht,wht<len(c))]; c[wht]=0
wht = who-2; wht = wht[np.logical_and(0<wht,wht<len(c))]; c[wht]=0
К сожалению, вышесказанное довольно медленно.
Есть ли более быстрый способ выполнить эту или аналогичную операцию?