7

私は 2D 配列を持っています。それを と呼びますA。他に 2 つの 2D 配列があり、それらixを および と呼びますiy。要素がとAによって提供されるインデックス ペアの要素である出力配列を作成したいと思います。次のようにループでこれを行うことができます。ixiy

for i=1:nx
    for j=1:ny
        output(i,j) = A(ix(i,j),iy(i,j));
    end
end

ループなしでこれを行うにはどうすればよいですか? を実行するoutput = A(ix,iy)と、(ix)X(iy) の範囲全体で A の値が得られます。

4

2 に答える 2

11

より高速な方法は、SUB2IND を呼び出さずに線形インデックスを直接使用することです。

output = A( size(A,1)*(iy-1) + ix )

... 行列 A を 1D 配列と考えます (列方向の順序)

于 2010-03-12T20:02:38.573 に答える
3

これは 1 行の方法であり、大規模な行列ではあまり効率的ではありません

reshape(diag(A(ix(:),iy(:))),[ny nx])

より明確で効率的な方法は、sub2indを使用することです。同じ数の要素があるix場合(あなたのような)の状況について、yukのコメントを組み込みました。iy

newA = A(sub2ind(size(A),ix,iy));

xまた、 and yforijin 表記jを混同しないでください。x通常、 and は列iを表し、andは行をy表します。

于 2010-03-12T18:53:36.557 に答える