2011-11-18 8 views

答えて

5
v = a(sub2ind(size(a), b, 1:length(b))) 

sub2ind添え字を1つのインデックスに変換します。

0

あなたの説明に非常に近づけて試してみる別のことは、arrayfun機能を使用することができます。

まず、値xを目的の出力にマップする関数を定義します。

fn = @(x) a(b(x), x); 

iベクトルの各入力でその関数を呼び出します。

i = 1:3; 
v = arrayfun(fn, i); 

それとも、これはすべての明白な方法では、単一のラインで行うことができます

v = arrayfun(@(x) a(b(x), x), 1:3); 

このarrayfunは、単純に以下のループの省略形です:

for ixLoop = 1:3 
    v(ixLoop) = a(b(ixLoop),ixLoop); 
end 

関連機能arrayfuncellfun、およびstructfunにも同様の用途があり、不思議なことに権限を与えています。 This Joel article私は信者であると確信しました。

関連する問題