Quickest way to get points in a matrix given two 1-D arrays?

1 visualización (últimos 30 días)
Let's say that A is an NxN matrix, and B and C are 1-D arrays of the same size, containing numbers between 1 and N.
Is there a better way than going through a "for loopvar=1:length(B)" loop to get the values of A that correspond to the (Bi, Ci)
Example: A is a 5x5 matrix B contains [1 3 5 2 4 5] C contains [2 1 4 3 5 2]
What would be the quickest way to get:
  • A(1,2) (Corrseponding to A(B(1), C(1)))
  • A(3,1) (Corrseponding to A(B(2), C(2)))
  • A(5,4)
  • A(2,3)
  • A(4,5)
  • A(5,2) (Corrseponding to A(B(6), C(6)))
I'd like the quickest way to get this, since I need to run this calculation an enormous number of times with matrices much larger than a 5x5.

Respuesta aceptada

Honglei Chen
Honglei Chen el 27 de Feb. de 2012
A(sub2ind(size(A),B(:),C(:)))

Más respuestas (1)

Sean de Wolski
Sean de Wolski el 27 de Feb. de 2012
Apart = diag(A(B(:),C(:)))
  3 comentarios
Sean de Wolski
Sean de Wolski el 27 de Feb. de 2012
True, but for small index vectors it's faster, i.e. 5 elements
. I tested it the usual way for my reply in this question:
http://www.mathworks.com/matlabcentral/answers/11082-how-do-i-index-into-a-2d-matrix-using-two-equal-length-r-and-c-vectors
James
James el 28 de Feb. de 2012
I like this for smaller sets, but I'm running a Monte carlo simulation with several thousand data points. The other answer is quicker for the larger data sets I'm using. Still, this is a good trick for smaller sets. It never hurts to have multiple ways of solving things.

Iniciar sesión para comentar.

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by