例えば
私はベクトルを持っています:
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; ....
数が多すぎて交換できない場合は?
どうもありがとうございました!
元の値と置換された値の間に直接的な関係がない「任意の」置換が本当に必要な場合は、次を使用できます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
たリスト内の各要素のインデックスを参照していますが、あなたの例ではソートされていないインデックスを使用しているようですが、これはあなたの例では任意の選択かもしれません.