在Matlab

时间:2016-03-18 15:20:14

标签: arrays matlab

我有以下矢量:

x = [6 7 8 9 10 11 17 18 19 20];

我有持续时间向量d,它计算x中的元素:

d = [6 4] => d = [x(1:6) x(7:10)];

所以我想查找d(1)d(2)的出入口:

d(1) = x(1:6) => r1 = [6 11];
d(2) = x(7:10) => r2 = [17 20]; 

所以最后我想重塑成以下矩阵:

result = [r1; r2] = [6 11; 17 20]; 

任何人都有任何想法?

1 个答案:

答案 0 :(得分:2)

构建结果的一种方法是使用cumsum来帮助构建索引。

result = x([cumsum([1 d(1:end-1)]); cumsum(d)]).';

    6    11
    17    20

如果你不介意将其分成两行,你可以轻松地对下面的内容做同样的事情,因为你只计算累积总和一次,所以可能更有效。

C = cumsum(d);
result = x([1, C(1:end-1)+1; C]).';

这构造了一个矩阵,其中包含d中指定的每个组的第一个和最后一个索引。然后我们可以使用它们直接索引到x

starts = cumsum([1 d(1:end-1)])

    1   7

ends = cumsum(d)

    6   10

indices = [starts; ends]

    1   7
    6   10

x(indices).'

    6   11
    17  20