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

基于Numpy的矩形重叠检测向量化实现漏检问题排查

错误根因

你自定义的innercheck、outercheck逻辑存在根本性错误,其中类似y >= y.reshape(-1,1)的表达式仅能得到数组元素两两比较的结果,和区间重叠的判定逻辑完全无关,才会出现部分场景漏检的问题。

正确实现方案

判断两个一维区间[s1, e1]和[s2, e2]是否重叠(包含边界接触),仅需满足max(s1, s2) <= min(e1, e2),该规则覆盖完全包含、边重叠、角重叠所有场景,对应的向量化实现如下:

import numpy as np

def interval_overlap(starts: np.ndarray, ends: np.ndarray) -> np.ndarray:
    """
    批量判断所有区间对是否重叠
    :param starts: 形状为(n,)的数组,存储所有区间的起始边界
    :param ends: 形状为(n,)的数组,存储所有区间的结束边界
    :return: 形状为(n,n)的布尔矩阵,[i,j]为True表示第i和第j个区间重叠
    """
    s_row = starts.reshape(-1, 1)
    s_col = starts.reshape(1, -1)
    e_row = ends.reshape(-1, 1)
    e_col = ends.reshape(1, -1)
    return np.maximum(s_row, s_col) <= np.minimum(e_row, e_col)

# 调用示例
rectangles = np.array(rectangles)
# 垂直区间(上下边界)重叠判断
vertical_overlap = interval_overlap(rectangles[:, 0], rectangles[:, 1])
# 水平区间(左右边界)重叠判断
horizontal_overlap = interval_overlap(rectangles[:, 2], rectangles[:, 3])
# 矩形重叠需要两个方向都重叠
overlap_matrix = np.logical_and(vertical_overlap, horizontal_overlap)
# 转换为和原方案一致的索引列表格式
vectorized_overlaps = [np.where(row)[0].tolist() for row in overlap_matrix]

结果说明

上述代码运行后得到的vectorized_overlaps和你原有逐一遍历方案的输出完全一致,不会出现漏检问题。如果你需要对齐Python range左闭右开的特性(即边界接触不算重叠),仅需把代码中的<=修改为<即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:15:05