2016-03-29 14 views
0

1:1:7の範囲の整数キーのMatlabオブジェクトを持っています。Matlabキー行列とルックアップベクトルからMatlab値行列を導出する

[3, 1, 4, 5, 6] 

また、各整数キーに関連する値を含むサイズ7のベクトルがあります。

vals = (10, 20, 30, 4000, 50, 60, 70) 

キーをインデックスとして使用して値の行列を作成する最も効率的な方法は何ですか。マトリックス

[30, 10, 4000, 50, 60] 

(実際にはキーオブジェクトは6Dです)。私はループする必要がありますか?

+0

「n」ディメンションの場合に 'keys'と' vals'がどのように定義されているか説明できますか? –

+0

明確にするために質問を編集しました。 keysオブジェクトは整数1〜7のみからなるn次元配列で、ルックアップベクトルは合計7つのエントリです。 – barnhillec

+0

'keys'に6行ありますか? –

答えて

1

これはうまくいくと思います。もし私が質問を持っていれば。

inds = [3, 1, 4, 5, 6]; 

vals = inds; 

vals(vals==1) = 10; 
vals(vals==2) = 20; 
vals(vals==3) = 30; 
vals(vals==4) = 4000; 
vals(vals==5) = 50; 
vals(vals==6) = 60; 

それはそうですか?

+0

それは良い方法です、ありがとうございます。私は実際にそれをループすることができます:n = 1の場合:numel(inds) vals(vals == n)= inds(n); 終了 – barnhillec

3

は1次元マトリクスの場合のための一般的なアプローチは次のようになります。この方法で

keys=[3, 1, 4, 5, 6]; 
vals = [10, 20, 30, 4000, 50, 60, 70] 
m=vals(keys) 

もしvals配列のインデックスとしてkeys配列に格納された値を使用します。 array insdexing hereの詳細については、こちらをご覧ください。 keysn行を有する、より一般的なケース(以下の例では3)において

:これは役立つ

keys=[3, 1, 4, 5, 6; 
     1 3 2 4 6 ; 
     7 6 5 4 3]; 
vals = [10, 20, 30, 4000, 50, 60, 70] 

m=reshape(vals(keys(:)),size(keys)) 

ホープ。

Qapla'