Pregunta

Tengo una matriz 2D, lo llaman 'A'. Tengo otras dos matrices 2D, los llaman 'ix' y 'iy'. Me gustaría crear una matriz de salida cuyos elementos son los elementos de A en los pares de índices proporcionados por x_idx y y_idx. Puedo hacer esto con un bucle de la siguiente manera:


for i=1:nx
    for j=1:ny
        output(i,j) = A(ix(i,j),iy(i,j));
    end
end

¿Cómo puedo hacer esto sin el bucle? Si hago salida = A (ix, iy), consigo el valor de A sobre toda la gama de (ix) X (iy).

Gracias, Jason

¿Fue útil?

Solución

Una forma más rápida es utilizar indexación lineal directamente sin llamar SUB2IND:

output = A( size(A,1)*(iy-1) + ix )

... pensar en la matriz A como una matriz de 1D (orden de la columna-wise)

Otros consejos

Este es el método de una sola línea que no es muy eficiente para grandes matrices

reshape(diag(A(ix(:),iy(:))),[ny nx])

Un método más clara y más eficiente sería utilizar sub2ind . He incorporado el comentario de puaj para situaciones (como la suya) cuando ix y iy tienen el mismo número de elementos:

newA = A(sub2ind(size(A),ix,iy));

Además, no hay que confundir x y y para i y j en notación - j y x generalmente representan columnas y i y y representan filas

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top