python - tutorial - ¿Ventana giratoria para matrices 1D en Numpy?
numpy tutorial español pdf (1)
¿Hay alguna manera de implementar eficientemente una ventana rotativa para matrices 1D en Numpy?
Por ejemplo, tengo este fragmento de código de Python puro para calcular las desviaciones estándar progresivas para una lista 1D, donde las observations
son la lista de valores 1D, y n
es la longitud de la ventana para la desviación estándar:
stdev = []
for i, data in enumerate(observations[n-1:]):
strip = observations[i:i+n]
mean = sum(strip) / n
stdev.append(sqrt(250*sum([(s-mean)**2 for s in strip])/(n-1)))
¿Hay alguna manera de hacer esto completamente dentro de Numpy, es decir, sin ningún bucle de Python? La desviación estándar es trivial con numpy.std
, pero la parte de la ventana rodante me numpy.std
completo.
Encontré this publicación de blog sobre una ventana en blanco en Numpy, pero no parece ser para matrices 1D.
Simplemente use el código del blog, pero aplique su función al resultado.
es decir
numpy.std(rolling_window(observations, n), 1)
donde tienes (del blog):
def rolling_window(a, window):
shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
strides = a.strides + (a.strides[-1],)
return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)