Я пытаюсь изменить только нулевые значения массива, индекс которого (+ - 1) находится между другими индексами ненулевых значений.
Input:
a = pandas.Series(np.array[0,0,-2,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,-1,0])
Desired output:
[0,0,-2,0,0,0,999,0,0,0,5,0,0,0,999,0,0,0,-1,0]
Я решил проблему очень неэффективно с помощью цикла for, который завершается
Моя цель - сделать это с помощью numpy.where, но у меня нет идеи управлять индексами
margen = 1
extra_forc = 100
for i in range(extra_forc, len(a)-extra_forc):
if a.values[i] != 0: continue
past = np.nonzero(a.values[i-extra_forc:i][::-1])[0]
fut = np.nonzero(a.values[i+1:i+1+extra_forc])[0]
if len(past) > 0 and len(fut) > 0:
if abs(np.amin(past) - np.amin(fut)) <= margen:
a.values[i] = 999
Это то, что я сейчас пытаюсь безуспешно:
a = np.where((abs(np.amin(np.nonzero([a.shift(-i) for i in range(extra_forc)])[0], axis=0) - np.amin(np.nonzero([a.shift(i) for i in range(extra_forc)][::-1])[0], axis=0)) < margen), 999, a)