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

如何在一维NumPy布尔数组中拆分连续True为独立布尔数组列表?

更简洁高效的Numpy实现方法

我们可以借助Numpy的向量化操作快速定位连续True块的边界,生成目标列表的过程更简洁,性能也更优,完全无需依赖自定义的复杂函数。

实现思路与代码:

import numpy as np

x = np.array([True, True, False, True, False])

# 给原数组前后补False,方便捕捉首尾的连续True块
extended_x = np.concatenate([[False], x, [False]])
# 转成整数后计算差分,定位True块的起止位置
diff = np.diff(extended_x.astype(int))
starts = np.where(diff == 1)[0]
ends = np.where(diff == -1)[0]

# 生成仅含单个连续True块的数组列表
l = []
for start, end in zip(starts, ends):
    block_arr = np.zeros_like(x)
    block_arr[start:end] = True
    l.append(block_arr)

# 验证结果是否符合要求
y = np.zeros_like(x)
for e in l:
    y |= e
print(np.array_equal(y, x))  # 输出 True

关键步骤说明:

  • 补边界:给原数组前后添加False,这样不管原数组开头或结尾是True,都能通过差分操作准确捕捉到连续块的起止点。
  • 差分定位:将布尔数组转为整数(True=1,False=0)后计算差分,差分等于1的位置是连续True块的起始索引,等于-1的位置是结束索引。
  • 生成子数组:遍历每一组起止索引,创建全False数组并将对应区间设为True,加入目标列表即可。

这种方法全程用Numpy的内置向量化操作处理边界定位,比自定义函数更简洁,处理大数组时的性能优势也更明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:34:54