2016-03-18 57 views
1
给出的持续时间值

我有以下的载体:重塑向量在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]; 

任何人有任何想法?

回答

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 
+0

它不起作用。 'out'函数是未定义的。 – Bowecho

+0

@Bowecho什么'out'?你必须在编辑之间抓住它。 – Suever

+0

对不起,我没有看到你改变了你的答案。 – Bowecho