Python数据平滑-需要匹配未知平滑方法的结果

问题描述 投票:0回答:0

我实际上是在尝试重写一个软件,其中没有源代码。

我需要匹配数据平滑结果

例子:

原始数据示例:

s1 = [1. 1. 1. 1. 1. 1. 1. 0.969. 1. 0.969. 0.938. 0.750. 0.563] 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] 
平滑后的目标结果(我将结果四舍五入到逗号后的 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 集中的不同过滤器,但我没有达到确切的结果目标。

` 从 scipy.ndimage 导入 uniform_filter1d 作为过滤器

# s = [1. 1.1.1.1.1.1.0.969。 1. 0.969。 0.938。 0.750。 0.563] # st = "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"

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): 对于我在范围 (1, 6) 中: z = “” csm = filter(arr, i, 轴=-1) 对于 csm 中的 num: y = round(num*1000)/1000 z += str(y) + " | " 打印(str(i)+“:”+ z [:-3] +“ “)

moving_avg(s) print("Y:" + str(st)) `

我使用字符串能够快速直观地比较数据。

我知道,旧软件使用了mathlab smoothing function,但我没有mathlab license,我不知道原来的软件使用哪个函数来平滑数据。 我试着看一下 mathlab 平滑文档。但我必须承认我不是数学天才,也没有接受过高等数学教育。意味着我不知道如何构建公式来获得这些结果。

https://www.mathworks.com/help/curvefit/smoothing-data.html

我真的不知道如何处理数据以获得所需的平滑结果。

我玩了几个 scipy 过滤器,但还没有成功。

我希望你能给我一个提示,如何实现平滑以获得所需的目标值。

感谢您的建议。 基萨布

我试图构建一个公式来获得想要的结果,我尝试使用 scipy ndimage 过滤器

python arrays scipy smoothing
© www.soinside.com 2019 - 2024. All rights reserved.