任何人都可以提出一种可以根据预定顺序对向量执行操作的方法 - 例如,我有一个不同值的向量 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.
这是一种基于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