我有一个二维数组,调用它A
。我有另外两个二维数组,分别称为ix
和iy
。我想创建一个输出数组,其元素是和A
提供的索引对的元素。我可以用一个循环来做到这一点,如下所示:ix
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 的值。
一种更快的方法是直接使用线性索引而不调用 SUB2IND:
output = A( size(A,1)*(iy-1) + ix )
...将矩阵 A 视为一维数组(按列顺序)
这是一种对大型矩阵不是很有效的单线方法
reshape(diag(A(ix(:),iy(:))),[ny nx])
更清晰、更有效的方法是使用sub2ind。我已经合并了 yuk 对当ix
和iy
具有相同数量元素的情况(如你的情况)的评论:
newA = A(sub2ind(size(A),ix,iy));
另外,不要混淆x
and y
for i
andj
符号 -通常表示列,andj
表示行。x
i
y