MATLAB Answers

0

containers.Map keys value not match

Asked by Safwana Razak on 8 Nov 2019 at 9:46
Latest activity Commented on by Walter Roberson
on 11 Nov 2019 at 1:27
Hi,
i try using containers.Map function to automate my table value into certain keys but end end up with this error:
"Specified key type does not match the type expected for this container."
i refer back my code, the data for key data is correct data type. anyone can assist me how to solve this problem?
here i attach my code:
labelMap = containers.Map('KeyType','double','ValueType','char');
keySet = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
valueSet = {'air_conditioner','car_horn','children_playing','dog_bark','drilling','engine_idling','gun_shot','jackhammer','siren','street_music'};
labelMap = containers.Map(keySet,valueSet);
current_class = reference_table(strcmp(reference_table.fsID, PCG.filename), :).classID;
feature_table.class = {labelMap(current_class)};
thanks.

  2 Comments

Daniel M
on 9 Nov 2019 at 6:30
What is the output of current_class?
my output should be keyset value, 0 or 1 or 2 and so on. i try to do classification actually.

Sign in to comment.

1 Answer

Answer by Walter Roberson
on 9 Nov 2019 at 6:46
Edited by Walter Roberson
on 11 Nov 2019 at 1:25

We can suspect strongly from your use of {} around the call to labelMap that you are expecting current_class to be a vector, and expecting the call to labelMap to return a comma separated list, that you would then capture all of in the {} .
However, you defined the key as scalar, not as vector, and passing a vector key in where a scalar key is expected is going to get you exactly that error message.
You should instead use
feature_table.class = arrayfun(@(C) labelMap(C), current_class, 'uniform', 0);

  2 Comments

my expecting output is keyset value, 0 or 1 or 2 and so on.
Walter Roberson
on 11 Nov 2019 at 1:27
Your current_class is returning a non-scalar under at least one condition. There might not be a match, or there might be multiple matches.

Sign in to comment.