dos matrices que definen las coordenadas 2D, como índices de matriz, en Matlab / octava
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
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