duas matrizes que definem coordenadas 2D, como índices de matriz, em Matlab / oitava
Pergunta
Eu tenho uma matriz 2D, chamá-lo de 'A'. Eu tenho duas outras matrizes 2D, chamá-los de 'ix' e 'iy'. Gostaria de criar uma matriz de saída, cujos elementos são os elementos de A aos pares do índice fornecidos pelos x_idx e y_idx. Eu posso fazer isso com um loop da seguinte forma:
for i=1:nx
for j=1:ny
output(i,j) = A(ix(i,j),iy(i,j));
end
end
Como posso fazer isso sem o loop? Se eu fizer saída = A (ix, iy), eu recebo o valor de A em toda a gama de (ix) X (iy).
Obrigado, Jason
Solução
A maneira mais rápida é usar indexação linear diretamente sem chamar SUB2IND:
output = A( size(A,1)*(iy-1) + ix )
... penso da matriz A, tal como uma matriz de 1D (ordem direcção de coluna)
Outras dicas
Este é o método de uma linha que não é muito eficiente para grandes matrizes
reshape(diag(A(ix(:),iy(:))),[ny nx])
Um método mais claro e mais eficiente seria usar sub2ind . Eu incorporei o comentário de yuk para situações (como a sua), quando ix
e iy
têm o mesmo número de elementos:
newA = A(sub2ind(size(A),ix,iy));
Além disso, fazer x
não confundir e y
para i
e j
na notação - j
e x
geralmente representam colunas e i
e y
representam linhas