Matlab如何拆分向量中的连续数值段?(矩阵维度限制说明)
拆分向量为连续数值段的方法
给定向量:
x = [1,2,4,5,7,8,9,11,12,13,14,15]
由于矩阵要求每行维度一致,无法直接转成每行长度不同的结构,可通过以下方法拆分出连续数值的小段:
MATLAB 实现
- 计算相邻元素的差值,定位连续段的分割点
- 使用细胞数组(cell array)存储不同长度的连续段
代码示例:
x = [1,2,4,5,7,8,9,11,12,13,14,15]; % 计算相邻元素差值 diff_x = diff(x); % 找到分割位置(差值大于1的位置后移一位) split_indices = find(diff_x > 1) + 1; % 按分割点拆分向量为细胞数组 y = mat2cell(x, 1, diff([1, split_indices, length(x)+1]));
执行后得到的细胞数组 y 结构为:
y = 1×4 cell array {[1 2]} {[4 5]} {[7 8 9]} {[11 12 13 14 15]}
Python 实现
通过遍历向量,逐个判断元素是否属于当前连续段,完成拆分:
代码示例:
x = [1,2,4,5,7,8,9,11,12,13,14,15] y = [] # 初始化第一个连续段 current_segment = [x[0]] for num in x[1:]: # 判断当前元素是否与上一个元素连续 if num == current_segment[-1] + 1: current_segment.append(num) else: # 结束当前段,开始新段 y.append(current_segment) current_segment = [num] # 添加最后一个连续段 y.append(current_segment)
执行后 y 的结果为:
[[1, 2], [4, 5], [7, 8, 9], [11, 12, 13, 14, 15]]
内容的提问来源于stack exchange,提问作者user2587726
相关产品推荐
相关产品推荐

