如何按条件拆分数组?以20ms间隔拆分时间信号为例
按20ms间隔拆分时间信号的解决方案
嘿,这个需求其实很好实现,核心就是先确定所有的20ms区间边界,再把每个时间点(以及对应的加速度数据)分配到对应的区间里就行。我给你一步步拆解,再附上Python代码示例,你可以直接套用:
核心思路
- 先算出所有的20ms区间起始点:从37913ms开始,每次加20ms,直到接近40010ms为止。比如第一个区间是
[37913, 37933),第二个是[37933, 37953),以此类推。 - 对每个时间点,计算它属于哪个区间的起始点,然后把它(和对应的加速度值)添加到该区间的列表中。
代码实现(以Python为例)
假设你已经有了时间数组t_list和对应的加速度数组acc_list:
# 定义基础参数 start_time = 37913 end_time = 40010 interval = 20 # 初始化字典存储分组结果:键是区间起始时间,值是该区间的时间+加速度列表 grouped_data = {} # 遍历每个时间点和对应的加速度 for t, acc in zip(t_list, acc_list): # 计算当前时间点所属的区间起始值 # 公式逻辑:(t - 起始时间) // 间隔 得到是第几个区间,再乘以间隔加起始时间就是区间起点 interval_start = start_time + ((t - start_time) // interval) * interval # 跳过超出结束时间的点 if interval_start >= end_time: continue # 如果这个区间还没创建列表,先初始化 if interval_start not in grouped_data: grouped_data[interval_start] = [] # 添加当前的时间和加速度(也可以分开存两个列表,看你的需求) grouped_data[interval_start].append( (t, acc) ) # 如果需要按区间顺序得到单独的列表(比如list1, list2...) sorted_groups = [grouped_data[start] for start in sorted(grouped_data.keys())] # 示例:打印第一个区间的数据 print("第一个20ms区间的数据:", sorted_groups[0])
额外说明
- 如果你只需要时间列表,把代码里的
append( (t, acc) )改成append(t)就行,和你例子里的list1完全一致。 - 这个方法比逐个遍历每个区间判断要高效得多,尤其是当你的时间点数量很大的时候。
- 最后一个区间的结束会是
39993 + 20 = 40013,但代码里会自动跳过t >= 40010的点,符合你的时间范围要求。
内容的提问来源于stack exchange,提问作者Salman Shaukat
相关产品推荐
相关产品推荐

