我有一个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的值。
谢谢你, 杰森
答案 0 :(得分:11)
更快捷的方法是直接使用线性索引而无需调用SUB2IND:
output = A( size(A,1)*(iy-1) + ix )
...将矩阵A视为一维数组(按列顺序)
答案 1 :(得分:2)
这是单线方法,对大型矩阵来说效率不高
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
代表行。