[Numpy-discussion] Rolling window (moving average, moving std, and more)

Keith Goodman kwgoodman at gmail.com
Mon Jan 3 10:52:28 EST 2011


On Mon, Jan 3, 2011 at 7:41 AM, Erik Rigtorp <erik at rigtorp.com> wrote:
> On Mon, Jan 3, 2011 at 10:36, Keith Goodman <kwgoodman at gmail.com> wrote:
>> On Mon, Jan 3, 2011 at 5:37 AM, Erik Rigtorp <erik at rigtorp.com> wrote:
>>
>>> It's only a view of the array, no copying is done. Though some
>>> operations like np.std()  will copy the array, but that's more of a
>>> bug. In general It's hard to imagine any speedup gains by copying a
>>> 10GB array.
>>
>> I don't think that np.std makes a copy of the input data if the input
>> is an array. If the input is, for example, a list, then an array is
>> created.
>
> When I tried it on a big array, it tried to allocate a huge amount of
> memory. As I said it's probably a bug.

Yes, that would be a big bug.

np.std does have to initialize the output array. If the window size is
small compared to arr.shape[axis] then the memory taken by the output
array is of the same order as that of the input array. Could that be
what you are seeing?

>> a = np.arange(10)

Small window, output array shape (8,):

>> rolling_window(a, 2)
array([[0, 1],
       [1, 2],
       [2, 3],
       [3, 4],
       [4, 5],
       [5, 6],
       [6, 7],
       [7, 8],
       [8, 9]])

Big window, output array shape (2,):

>> rolling_window(a, 9)
array([[0, 1, 2, 3, 4, 5, 6, 7, 8],
       [1, 2, 3, 4, 5, 6, 7, 8, 9]])



More information about the NumPy-Discussion mailing list