dado son dos matrices de igual longitud, uno de datos que contiene, uno que sostienen los resultados pero inicialmente establecidos en cero, por ejemplo:Python/NumPy: la aplicación de una suma corriente (pero no del todo)
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])
que había Me gusta calcular la suma de todos los subconjuntos posibles de tres elementos adyacentes en a. Si la suma es 0 o 1, los tres elementos correspondientes en b no se modifican; sólo si la suma excede de 1 son los tres elementos correspondientes en b se establece en 1, de modo que después del cálculo B se convierte en
array([0, 0, 0, 1, 1, 1, 0, 1, 1, 1])
Un bucle simple se hará lograr esto:
for x in range(len(a)-2):
if a[x:x+3].sum() > 1:
b[x:x+3] = 1
Después de esto, b tiene la forma deseada.
Tengo que hacer esto para una gran cantidad de datos, por lo que la velocidad es un problema. ¿Hay una forma más rápida en NumPy para llevar a cabo la operación anterior?
(entiendo que esto es similar a una convolución, pero no exactamente igual).
Exactamente lo que iba a sugerir, pero 30 segundos más rápido. ;) –
En el 'a' del OP, esto es realmente más lento, pero a medida que el conjunto crece, parece mejorar mucho. –
+1: las funciones de NumPy tienen un uso muy bueno, aquí. Código elegante y eficiente. – EOL