How do I use an matrix of indices to reference values in another matrix without using a loop?
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Joseph Koval
le 14 Mar 2018
Commenté : Joseph Koval
le 14 Mar 2018
I have a matrix that contains 20 vertical temperature values. It is of size 20 X 751 X 1500. Call this matrix alltemps.
I have another matrix that contains an index into the first dimension of the temperature. It is of size 1 X 751 X 1500. Call this matrix tempindex.
I want to create another 1 X 751 X 1500 matrix that is the temperature value from alltemps at the index pointed to by tempindex for all 751 X 1500 point in alltemps. Call this new matrix savedtemp
For example at 200 X 200, the temperature values in alltemps are:
280 282 284 286 288 290 292 294 296 298 300 302 304 306 308 310 312 314 316 318
And at 200 X 200, the (index) value in tempindex is 3.
So, the value in savedtemp would be 284 at 200 X 200 (i.e. the 3rd value in the temperature dimension of alltemps at 200 X 200.)
Is there a way to make a blanket (matrix-wise) assignment for every point in in the 751 X 1500 vector like this without having to run a loop?
0 commentaires
Réponse acceptée
Roger Stafford
le 14 Mar 2018
[a,b,c] = size(alltemps); % tempindex must be 1 x b x c
savedtemp = reshape(alltemps(reshape(tempindex,1,[])+(0:a:a*(b*c-1))),1,b,c);
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Resizing and Reshaping Matrices 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!