2011-07-25 13 views
23

Numpy'de 1D dizileri için bir haddeleme penceresinin verimli bir şekilde uygulanmasının bir yolu var mı?Numpy'de 1D dizileri için haddeleme penceresi?

Örneğin, observations değerleri 1D listesi olan bir 1D listesi için, haddeleme standart sapma değerlerini hesaplamak üzere bu saf Python kod parçacığını, ve n standart sapma için pencere uzunluğu:

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))) 

Numpy içinde, yani herhangi bir Python döngüsü olmaksızın bunu tamamen yapmanın bir yolu var mı? Standart sapma numpy.std ile önemsizdir, ancak haddeleme penceresi kısmı tamamen çarpmaktadır.

Numpy'de bir yuvarlanma penceresiyle ilgili this blog postunu buldum, ancak 1D dizileri için görünmüyor.

+0

Ayrıca [darboğaz projesinde] bir göz (https://github.com/kwgoodman/ alabilir:

sen (blogundan) sahip

numpy.std(rolling_window(observations, n), 1) 

yani darboğaz), ortalama hareketli, std, vb. oluşturdu. – derchambers

cevap

36

Sadece blog kodunu kullanın, ancak işlevinizi sonuca uygulayın.

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) 
+0

Herhangi bir veri türü için geçerli mi? – Lee