У меня есть Numpy массив вида: arr = 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1
Изменение NumPy массива, чтобы получить минимальное количество значений между элементами
Я хотел бы изменить его таким образом, что существует семь зарегистрировано не менее 0s между любыми двумя 1s. Если есть меньше семи 0, то конвертируйте интервал 1 в 0. Я думаю, что numpy.where мог бы работать здесь, но не уверен, как это сделать в succint, pythonic образом:
Результат должен выглядеть как это:
0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
numpy.where(arr[:] > 1.0, 1.0, 0.0)
'np.where' этого не сделает. Учитывая, насколько по сути проблема с состоянием - проблема в том, что какой-либо 1 стирается, в значительной степени зависит от предыдущих решений о стирании - я сомневаюсь, что есть хороший способ сделать это с помощью операций NumPy. – user2357112
спасибо @ user2357112, поэтому я должен вернуться к циклам? – user308827
Это один из вариантов. Вы также можете попробовать подходы, которые стирают больше элементов, чем необходимо, или попробовать некоторые действительно взломанные вещи с помощью соответствующего метода ufunc 'at' и переходящего окна. – user2357112