Dato sono due matrici di uguale lunghezza, uno dati Holding, uno che tengono i risultati ma inizialmente impostato a zero, per esempio:Python/NumPy: attuare una somma parziale (ma non abbastanza)
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])
avevo piace calcolare la somma di tutti i possibili sottoinsiemi di tre elementi adiacenti in a. Se la somma è 0 o 1, i tre elementi corrispondenti in b rimangono invariati; solo se la somma è superiore a 1 sono i tre elementi corrispondenti b impostato a 1, in modo che dopo il calcolo b diventa
array([0, 0, 0, 1, 1, 1, 0, 1, 1, 1])
Un semplice ciclo raggiungerà questo:
for x in range(len(a)-2):
if a[x:x+3].sum() > 1:
b[x:x+3] = 1
Dopo questo, b ha la forma desiderata
Devo farlo per una grande quantità di dati, quindi la velocità è un problema. C'è un modo più veloce in NumPy per eseguire l'operazione di cui sopra?
(Capisco che questo è simile a una convoluzione, ma non proprio la stessa).
Esattamente quello che stavo per suggerire, ma 30 secondi più veloce. ;) –
Sull'OP 'a', questo è in realtà più lento, ma man mano che l'array cresce sembra migliorare molto. –
+1: le funzionalità di NumPy sono molto utili, qui. Codice elegante ed efficiente – EOL