我正在尝试复制闭源软件应用程序 MATLAB 的平滑功能,以匹配其数据平滑结果。
我试着查看 MATLAB smoothing 文档,但根据我的经验,我不知道如何构建公式来获得这些结果。
s1 = [1. 1. 1. 1. 1. 1. 1. 0.969. 1. 0.969. 0.938. 0.750. 0.563]
s2 = [0.500, 0.313, 0.500, 0.656, 0.719, 0.969, 1.000, 0.969, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.00]
注意:为了便于阅读,我将结果四舍五入到 2 位数。
st1 = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.996,, 0.988, 0.975, 0.941, 0.873, 0.768, 0.688]
st2 = [0.396, 0.416, 0.525, 0.666, 0.775, 0.883, 0.949, 0.973, 0.992, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00]
我尝试了
scipy.ndfilters
的不同过滤器,但我没有得到准确的目标结果。
注意:我使用字符串能够快速直观地比较数据。
from scipy.ndimage import uniform_filter1d as filter
s = [0.500, 0.313, 0.500, 0.656, 0.719, 0.969, 1.000, 0.969, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.00]
st = "0.396 | 0.416 | 0.525 | 0.666 | 0.775 | 0.883 | 0.949 | 0.973 | 0.992 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00"
def moving_avg(arr):
for i in range(1, 6):
z = ""
csm = filter(arr, i, axis=-1)
for num in csm:
y = round(num*1000)/1000
z += str(y) + " | "
print(str(i) + ": " + z[:-3] + "\n")
moving_avg(s)
print("Y: " + str(st))
def test_smoothing(arr, num):
sumup = 0
for item in arr[num-2:num+3]:
sumup += item
print(item)
res = sumup / 5
print(res)
用于说明的平滑/不平滑问题的图像: