我有一个数组,该数组的长度约为2000个元素,我想通过在其上滑动一个宽度相对较小的make-believe窗口并在其中计算元素的StDev来找出它在每个像素中心的标准偏差。每个区域,产生一个数组,该数组与输入的元素数量相同。因此,如果宽度设置为5,则以元素零为中心的StDev将计算np.std(arr[0:3])
。
更具体地说,假设您的输入数组是
[0.14 0.1 0.12 0.25 0.29 0.17 0.21 0.22 0.16 0.18 0.14]
并且您希望宽度为7。对于元素0,您将计算
stdev([0.14 0.1 0.12 0.25])
,对于元素2,您将计算stdev([0.14 0.1 0.12 0.25 0.29])
,依此类推。似乎一个幼稚的解决方案是遍历输入数组,并通过
floor(width/2)
元素扩展输入数组(简单地在前几个像素和最后几个像素上屏蔽外部元素),或者只是修改使用的宽度。有没有一种更快的方法可以做到这一点,尤其是不需要重复选择子数组的方法呢?
最佳答案
您可以使用pandas轻松完成此操作。
import pandas as pd
data = np.random.random(20)
stds = pd.rolling_std(data, window=7, center=True, min_periods=1) # min_periods to get the edges
关于python - numpy数组的区域统计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28843949/