我试图使用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组中。
由于
答案 0 :(得分:5)
使用accumarray
与min
一起查找每组的最小值:
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)进行比较。