4

例えば

私はベクトルを持っています:

a=[4 4 15 15 9 9 7 7];

すべての 4 を 1 に、すべての 15 を 2 に、9 を 3 に、7 を 4 に効率的に置き換えるにはどうすればよいですか? 繰り返しコーディングする代わりに:

a(a==4)=1; a(a==15)=2; a(a==9)=3; a(a==7)=4; ....

数が多すぎて交換できない場合は?

どうもありがとうございました!

4

2 に答える 2

8

元の値と置換された値の間に直接的な関係がない「任意の」置換が本当に必要な場合は、次を使用できますismember

>> map = [4 1; 15 2; 9 3; 7 4];
>> [~, loc] = ismember(a, map(:,1));
>> a(:) = map(loc,2)

a =

     1     1     2     2     3     3     4     4

より大きなコンテキストが何であるかに応じてunique、同様のことをしているように見えるので、 を確認することをお勧めします。この場合、例えば:

>> [~,~,a2] = unique(a, 'stable')

a2 =

     1     1     2     2     3     3     4     4

これはあなたの例で機能し、出現順序に基づいて独自のものを作成するため、マップを作成する必要はありません。

または、お使いのバージョンの Matlab'stable'が unique` のプロパティよりも古い場合は、

>> [~,~,a2] = unique(a)

a2 =

     1     1     4     4     3     3     2     2

これはあなたの置換に似ていますが、これらの数字はの個別の要素のソートされaたリスト内の各要素のインデックスを参照していますが、あなたの例ではソートされていないインデックスを使用しているようですが、これはあなたの例では任意の選択かもしれません.

于 2013-11-06T12:21:07.577 に答える