从一行中拆分连续数字并存储在相应的动态变量中

时间:2016-09-01 05:32:25

标签: matlab

我有一个这样的行向量:x = [1 2 3 4 5 6 7 15 16 17];

我希望得到x中的两个行向量,它们应该分别具有连续的数字:

x1 = [1 2 3 4 5 6 7]

x2 = [15 16 17]

3 个答案:

答案 0 :(得分:3)

  1. 查找相邻元素之间差异为>1的索引(使用finddiff
  2. 创建一个带有索引之间差异的向量(使用索引向量中的第一个元素,并添加其他元素之间的差异)
  3. 使用mat2cell
  4. 拆分向量时使用该向量

    像这样:

    idx = find([diff(x)>1, 1])
    did = [idx(1), diff(idx)]
    mat2cell(x,1,did)
    

答案 1 :(得分:2)

这是一个解决方案(使用稍微复杂的例子):

x = [1 2 3 4 5 6 7 15 16 17 20:25 33 36:40];
ed = [find(diff(x)>1), numel(x)];  %// edges between groups
res = mat2cell(x, 1, ed-[0 ed(1:end-1)])

结果单元格数组:

>> res{1}
 1     2     3     4     5     6     7
>> res{2}
 15    16    17
>> res{3}
 20    21    22    23    24    25
>> res{4}
 33
>> res{5}
 36    37    38    39    40

答案 2 :(得分:0)

可能不是一个好方法!但这是另一种分离数组的方式:

k=[find(diff(x)~=1) length(x)];
t1=1;
for n = 1:length(k)
    t2 = k(n);
    assignin('base', ['x' num2str(n)], x(t1:t2));
    t1 = t2 + 1;
end

您的示例的输出: -

>> x1
x1 =
     1     2     3     4     5     6     7

>> x2
x2 =
    15    16    17