Как я могу применить функцию к окну прокрутки в NumPy? - PullRequest
2 голосов
/ 17 июня 2019

У меня есть ряд данных точек (x, y), и я хочу взять окно прокрутки из трех точек. К каждому окну я хочу применить функцию, в основном отображающую окно прокрутки. Как я могу сделать это в NumPy?

Ответы [ 2 ]

1 голос
/ 17 июня 2019

Я думаю, что самый быстрый способ сделать что-то подобное - это просто сделать три копии массива со смещением по одной относительно друг друга.Например:

In [1]: a = np.arange(12)

In [2]: a
Out[2]: array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

In [3]: np.vstack((a,np.roll(a,-1),np.roll(a,-2))).T[:-2]
Out[3]: 
array([[ 0,  1,  2],
       [ 1,  2,  3],
       [ 2,  3,  4],
       [ 3,  4,  5],
       [ 4,  5,  6],
       [ 5,  6,  7],
       [ 6,  7,  8],
       [ 7,  8,  9],
       [ 8,  9, 10],
       [ 9, 10, 11]])

, и тогда вы можете просто работать с последней осью с помощью своей функции.Например, чтобы вычислить скользящую сумму:

def window_function(a):
    return np.sum(a,axis=-1)

>>> a = np.arange(12)
>>> map(window_function,[a[i:i+3] for i in range(len(a)-2)])
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
>>> window_function(np.vstack((a,np.roll(a,-1),np.roll(a,-2))).T[:-2])
array([ 3,  6,  9, 12, 15, 18, 21, 24, 27, 30])

Это можно обобщить с помощью функции:

def get_rolling_window(a,size):
    return np.vstack(np.roll(a,-i) for i in range(size)).T[:-size+1]
0 голосов
/ 17 июня 2019

Существует один метод, так называемый convolve в numpy, например, если вам нужна сумма

n=3
np.convolve(a, np.ones((n,)), mode='valid')
array([ 3.,  6.,  9., 12., 15., 18., 21., 24., 27., 30.])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...