如果矩阵的第一列提供索引值,则查找子矩阵的均值

时间:2014-05-06 13:48:19

标签: matlab matrix octave mean

对于给定的矩阵Z并假设第一列引用索引值,是否可以根据第一列Z(:,2:3)中的索引值找到Z(:,1)的均值。

Z  =  [1    3    4
       2    7    8
       1    3    9
       3    4    4
       1    5    7]

那么如何循环Z来找到索引值为1的相应行的平均值(在第一列中),即找到Z1的平均值

Z1  =    3  4
         3  9
         5  7

任何人都可以通过解释如何做到这一点来帮忙吗?

4 个答案:

答案 0 :(得分:3)

这应该可以解决问题:

mean(mean(Z(Z(:,1)==1,2:3)))

答案 1 :(得分:2)

怎么样:

mean([accumarray(Z(:,1), Z(:,2),[],@mean), accumarray(Z(:,1), Z(:,3),[],@mean)]')'

它为您提供与每个数字相对应的平均值。即第一行的结果是与1对应的行的平均值,第二行是2等的行

答案 2 :(得分:2)

Bsxfun方法 -

Zc = [Z(:,1) mean(Z(:,[2 3]),2)]

ind1 = bsxfun(@eq,Zc(:,1),min(Zc(:,1)):max(Zc(:,1)))
mean_values = sum(bsxfun(@times,ind1,Zc(:,2)))./sum(ind1,1)

输出 -

mean_values =
    5.1667    7.5000    4.0000

答案 3 :(得分:2)

为第1列中的每个索引执行此操作,一次全部:

>> accumarray(repmat(Z(:,1),size(Z,2)-1,1), reshape(Z(:,2:3),[],1), [], @mean)
ans =
    5.1667
    7.5000
    4.0000