两个定义2D坐标的数组,作为数组索引

问题描述 投票:7回答:2

我有一个2D数组,称为A。我还有另外两个2D数组,分别称为ixiy。我想创建一个输出数组,其元素是Aix提供的索引对中iy的元素。我可以通过如下循环进行此操作:

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值。

matlab arrays indexing octave
2个回答
11
投票

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

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

...认为矩阵A是一维数组(按列顺序)


3
投票

这是单行方法,对于大型矩阵而言效率不高

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

一种更清晰,更有效的方法是使用sub2ind。当ixiy具有相同数量的元素时,我已将yuk的注释纳入情况(如您的情况):

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

此外,请不要将xyij混淆为符号-jx通常表示列,iy表示行。

© www.soinside.com 2019 - 2024. All rights reserved.