You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何实现同时满足数值阈值和连续序列阈值的数据点分类

Python实现连续阈值标记方案

核心思路

  • 首先遍历输入数据,识别所有连续满足「数值超过阈值」的区间
  • 逐一判断每个连续区间的长度是否满足序列阈值要求,仅对符合要求的区间标记为1,其余位置默认标记为0

基础实现代码(纯Python,无依赖)

def label_continuous_above_threshold(data, value_threshold, seq_threshold):
    n = len(data)
    result = [0] * n
    current_start = None

    for idx, val in enumerate(data):
        if val > value_threshold:
            if current_start is None:
                current_start = idx
        else:
            # 连续区间结束,判断是否满足序列长度要求
            if current_start is not None:
                seq_length = idx - current_start
                if seq_length > seq_threshold:
                    result[current_start:idx] = [1] * seq_length
                current_start = None
    # 处理数组末尾剩余的连续区间
    if current_start is not None:
        seq_length = n - current_start
        if seq_length > seq_threshold:
            result[current_start:] = [1] * seq_length
    return result

示例测试

# 示例参数
test_data = [5,5,1,1,1,5,5,5,4,4,4,4,5,5,5,5,5]
value_thresh = 4
seq_thresh = 2

output = label_continuous_above_threshold(test_data, value_thresh, seq_thresh)
print(output)

运行输出与预期一致:

[0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1]

大数据量优化版本(基于NumPy)

如果处理的数据量很大(超过10万条),可以用NumPy向量化运算提升效率:

import numpy as np
def label_continuous_above_threshold_np(data, value_threshold, seq_threshold):
    data_arr = np.array(data)
    mask = data_arr > value_threshold
    # 识别连续区间的起止位置
    diff = np.diff(np.concatenate(([0], mask, [0])))
    starts = np.where(diff == 1)[0]
    ends = np.where(diff == -1)[0]
    # 筛选符合长度要求的区间
    valid_mask = (ends - starts) > seq_threshold
    result = np.zeros_like(data_arr, dtype=int)
    for s, e in zip(starts[valid_mask], ends[valid_mask]):
        result[s:e] = 1
    return result.tolist()

内容的提问来源于stack exchange,提问作者Cole Hagen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:39:03