2011-12-08 226 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