a = [1 1 1; 2 2 2; 3 3 3];
b = [1 2 3];
ベクトルを取得する関数を1つ呼び出すにはどうすればよいですか?v[i] = a[b[i],i]
?matlabの行列の各列から1つの要素を選択する方法は?
a = [1 1 1; 2 2 2; 3 3 3];
b = [1 2 3];
ベクトルを取得する関数を1つ呼び出すにはどうすればよいですか?v[i] = a[b[i],i]
?matlabの行列の各列から1つの要素を選択する方法は?
v = a(sub2ind(size(a), b, 1:length(b)))
sub2ind
添え字を1つのインデックスに変換します。
あなたの説明に非常に近づけて試してみる別のことは、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
関連機能arrayfun
、cellfun
、およびstructfun
にも同様の用途があり、不思議なことに権限を与えています。 This Joel article私は信者であると確信しました。