7

我有一个二维数组,调用它A。我有另外两个二维数组,分别称为ixiy。我想创建一个输出数组,其元素是和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 视为一维数组(按列顺序)

于 2010-03-12T20:02:38.573 回答
3

这是一种对大型矩阵不是很有效的单线方法

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

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

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

另外,不要混淆xand yfor iandj符号 -通常表示列,andj表示行。xiy

于 2010-03-12T18:53:36.557 回答