我有一个2D数组,称为A
。我还有另外两个2D数组,分别称为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。当ix
和iy
具有相同数量的元素时,我已将yuk的注释纳入情况(如您的情况):
newA = A(sub2ind(size(A),ix,iy));
此外,请不要将x
和y
的i
和j
混淆为符号-j
和x
通常表示列,i
和y
表示行。