2011-12-08 168 views
0

做局部平均值矩阵我有一个矩阵(表实际上),我从文件导入:有没有办法在MATLAB

1.0000 1.9736 
    4.0000 0.2016 
    9.0000 0.0584 
    10.0000 0.0495 
    5.0000 0.1845 
    2.0000 0.6873 
    1.0000 1.4177 
    2.0000 0.4699 
    5.0000 0.1555 
    10.0000 0.0435 
    13.0000 0.0326 
    8.0000 0.0860 
    5.0000 0.1685 
    4.0000 0.1956 
    5.0000 0.1433 
    8.0000 0.0675 
    13.0000 0.0335 
    13.0000 0.0327 
    10.0000 0.0431 
    9.0000 0.0582 
    10.0000 0.0551 
    13.0000 0.0308 

我想每个次数的平均左柱。那就是:

avg = [ 
    1.0000 1.69565 
    2.0000 0.5786 
    4.0000 0.1978] 

等等。我可以用wile或group来做到这一点,但这不是matlab方式。那我该怎么做?

回答

3
a=[randi(5,10,1) rand(10,1)]; 

A =

4.0000 0.4387 
1.0000 0.3816 
2.0000 0.7655 
1.0000 0.7952 
1.0000 0.1869 
5.0000 0.4898 
4.0000 0.4456 
2.0000 0.6463 
5.0000 0.7094 
1.0000 0.7547 

[uniqueID,~,uniqueInd]=unique(a(:,1)); 
[uniqueID accumarray(uniqueInd,a(:,2))./accumarray(uniqueInd,1)] 

ANS =

1.0000 0.5296 
2.0000 0.7059 
4.0000 0.4422 
5.0000 0.5996 
+0

+1,'accumarray'的有用性的典型例子。 –

1

如果你的矩阵称为a,尝试

>> accumarray(grp2idx(a(:,1)),a(:,2),[],@mean) 
ans = 
     1.6957 
     0.5786 
     0.1986 
     0.16295 
     0.07675 
     0.0583 
     0.0478 
     0.0324 

注意grp2idx是统计的T部分oolbox。如果您没有,可以使用unique命令获得相同的结果。

+0

谢谢。这将在comutaion服务器上运行,我不知道该机器上安装了什么。我将无法使用您的解决方案。抱歉 – Yotam