How to map one array elements to another array elements?

72 vues (au cours des 30 derniers jours)
Atanu
Atanu le 29 Juil 2022
Modifié(e) : dpb le 29 Juil 2022
I have an output array which shows to which feeder the animal goes in each trial for 6 trials. There could be only 4 feeders(1,2,3,4)
feederNum = [1 2 2 4 3 1]
The corresponding concentration of reward at the feeders are
feeder1 : 40, feeder2 : 30, feeder3: 20, feeder4: 10
I want to get the corresponding concentraions for the feederNum array. So my desired output is
conc = [40 30 30 10 20 40]
I am wondering if there is any key-value like feature to achieve this?

Réponse acceptée

Stephen23
Stephen23 le 29 Juil 2022
Modifié(e) : Stephen23 le 29 Juil 2022
Method one: indexing:
num = [1,2,2,4,3,1];
val = [40,30,20,10];
out = val(num)
out = 1×6
40 30 30 10 20 40
Method two: interpolation:
out = interp1(val,num)
out = 1×6
40 30 30 10 20 40

Plus de réponses (1)

dpb
dpb le 29 Juil 2022
Modifié(e) : dpb le 29 Juil 2022
>> awardCoef=[-10,50];
>> conc=polyval(awardCoef,feederNum)
conc =
40 30 30 10 20 40
>>
More generically if isn't a polynomial (linear in this case) relationship, use lookup tables...
award=40:-10:10;
conc=award(feederNum);
Here award can be anything for each; just has to have a 1:1 entry to the number of values in feederNum -- and, of course the values of feederNum are from 1:numel(feederNum) since MATLAB arrays are one-based indexing.
If must change the numbering system to not be 1:N, then interp1 with the 'nearest' option can be used as the lookup table; same identical idea but not a direct array indexing operation.

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Tags

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by