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

È stato utile?

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

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top