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

Foi útil?

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

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top