我正在寻找一种在python列表中找到“高原”或组的简单方法.作为输入我有这样的事情:
mydata = [0.0, 0.0, 0.0, 0.0, 0.0, 0.143, 0.0, 0.22, 0.135, 0.44, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.33, 0.65, 0.22, 0.0, 0.0, 0.0, 0.0, 0.0]
我想提取每个“组”的中间位置.在这种情况下,group被定义为!= 0的数据,例如至少3个位置.应忽略飞地的单个零(如位置6).
基本上我想获得以下输出:
myoutput = [8, 20]
对于我的用例,获得非常精确的输出数据并不重要. [10,21]仍然可以.
总结一切:第一组:[0.143,0.0,0.22,0.135,0.44,0.1];第二组:[0.33,0.65,0.22].现在中间元素的位置(如果没有真正的中间值,则从中间向左或向右).所以在输出8中将是第一组的中间,20是第二组的中间.
我已经尝试了一些方法.但它们并不像我想要的那样稳定(例如:更多的飞地可能会导致问题).所以在投入更多时间在这个想法之前,我想问一下是否有更好的方法来实现这个功能.我甚至认为这可能是一个普遍的问题.可能已经有标准代码解决了吗?
有other questions描述了大致相同的问题,但我还需要在处理之前“平滑”数据.
1.)平滑数据 – 摆脱飞地的零点
import numpy as np
def smooth(y, box_pts):
box = np.ones(box_pts)/box_pts
y_smooth = np.convolve(y, box, mode='same')
retu