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

如何获取NumPy一维数组中连续1的簇的起止索引?

获取NumPy数组中连续1的簇的起始和结束索引

给定一维NumPy数组:

import numpy as np
a = np.array([1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1])

要提取所有值为1的连续簇的起始和结束索引,可通过以下NumPy操作实现:

# 生成标记1位置的掩码数组
mask = a == 1
# 给掩码前后补0,处理数组首尾为1的边界情况
padded_mask = np.concatenate([[0], mask, [0]])
# 计算差分,找到簇的边界变化点
diff = np.diff(padded_mask)

# 提取簇的起始索引(从0→1的位置)
start_indices = np.where(diff == 1)[0]
# 提取簇的结束索引(从1→0的位置减1,得到实际最后一个1的索引)
end_indices = np.where(diff == -1)[0] - 1

# 组合成预期的嵌套列表格式
clusters = np.column_stack([start_indices, end_indices]).tolist()
result = [clusters]

print(result)

代码说明

  1. 掩码生成:mask数组将原数组中值为1的位置标记为True,其余为False,方便后续识别连续区域。
  2. 边界补全:在掩码前后添加0,确保数组开头或结尾就是连续1时,差分操作能捕获到这些边界。
  3. 差分找边界:np.diff计算相邻元素的差值,diff == 1对应簇的起始位置(从非1变为1),diff == -1对应簇结束的下一个位置(从1变为非1),因此需要减1得到簇的实际结束索引。
  4. 结果组合:用np.column_stack将起始和结束索引配对,转成列表后即可得到符合预期的格式。

运行上述代码后,输出结果为:

[
    [[0, 2], [8, 11], [13, 14]]
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:12:50