我有一个二维数组,称之为A
。我还有两个其他的二维数组,称之为ix
和iy
。我想创建一个输出数组,其元素是由ix
和iy
提供的索引对应的A
数组的元素。我可以使用循环来完成如下:
for i=1:nx
for j=1:ny
output(i,j) = A(ix(i,j),iy(i,j));
end
end
如何不使用循环来实现这个? 如果我使用 output = A(ix,iy)
,我会获得A在整个(ix)X(iy)范围内的值。
我有一个二维数组,称之为A
。我还有两个其他的二维数组,称之为ix
和iy
。我想创建一个输出数组,其元素是由ix
和iy
提供的索引对应的A
数组的元素。我可以使用循环来完成如下:
for i=1:nx
for j=1:ny
output(i,j) = A(ix(i,j),iy(i,j));
end
end
如何不使用循环来实现这个? 如果我使用 output = A(ix,iy)
,我会获得A在整个(ix)X(iy)范围内的值。
更快的方法是直接使用线性索引而不调用SUB2IND函数:
output = A( size(A,1)*(iy-1) + ix )
...将矩阵A视为一维数组(以列优先顺序)
output
最终会和ix
的大小相同。 - gnovice这是一种适用于小矩阵但不太适用于大矩阵的单行方法。
reshape(diag(A(ix(:),iy(:))),[ny nx])
newA = A(sub2ind(size(A),ix,iy));
x
和y
与i
和j
- 一般情况下,j
和x
代表列,i
和y
代表行。