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

基于Numpy向量化比较两个布尔数组,提取感兴趣区域的起始与左闭右开结束索引

基于Numpy向量化比较两个布尔数组,提取感兴趣区域的起始与左闭右开结束索引

针对你提出的这个用Numpy处理布尔数组、提取符合特定条件的感兴趣区域的问题,我先把核心需求和逻辑拆解清楚,再结合示例详细说明:

核心条件说明

要提取的感兴趣区域需要满足以下规则:

  1. 基础条件:区域内必须至少包含一个is_overlap数组中值为True的行;
  2. 可选扩展规则:在满足基础条件的前提下,可以将区域扩展到相邻的行(无论is_overlap是True还是False),但需要同时满足:
    • 这些扩展的行是is_incomplete数组中值为True的连续行;
    • 扩展后的整个区域的总行数 ≥ 设定的max_n_rows;
    • 所有连续的is_incomplete行区域会被合并到包含is_overlap=True的核心区域中。

示例代码与预期结果

先看给定的示例数据和预期输出:

import numpy as np

max_n_rows    = 4
# 行索引:                 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16
is_overlap    = np.array([0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1], dtype=bool)
is_incomplete = np.array([1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1], dtype=bool)

预期提取结果

# 区域索引:                 0  1   2   3   4
region_of_interest_starts    = np.array([1, 3,  9, 14, 16])
region_of_interest_ends_excl = np.array([2, 8, 13, 15, 17])

结果逐区域解释

我们逐个分析每个区域的由来:

  • 区域0(起始1,结束2):
    • 满足基础条件:包含is_overlap[1] = True的行;
    • 不满足扩展条件:虽然is_incomplete[0] = True,但如果扩展到第0行,整个区域只有2行,小于max_n_rows=4,因此不进行扩展,仅保留原核心行。
  • 区域1(起始3,结束8):
    • 满足基础条件:包含is_overlap[4]和is_overlap[5]两个True行;
    • 满足扩展条件:扩展了is_incomplete为True的第3、6、7行,整个区域从3到8(左闭右开)共5行,行数≥4,因此合并为一个大区域。
  • 区域2(起始9,结束13):
    • 满足基础条件:包含is_overlap[9]和is_overlap[11]两个True行;
    • 满足扩展条件:中间的is_incomplete[10] = True,加上后续的is_incomplete[12] = True,整个区域从9到13共4行,刚好等于max_n_rows=4,因此将分散的核心行和中间/后续的is_incomplete行合并为一个区域。
  • 区域3(起始14,结束15)& 区域4(起始16,结束17):
    • 各自满足基础条件:分别对应is_overlap[14] = True和is_overlap[16] = True的行;
    • 不满足扩展条件:如果尝试将14、15、16行合并,总共有3行,小于max_n_rows=4,因此无法合并,拆分为两个独立的小区域。

备注:内容来源于stack exchange,提问作者pierre_j

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 14:59:27