查找矩阵中的最小值的值和索引,按列值分组

时间:2013-05-20 14:21:08

标签: matlab

我试图使用matlab在以下矩阵中找到每组数据点的最小值和索引

    a=[0.3 1;
    0.5 1;
    0.2 1;
    0.4 2 ;
    0.43 2;
    0.01 3;
    0.3 3;
    0.23 3];

数据按第2列中的值分组。即前三行在第1组中,后两行在第2组中,后3行在第3组中。

由于

2 个答案:

答案 0 :(得分:5)

使用accumarraymin一起查找每组的最小值:

v = accumarray( a(:,2), a(:,1), [], @min )

要获得最小值的索引,请构造行:

idx = find(ismember(a, [v, unique(a(:, 2))], 'rows'))

此外,如果您有m个预定群组,则可以使用(1:m)'代替unique(...)

答案 1 :(得分:3)

另一种选择:

 min(a(a(:,2)==1))
 min(a(a(:,2)==2)) % etc...
只要第二列中的数字是整数,

就应该工作,否则相等测试将失败。如果使用双精度数,则将值之间的差异与(非常)小的容差(例如1e-6)进行比较。