due matrici che definiscono coordinate 2d, come indici di array, in MATLAB / ottava
Domanda
Ho un array 2D, lo chiamano 'A'. Ho altri due array 2D, li chiamano 'ix' e 'iy'. Vorrei creare una matrice di uscita cui elementi sono gli elementi di A alle coppie indice fornite da x_idx e y_idx. Posso fare questo con un ciclo come segue:
for i=1:nx
for j=1:ny
output(i,j) = A(ix(i,j),iy(i,j));
end
end
Come posso fare questo senza l'anello? Se faccio uscita = A (ix, iy), ottengo il valore di A in tutta la gamma di (ix) X (Ir).
Grazie, Jason
Soluzione
Un modo più veloce è quello di utilizzare indicizzazione lineare direttamente senza chiamare SUB2IND:
output = A( size(A,1)*(iy-1) + ix )
... pensare alla matrice A come un array 1D (ordine colonna-saggio)
Altri suggerimenti
Questo è il metodo di una riga che non è molto efficiente per grandi matrici
reshape(diag(A(ix(:),iy(:))),[ny nx])
Un metodo più chiara e più efficace sarebbe quella di utilizzare sub2ind . Ho inserito il commento di yuk per le situazioni (come la tua) quando ix
e iy
hanno lo stesso numero di elementi:
newA = A(sub2ind(size(A),ix,iy));
Inoltre, non confondere x
e y
per i
e j
in notazione - j
e x
rappresentano generalmente colonne e i
e y
rappresentano le righe