我有以下矢量:
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];
任何人都有任何想法?
答案 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