有没有办法在matlab中对矩阵进行偏平均值

时间:2011-12-08 09:45:18

标签: matlab matrix conditional

我有一个从文件中导入的矩阵(实际上是表格):

    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]

等等。我可以用诡计或小组来做这件事,但这不是matlab方式。那我怎么能这样做呢?

2 个答案:

答案 0 :(得分: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)]

和=

1.0000    0.5296
2.0000    0.7059
4.0000    0.4422
5.0000    0.5996

答案 1 :(得分: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是Statistics Toolbox的一部分。如果没有,可以使用unique命令获得相同的结果。