Gegeben sind zwei Arrays gleicher Länge, ein Haltedaten, man die Ergebnisse hält aber zunächst auf Null gesetzt, zum Beispiel:Python/NumPy: eine laufende Summe der Umsetzung (aber nicht ganz)
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])
Ich würde Ich mag es, die Summe aller möglichen Teilmengen von drei benachbarten Elementen in a zu berechnen. Wenn die Summe 0 oder 1 ist, bleiben die drei entsprechenden Elemente in b unverändert; nur dann, wenn die Summe 1 überschreitet, sind die drei entsprechenden Elemente in B auf 1 gesetzt, so daß nach der Berechnung b
array([0, 0, 0, 1, 1, 1, 0, 1, 1, 1])
eine einfache Schleife wird dies erreichen wird:
for x in range(len(a)-2):
if a[x:x+3].sum() > 1:
b[x:x+3] = 1
Danach, b hat die gewünschte Form.
Ich muss dies für eine große Menge von Daten tun, so Geschwindigkeit ist ein Problem. Gibt es einen schnelleren Weg in NumPy, um die obige Operation auszuführen?
(Ich verstehe, das ist ähnlich wie eine Faltung, aber nicht ganz das Gleiche).
Genau das, was ich vorschlagen wollte, aber 30 Sekunden schneller. ;) –
Auf den OPs "a" ist das eigentlich langsamer, aber wenn das Array wächst, scheint es viel besser zu werden. –
+1: Die Funktionen von NumPy werden hier sehr gut genutzt. Eleganter und effizienter Code. – EOL