两个数组在matlab / octave中定义2d坐标,作为数组索引

时间:2010-03-12 18:50:06

标签: matlab arrays indexing octave

我有一个2D数组,称之为'A'。我还有另外两个2D数组,称之为'ix'和'iy'。我想创建一个输出数组,其元素是x_idx和y_idx提供的索引对的A元素。我可以通过循环执行此操作,如下所示:


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

如果没有循环,我怎么能这样做?如果我输出= A(ix,iy),我会在(ix)X(iy)的整个范围内得到A的值。

谢谢你, 杰森

2 个答案:

答案 0 :(得分:11)

更快捷的方法是直接使用线性索引而无需调用SUB2IND:

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

...将矩阵A视为一维数组(按列顺序)

答案 1 :(得分:2)

这是单线方法,对大型矩阵来说效率不高

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

更清晰,更有效的方法是使用sub2ind。当ixiy具有相同数量的元素时,我已经合并了yuk对情况(如你的)的评论:

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

此外,请勿将xyij混淆为注释 - jx通常代表列和iy代表行。