【发布时间】:2015-07-17 07:08:52
【问题描述】:
目标是获取窗口/内核中元素的平均值。
示例:
x = np.array([[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,np.nan]])
window size - 2 by 2
ex: overlying window on x sum(x[0,0]+x[0,1]+x[1,0]+x[1,1])/4 = 1.5
>> y
array([[ 1.5 , 3.5 ],
[ 1.5 , 3.333]])
尝试过的方法:(I)通过硬编码用于大小为 2,2 的窗口的循环
S,T = x.shape
viArray_at_LR = np.empty([S/2,T/2])
viArray_at_LR[:] = np.nan
rowIncre = 0
for s in range(0,S-1,2):
colIncre = 0
for t in range(0,T-1,2):
try:
viArray_at_LR[rowIncre,colIncre] = np.nanmean([x[s,t],x[s,t+1],x[s+1,t],x[s+1,t+1]])
except KeyError:
print "nan values at ",s,t
colIncre = colIncre + 1
rowIncre = rowIncre + 1
II) 使用内核,这将返回与内核跳转由一个元素相同的数组大小。
import scipy.ndimage as ndimage
out = ndimage.generic_filter(array, np.nanmean, footprint=kernel, mode='wrap')
我希望输出 array.size 为 input_arr.size/window.size
我正在寻找一种通用方法,可以在不使用循环的情况下对任何窗口大小 (N,N) 进行此操作
【问题讨论】:
-
您想要相同大小的数组还是将其缩小一个 window_size^2 倍?
-
@mmdanziger,我要缩小它
标签: python moving-average