我有一个从文件中导入的矩阵(实际上是表格):
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方式。那我怎么能这样做呢?
答案 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
命令获得相同的结果。