How to map one array elements to another array elements?

74 次查看(过去 30 天)
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?

采纳的回答

Stephen23
Stephen23 2022-7-29
编辑:Stephen23 2022-7-29
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

更多回答(1 个)

dpb
dpb 2022-7-29
编辑:dpb 2022-7-29
>> 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.

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

标签

产品

Community Treasure Hunt

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

Start Hunting!

Translated by