Python/NumPy: реализация текущей суммы (но не совсем)

) Даны два массива одинаковой длины, один содержит данные, другой содержит результаты, но изначально установлен в ноль, например :

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 более быстрый способ выполнить описанную выше операцию?

(я понимаю, что это похоже на свертку, но не совсем то же самое).

5
задан Alex Riley 1 April 2015 в 19:24
поделиться