0

我正在尝试使用 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 组中。

谢谢

4

2 回答 2

5

使用accumarraywithmin求出每组的最小值:

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

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

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

此外,如果您有m预先确定的组,则可以使用(1:m)'而不是unique(...).

于 2013-05-20T14:23:08.897 回答
3

另外一个选项:

 min(a(a(:,2)==1))
 min(a(a(:,2)==2)) % etc...

只要第二列中的数字是整数就应该可以工作,否则相等性测试将失败。如果使用双精度值,请将值之间的差异与(非常)小的公差(例如 1e-6)进行比较。

于 2013-05-20T14:26:05.520 回答