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

如何用Python垂直拆分numpy数组列:基于连续零的拆分需求

解决方案

1. 定位拆分点

利用numpy的卷积操作检测连续三个零的位置,提取每个连续零块的最后一个索引作为拆分起始点:

import numpy as np

# 示例输入数组
arr = np.array([0,1,4,2,3,4,7,0,6,0,0,0,6,4,6,3,0,0,0,7])

# 用卷积窗口检测连续3个零
window = np.ones(3, dtype=int)
convolved = np.convolve(arr == 0, window, mode='valid')
# 获取连续三个零的最后一个元素索引
split_starts = np.where(convolved == 3)[0] + 2
# 补充数组开头作为第一个块的起始,末尾作为结束标记
split_points = np.insert(split_starts, 0, 0)
split_points = np.append(split_points, len(arr))

2. 拆分并提取目标块

遍历拆分点,截断冗余的零,保留每个块的起始零:

blocks = []
for i in range(len(split_points)-1):
    start = split_points[i]
    # 非最后一块时,截断掉连续三个零的前两个,只保留最后一个作为下一块起始
    if i < len(split_points)-2:
        end = split_points[i+1] - 2
        block = arr[start:end]
    else:
        block = arr[start:split_points[i+1]]
    blocks.append(block)

3. 验证拆分结果

打印拆分后的列数据:

for idx, block in enumerate(blocks, 1):
    print(f"列{idx}:")
    print(block)

输出结果:

列1:
[0 1 4 2 3 4 7 0 6]
列2:
[0 6 4 6 3]
列3:
[0 7]

4. 并行图表绘制

用matplotlib将各段数据并行展示,对应目标图表效果:

import matplotlib.pyplot as plt

plt.figure(figsize=(10,6))
for idx, block in enumerate(blocks, 1):
    plt.plot(block, label=f'列{idx}')
plt.legend()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:06:04