我正在尝试读取两个列数据并找到它具有的所有最小值。图表看起来像this
x轴是时间,y轴是磁通。通过此链接可以看到数据 https://onedrive.live.com/redir?resid=1E870F010DBA8407!298&authkey=!ABdG6FJ_i3d9oWI&ithint=file%2ctxt 我找不到很酷的算法。我还尝试拟合曲线来轻松定义最小值,但结果不正确。哪种静态方法适合这项工作。我用python和C. 如果你分享你的想法,我会很高兴。
答案 0 :(得分:0)
要做的第一件事就是沿着x轴对点列表进行排序,否则这将是一个绝对的痛苦。然后你可以使用:
minima_indices=[i+1 for i,y in enumerate(y_list[1:-1]) if y_list[i-1]>=y<=y_list[i+1]]
这应该为您提供排序列表中最小值的索引。请注意,它省略了第一点和最后一点,如果您希望将它们包含在内,可以轻松完成。
如果您只需要图表中的深度最小值,那么您可以在结尾处(或在原始列表理解期间通过添加条件)过滤掉所有小的最小值:
def approx(a,b,tol):
if abs(a-b)<tol: return True
return False
minima_indices_filtered=[i for i in minima_indices if not approx(y_list[i],y_0,tol)]
y_0是图片顶部的平行线的值,tol是最小值在注册为最小值之前的深度。