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

基于局部峰值分割numpy数组y为子数组的技术求助

按峰值位置分割numpy数组为子数组

现有代码与数据

已处理得到numpy数组y,相关处理代码如下:

import pandas as pd
import numpy as np
from scipy.signal import butter_lowpass_filter, find_peaks

data=pd.read_csv('samplesdata.csv',sep=";", decimal=",",encoding='latin-1')
sensor_data=data[['Euklidische Norm']]
sensor_data = np.array(sensor_data).ravel()
sensor_data = sensor_data - np.average(sensor_data) 

# Filter requirements.
order = 2
fs = 100  # sample rate, Hz
cutoff = 1

y = butter_lowpass_filter(sensor_data, cutoff, fs, order)

peaks = find_peaks(y*-1, height = 0.00, threshold = None, distance=170)
height = peaks[1]['peak_heights'] # 峰值高度列表
peak_pos = peaks[0]  # 峰值对应的数组索引位置

峰值高度数组height数据:

[0.06110087, 0.10401105, 0.07522478, 0.09554681, 0.08982648,
       0.09118464, 0.09309628, 0.10440643, 0.08335122, 0.14826715,
       0.09760258, 0.13332452, 0.11009777, 0.1806636 ]

需求

将数组y分割为多个子数组,以peak_pos中的峰值索引为边界,每个子数组包含相邻两个峰值及二者之间的所有元素:

  • 第一个子数组:从第一个峰值到第二个峰值的所有值(包含两个峰值)
  • 第二个子数组:从第二个峰值到第三个峰值的所有值(包含两个峰值)
  • 以此类推

解决方案

利用numpy的左闭右开切片特性,遍历峰值索引数组,依次截取相邻峰值间的片段即可(结束索引需+1以包含右侧峰值元素):

# 初始化存储子数组的列表
sub_arrays = []

# 遍历相邻峰值对
for i in range(len(peak_pos) - 1):
    start_idx = peak_pos[i]
    # 结束索引+1,确保包含第二个峰值
    end_idx = peak_pos[i + 1] + 1
    # 截取子数组
    sub_array = y[start_idx:end_idx]
    sub_arrays.append(sub_array)

执行后,sub_arrays列表中存储了所有符合要求的子数组,可通过sub_arrays[0]、sub_arrays[1]等访问对应片段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:25:39