MATLAB's smooth implementation (n-point moving average) in NumPy/Python -
matlab's smooth function, default, smooths data using 5-point moving average. best way same in python? example, if data
0 0.823529411764706 0.852941176470588 0.705882352941177 0.705882352941177 0.676470588235294 0.676470588235294 0.500000000000000 0.558823529411765 0.647058823529412 0.705882352941177 0.705882352941177 0.617647058823529 0.705882352941177 0.735294117647059 0.735294117647059 0.588235294117647 0.588235294117647 1 0.647058823529412 0.705882352941177 0.764705882352941 0.823529411764706 0.647058823529412 0.735294117647059 0.794117647058824 0.794117647058824 0.705882352941177 0.676470588235294 0.794117647058824 0.852941176470588 0.735294117647059 0.647058823529412 0.647058823529412 0.676470588235294 0.676470588235294 0.529411764705882 0.676470588235294 0.794117647058824 0.882352941176471 0.735294117647059 0.852941176470588 0.823529411764706 0.764705882352941 0.558823529411765 0.588235294117647 0.617647058823529 0.647058823529412 0.588235294117647 0.617647058823529 0.647058823529412 0.794117647058824 0.823529411764706 0.647058823529412 0.617647058823529 0.647058823529412 0.676470588235294 0.764705882352941 0.676470588235294 0.647058823529412 0.705882352941177 0.764705882352941 0.705882352941177 0.500000000000000 0.529411764705882 0.529411764705882 0.647058823529412 0.676470588235294 0.588235294117647 0.735294117647059 0.794117647058824 0.852941176470588 0.764705882352941 the smoothed data should be
0 0.558823529411765 0.617647058823530 0.752941176470588 0.723529411764706 0.652941176470588 0.623529411764706 0.611764705882353 0.617647058823530 0.623529411764706 0.647058823529412 0.676470588235294 0.694117647058824 0.700000000000000 0.676470588235294 0.670588235294118 0.729411764705882 0.711764705882353 0.705882352941177 0.741176470588235 0.788235294117647 0.717647058823529 0.735294117647059 0.752941176470588 0.758823529411765 0.735294117647059 0.741176470588235 0.752941176470588 0.764705882352941 0.752941176470588 0.741176470588235 0.735294117647059 0.711764705882353 0.676470588235294 0.635294117647059 0.641176470588236 0.670588235294118 0.711764705882353 0.723529411764706 0.788235294117647 0.817647058823530 0.811764705882353 0.747058823529412 0.717647058823530 0.670588235294118 0.635294117647059 0.600000000000000 0.611764705882353 0.623529411764706 0.658823529411765 0.694117647058824 0.705882352941176 0.705882352941176 0.705882352941176 0.682352941176471 0.670588235294118 0.676470588235294 0.682352941176471 0.694117647058824 0.711764705882353 0.700000000000000 0.664705882352941 0.641176470588236 0.605882352941177 0.582352941176471 0.576470588235294 0.594117647058824 0.635294117647059 0.688235294117647 0.729411764705882 0.747058823529412 0.803921568627451 0.764705882352941 the syntax in matlab
smooth(data) i want same in python unable find function this.
matlab's smoooth func same averaging across sliding windows of length 5, except way treats 2 elems @ either ends. per linked docs, boundary cases computed these formulae -
yy = smooth(y) smooths data in column vector y .. first few elements of yy given yy(1) = y(1) yy(2) = (y(1) + y(2) + y(3))/3 yy(3) = (y(1) + y(2) + y(3) + y(4) + y(5))/5 yy(4) = (y(2) + y(3) + y(4) + y(5) + y(6))/5 ...
so, replicate same implementation on numpy/python, can use numpy's 1d convolution getting sliding windowed summations , divide them window length give average results. then, append special case treated values boundary elems.
thus, have implementation handle generic window sizes, -
def smooth(a,wsz): out0 = np.convolve(a,np.ones(wsz,dtype=int),'valid')/wsz r = np.arange(1,wsz-1,2) start = np.cumsum(a[:wsz-1])[::2]/r stop = (np.cumsum(a[:-wsz:-1])[::2]/r)[::-1] return np.concatenate(( start , out0, stop ))
Comments
Post a Comment