Даны два массива одинаковой длины, один содержит данные, другой содержит результаты, но изначально установлен на ноль, например ::10000
a = numpy.array([1, 0, 0, 1, 0, 1, 0, 0, 1, 1])
b = numpy.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
Я бы хотел вычислить сумму всех возможных подмножеств трех смежных элементов в a. Если сумма равна 0 или 1, три соответствующих элемента в b остаются без изменений; только если сумма превышает 1, три соответствующих элемента в b устанавливаются в 1, так что после вычисления b становится
array([0, 0, 0, 1, 1, 1, 0, 1, 1, 1])
Простой цикл выполнит это:
for x in range(len(a)-2):
if a[x:x+3].sum() > 1:
b[x:x+3] = 1
После этого b имеет желаемую форму.
Я должен сделать это для большого количества данных, поэтому скорость - это проблема. Есть ли в NumPy более быстрый способ выполнить вышеуказанную операцию?
(я понимаю, что это похоже на свертку, но не совсем то же самое).