简体   繁体   中英

Derive Matlab value matrix from Matlab key matrix and lookup vector

I have a Matlab object of integer keys in the range 1:1:7 eg

[3, 1, 4, 5, 6]

I also have a size 7 vector containing an associated value for each integer key, eg

vals = (10, 20, 30, 4000, 50, 60, 70)

what is the most efficient way to create a matrix of the values using the keys as indices, eg a matrix

[30, 10, 4000, 50, 60]

(in reality the key object is 6D). Must I loop?

For the case of a 1D matrix a general approach could be:

keys=[3, 1, 4, 5, 6];
vals = [10, 20, 30, 4000, 50, 60, 70]
m=vals(keys)

With this approach you use the values stored in the keys array as indices of the vals array. You can find more information about array insdexing here .

In a more general case in which keys has n rows (3 in the following example):

keys=[3, 1, 4, 5, 6;
      1 3 2 4 6 ;
      7 6 5 4 3];
vals = [10, 20, 30, 4000, 50, 60, 70]

m=reshape(vals(keys(:)),size(keys))

Hope this helps.

Qapla'

I think this should work. If I got the question.

inds = [3, 1, 4, 5, 6];

vals = inds;

vals(vals==1) = 10;
vals(vals==2) = 20;
vals(vals==3) = 30;
vals(vals==4) = 4000;
vals(vals==5) = 50;
vals(vals==6) = 60;

Is it like that?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM