Home  >  Article  >  Backend Development  >  How to Calculate Rolling Window Standard Deviations on 1D Arrays Using Numpy?

How to Calculate Rolling Window Standard Deviations on 1D Arrays Using Numpy?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-28 03:23:30278browse

How to Calculate Rolling Window Standard Deviations on 1D Arrays Using Numpy?

Using Numpy for Rolling Window Standard Deviations on 1D Arrays

In numpy, an operation often arises where one needs to calculate a rolling window function over a 1D array. A straightforward approach would be to use a loop, as shown in the given Python code snippet. However, a more efficient method is available through Numpy's强大功能.

The key to performing a rolling window operation in Numpy lies in utilizing the rolling_window function introduced in a blog post. This function reshapes the input array into a series of overlapping windows, effectively creating a 2D array. Applying a function to this 2D array allows for window-based calculations.

To calculate rolling standard deviations, simply apply the numpy.std function to the output of the rolling_window function. The following modified code snippet demonstrates this approach:

import numpy as np

# Define the rolling window function
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)

# Input array
observations = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Calculate rolling standard deviations
stdev = np.std(rolling_window(observations, 3), 1)

# Print the results
print(stdev)

This code snippet efficiently calculates the rolling standard deviations for the given 1D array using pure Numpy operations, eliminating the need for loops.

The above is the detailed content of How to Calculate Rolling Window Standard Deviations on 1D Arrays Using Numpy?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn