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

如何用Pythonic方式将数组中满足条件的连续元素拆分为独立数组?

提取NumPy数组中连续的负数序列

针对从NumPy数组中拆分出连续负数序列的需求,这里提供一种简洁的Pythonic实现方式,避免numpy.split带来的复杂逻辑:

import numpy as np

values = np.array([1, 2, 3, -1, -2, -3, 4, 5, 6, -7, -8, 10])
mask = values < 0

# 构造包含边界的mask差分,捕捉连续负数块的起止位置
diff_mask = np.diff(np.concatenate(([False], mask, [False])))
starts = np.where(diff_mask == 1)[0]  # 连续负数块的起始索引
ends = np.where(diff_mask == -1)[0]    # 连续负数块的结束索引

# 提取所有连续负数块
negative_blocks = [values[start:end] for start, end in zip(starts, ends)]

# 按要求输出结果
for idx, block in enumerate(negative_blocks, 1):
    print(f"Array {idx}:")
    print(block)

代码逻辑说明

  1. 边界补全:给原始mask前后各加一个False,确保数组开头或结尾为负数时,差分操作能正确捕捉到块的起止点。
  2. 差分找边界:通过np.diff计算mask的变化,diff_mask中值为1的位置对应连续负数块的起始,值为-1的位置对应结束。
  3. 切片提取:利用列表推导式,遍历起止索引对,直接切片得到每个连续负数序列,代码简洁直观。

运行后输出与预期一致:

Array 1:
[-1 -2 -3]
Array 2:
[-7 -8]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:50:09