如何用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)
代码逻辑说明
- 边界补全:给原始
mask前后各加一个False,确保数组开头或结尾为负数时,差分操作能正确捕捉到块的起止点。 - 差分找边界:通过
np.diff计算mask的变化,diff_mask中值为1的位置对应连续负数块的起始,值为-1的位置对应结束。 - 切片提取:利用列表推导式,遍历起止索引对,直接切片得到每个连续负数序列,代码简洁直观。
运行后输出与预期一致:
Array 1: [-1 -2 -3] Array 2: [-7 -8]
内容的提问来源于stack exchange,提问作者Mohsen_Fatemi
相关产品推荐
相关产品推荐

