如何按10%比例拆分时间向量并存储所有子向量?
拆分时间向量为10%比例的子向量
嘿,我来帮你搞定这个问题!看起来你可能误解了“按10%比例拆分”的实现方式——你之前写的ten_percent_of_time_vector = time*10/100其实是把每个时间值缩小到原来的10%,而不是提取原向量中10%的部分。咱们来一步步解决这个拆分问题:
首先明确你的原时间向量:time = (0:3500)*(1/1000) 生成的是从0到3.5秒、步长1毫秒的序列,总共有3501个元素。我们需要把它拆分成10个连续的子向量,每个子向量占原向量的10%比例(这里分两种常见的拆分逻辑,你可以根据需求选择):
方法1:按元素数量的10%拆分
这种方式是把原向量的元素总数平均分成10份,处理非整数长度的情况(3501无法被10整除,所以最后一段会多1个元素):
% 生成原时间向量 time = (0:3500)*(1/1000); total_length = length(time); num_segments = 10; % 计算每个子向量的长度:前9段各350个元素,最后一段351个 segment_lengths = ones(1, num_segments) * floor(total_length / num_segments); segment_lengths(end) = total_length - sum(segment_lengths(1:end-1)); % 初始化cell数组存储子向量 time_segments = cell(1, num_segments); current_position = 1; % 循环拆分 for i = 1:num_segments end_position = current_position + segment_lengths(i) - 1; time_segments{i} = time(current_position:end_position); current_position = end_position + 1; end
现在time_segments就是一个包含10个子向量的cell数组,每个子向量对应原向量的10%区间。
方法2:按时间范围的10%拆分
如果你的需求是按总时长的10%拆分(每段覆盖0.35秒),可以用数值区间来筛选:
% 生成原时间向量 time = (0:3500)*(1/1000); total_duration = max(time) - min(time); num_segments = 10; % 生成时间区间的分界点 time_bins = linspace(min(time), max(time), num_segments + 1); % 初始化cell数组存储子向量 time_segments = cell(1, num_segments); % 循环拆分 for i = 1:num_segments % 筛选出当前区间内的时间点 time_segments{i} = time(time >= time_bins(i) & time <= time_bins(i+1)); end
小提示:Python版本实现
如果你用的是Python(结合numpy),逻辑是完全相通的,代码示例如下:
import numpy as np # 生成原时间向量 time = np.arange(0, 3501) * (1/1000) total_length = len(time) num_segments = 10 # 按元素数量拆分 segment_length = total_length // num_segments remainder = total_length % num_segments time_segments = [] current = 0 for i in range(num_segments): end = current + segment_length + (1 if i < remainder else 0) time_segments.append(time[current:end]) current = end
这样就能轻松把时间向量拆分成10个等比例的子向量啦!
内容的提问来源于stack exchange,提问作者Mac.
相关产品推荐
相关产品推荐

