0

やり方がわかりません。値が繰り返される行列がいくつかあり、それらを並べ替えて、並べ替えられたインデックスの行列を取得したいと考えています。例えば:

a = [1 4 3 10 8 2];
b = sort(a);

% This doesn't work but I wish it did - that's what I'm looking for.
% idx = find(a==b);  idx = [1 6 3 2 5 4];

[v idx] = ismember(b,a);

ただし、繰り返される値と NaN がある場合、エラーが発生します。これを試して:

a = [1 NaN 4 2 10 8 2];
b=sort(a);
[v, i] = ismember(b,a);

[1 7 7 3 6 5 0] は有効ですが、[ 1 4 7 3 6 5 0] である必要があります。

これは後で処理できますが、上記の結果を返すと、よりエレガントになります。

4

1 に答える 1

2

sort探しているインデックスを正確に提供する2つの出力値バージョンがあります。

a = [1 4 3 10 8 2];
[b, idx] = sort(a);

出力

idx =
     1     6     3     2     5     4

NaNこれはsでも正しく機能します。

a = [1 NaN 4 2 10 8 2];
[b, idx] =sort(a);
>> idx
idx =
     1     4     7     3     6     5     2
>> b
b =
     1     2     2     4     8    10   NaN
于 2012-05-14T21:12:11.913 に答える