segments.py 文件源码

python
阅读 23 收藏 0 点赞 0 评论 0

项目:croissance 作者: biosustain 项目源码 文件源码
def segment_by_std_dev(series, increment=2, maximum=20):
    """
    Divides a series into segments, minimizing standard deviation over window size. Windows are of varying size from
    `increment` to `maximum * increment` at each offset `increment` within the series.

    :param series:
    :param increment:
    :param maximum:
    :return:
    """
    duration = int(series.index[-2])
    windows = []

    for i in range(0, duration, increment):
        for size in range(1, maximum + 1):
            window = detrend(series[i:i + size*increment])
            heappush(windows, (window.std() / (size*increment), i, i + size*increment))

    segments = []
    spots = set()

    try:
        while True:
            window_agv_std, start, end = heappop(windows)

            if any(i in spots for i in range(start, int(end))):
                continue

            for i in range(start, int(end)):
                spots.add(int(i))

            heappush(segments, (start, min(duration, end)))

    except IndexError:
        pass

    return [heappop(segments) for _ in range(len(segments))]
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号