How do I use an matrix of indices to reference values in another matrix without using a loop?

조회 수: 2(최근 30일)
Joseph Koval 2018년 3월 14일
댓글: Joseph Koval 2018년 3월 14일
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?

댓글을 달려면 로그인하십시오.

채택된 답변

Roger Stafford 2018년 3월 14일
[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);
댓글 수: 1표시숨기기 없음
Joseph Koval 2018년 3월 14일
Thanks Roger. Works like a charm!

댓글을 달려면 로그인하십시오.

범주

Find more on Matrix Indexing in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by