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

统计一维NumPy数组中连续零构成的间隙数量

统计一维NumPy数组中连续零值构成的间隙数量

计数规则

  • 数组中连续出现的零值序列整体计为1个间隙,被非零值分隔开的多段零序列分别独立计数。

待统计示例数组

import numpy as np
array = np.array([   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        1692, 1692, 1692, 1692, 1692, 1692, 1692, 2458, 2458, 2458, 2458,
        2458, 2458, 2458,    0,    0,    0, 3956, 3956, 3956, 3956, 3956,
        3956, 3956,    0,    0,    0,    0, 5431, 5431, 5431, 5431, 5431,
        5431, 5431,    0,    0,    0,    0,    0,    0,    0,    0,    0])

该示例数组共包含4个符合规则的间隙,预期程序输出结果为4。

实现方案

采用NumPy向量化操作实现,无Python层循环,处理大数组时执行效率很高,核心逻辑是统计所有零值段的起始位置总数:

def count_zero_gaps(arr):
    is_zero = arr == 0
    # 数组起始位置前默认视为非零,识别所有从非零跳变到零的位置
    gap_start_flags = np.diff(is_zero.astype(np.int8), prepend=0) == 1
    return gap_start_flags.sum()

测试验证

print(count_zero_gaps(array))

执行后输出:

4

逻辑说明

  • 第一步先把数组转换为布尔数组,对应位置为True表示元素是0,False表示非零
  • 给布尔数组头部补一个0(模拟数组开头前的非零状态),计算相邻元素的差值:当差值为1时,代表当前位置从非零变为零,也就是一个新间隙的起点
  • 统计所有起点的数量,就是最终的间隙总数,自动兼容数组开头/结尾为零的边界场景,不会漏算多算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:15:43