1

任何人都可以提出一种可以根据预定顺序对向量执行操作的方法 - 例如,我有一个不同值的向量 M,其大小为 <8760x1>。我有另一个带有数字序列 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]

在这里的任何帮助将不胜感激。

彼得.S.

4

1 回答 1

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
于 2013-03-25T00:41:16.180 回答