如何根据单位矩阵对矩阵的元素求平均值?

时间:2015-03-03 20:12:44

标签: matlab

我有一个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

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案是:

numCategories = 13;
totals = zeros(numCategories,1);

for idnum = 1:numCategories
   totals(idnum) = sum((id==idnum).*data);
end

编辑:正如knedlsepp在评论中指出的那样,accumarray函数完全完成了上述代码在一行中的作用。

accumarray(id,data);