根据定义的顺序拆分矢量

时间:2013-03-24 22:57:09

标签: matlab vector indexing sequence

任何人都可以提出一种方法,其中可以根据预定序列对向量执行操作 - 例如,我具有不同值的向量M,其为&lt; 8760x1&gt;在尺寸方面。我有另一个带有数字序列P的矢量(大小<300x1>),此序列总和为8760.我想使用这些P值来索引矢量M并找到每个索引的乘积。

使这一点更清晰的一个例子:

M = [1,2,4,2,3,4,5,3,4,2];

P = [2,2,4,2];

结果= [3,6,15,6]

非常感谢任何帮助。

Peter.S。

1 个答案:

答案 0 :(得分:1)

这是一种基于acummarray的方法,以及使用cumsum制作索引向量的巧妙方法。给出两个向量:

M = [1,2,4,2,3,4,5,3,4,2];
P = [2,2,4,2];

P中创建每个频率值的唯一索引向量(在此SO后发布):

numM = sum(P);
index = zeros(numM, 1);
index(cumsum([1 P(1:end-1)])) = 1;
index = cumsum(index);

>> index'
ans =
     1     1     2     2     3     3     3     3     4     4

使用构造的索引向量和值向量来应用accumarray()

result = accumarray(index, M);

>> result'
ans =
     3     6    15     6