Using matrix index coming from max function to get values from another matrix
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Dear All, I have the following problem:
A = randn(5,5);
B = randn(5,5);
C = randn(5,5);
D = cat(3,A,B,C);
E = randn(5,5,3);
[M,I] = max(D,[],3);
How to use the index matrix I to get respective elements from matrix E ? It means for every combination of i and j I want to take the value of E(i,j,:) whose index is given by the value of I(i,j).
I will be grateful for any comments!
0 commentaires
Réponse acceptée
Star Strider
le 8 Nov 2017
This seems to work:
A = randn(5,5);
B = randn(5,5);
C = randn(5,5);
D = cat(3,A,B,C);
E = randn(5,5,3);
[M,I] = max(D,[],3);
IL = sub2ind(size(D), cumsum(ones(size(D,1)),1), cumsum(ones(size(D,2)),2), I);
Check = D(IL); % Check To Be Sure Indexing Is Correct
Result = E(IL);
The ‘Check’ assignment demonstrates that the indexing reproduces ‘M’. It is not necessary for the code, and can be deleted.
4 commentaires
Star Strider
le 8 Nov 2017
My code should work for all sizes of 3D matrices, since it uses the size function to create the relevant index matrices. (My code could be extended using the same idea to 4D and higher-dimension matrices. I have not explored that possibility.)
MATLAB actually addresses matrices with ‘linear indexing’, a segment of adjacent memory locations, not subscripts. The sub2ind function converts subscript indices to linear indices, that in many instances are the only effective way to index into a matrix, as with your matrix here. (The related ind2sub function does the reverse.)
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Matrices and Arrays 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!