我正在尝试使用 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 组中。
谢谢
我正在尝试使用 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 组中。
谢谢
使用accumarray
withmin
求出每组的最小值:
v = accumarray( a(:,2), a(:,1), [], @min )
要获得最小值的索引,请构造以下行:
idx = find(ismember(a, [v, unique(a(:, 2))], 'rows'))
此外,如果您有m
预先确定的组,则可以使用(1:m)'
而不是unique(...)
.
另外一个选项:
min(a(a(:,2)==1))
min(a(a(:,2)==2)) % etc...
只要第二列中的数字是整数就应该可以工作,否则相等性测试将失败。如果使用双精度值,请将值之间的差异与(非常)小的公差(例如 1e-6)进行比较。