Use Indexing for more than 1 dimension of array simultaneously
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I have a 10 by 3 matrix:
matrix = rand(10, 3);
I have an indexing array which selects a column number for each row:
idx = [1; 2; 2; 3; 1; 2; 1; 2; 3; 3];
I want to produce a 10x1 array which uses the above index array to extract the respective column number element at each row. Without using a for loop.
I have tried:
output = matrix(1:10, idx)
This produces a 10x10 matrix.
0 comentarios
Respuestas (3)
Fangjun Jiang
el 25 de Jul. de 2023
Editada: Fangjun Jiang
el 25 de Jul. de 2023
matrix(sub2ind(size(matrix),(1:10)',idx))
0 comentarios
the cyclist
el 25 de Jul. de 2023
matrix = rand(10, 3);
idx = [1; 2; 2; 3; 1; 2; 1; 2; 3; 3];
linearIndex = sub2ind(size(matrix),1:10,idx');
matrix(linearIndex)
0 comentarios
James Tursa
el 25 de Jul. de 2023
Editada: James Tursa
el 25 de Jul. de 2023
Yet another way using linear indexing (showing what sub2ind( ) does internally):
matrix = rand(10, 3);
idx = [1; 2; 2; 3; 1; 2; 1; 2; 3; 3];
m = size(matrix,1);
matrix( (1:m)' + m*(idx-1) )
And to show that it is the same as other solutions:
matrix(sub2ind(size(matrix),(1:m)',idx))
1 comentario
Walter Roberson
el 25 de Jul. de 2023
Note that linear indexing is what happens internally when you use sub2ind: sub2ind is a helper function to make it easier to calculate the correct linear indexing.
Ver también
Categorías
Más información sobre Matrix Indexing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!