我有一个333x1的值向量('数据'),向量中的每个单元格对应13个子类别中的1个范围。每个子类别的标识存储在单独的标识矩阵中(' id')。我想计算原始数据矩阵中具有相似身份的值之和。
e.g。假装这个例子的数据'并且' id'是8x1向量
data = [1; 1; 1; 0; 0; 0; 1; 1]
id = [1; 2; 1; 2; 3; 3; 1; 3]
id的总和1:1 + 0 + 1 + 0 + 0 + 0 + 1 + 0 = 3
id 2的总和:0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 = 1
id 3的总和:0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 = 1
我确信这方面有一个非常简单的方法,但我似乎无法解决这个问题。
感谢您的时间
的Mac
答案 0 :(得分:1)
一个简单的解决方案是:
numCategories = 13;
totals = zeros(numCategories,1);
for idnum = 1:numCategories
totals(idnum) = sum((id==idnum).*data);
end
编辑:正如knedlsepp在评论中指出的那样,accumarray
函数完全完成了上述代码在一行中的作用。
accumarray(id,data);