Use Indexing for more than 1 dimension of array simultaneously
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponses (3)
Fangjun Jiang
le 25 Juil 2023
Modifié(e) : Fangjun Jiang
le 25 Juil 2023
matrix(sub2ind(size(matrix),(1:10)',idx))
0 commentaires
the cyclist
le 25 Juil 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 commentaires
James Tursa
le 25 Juil 2023
Modifié(e) : James Tursa
le 25 Juil 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 commentaire
Walter Roberson
le 25 Juil 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.
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!