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 の値によってグループ化されます。つまり、最初の 3 行はグループ 1 に属し、次の 2 行はグループ 2 に属し、最後の 3 行はグループ 3 に属します。

ありがとう

4

2 に答える 2

5

グループごとの最小値を見つけるために使用accumarrayします。min

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...

2 番目の列の数値が整数である限り機能するはずです。そうでない場合、等価テストは失敗します。double を使用する場合は、値の差を (非常に) 小さい許容誤差 (1e-6 など) と比較します。

于 2013-05-20T14:26:05.520 に答える