Maybe cell array of character vectors only ?
Map between two cell arrays
14 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Nicolas Douillet
le 11 Déc 2019
Modifié(e) : Nicolas Douillet
le 11 Déc 2019
Hi,
I want to map two cell arrays.
Following the Containers.Map documentation it is possible : "Keys, specified as a numeric array, cell array of character vectors, or string array."
But if I try :
V = num2cell(rand(5,3));
K = num2cell([1 2; 3 4; 5 6; 1 2; 3 4]);
Then :
M = containers.Map(K,V);
I get the error :
Error using containers.Map
Unsupported key specified. See documentation for valid key types.
However K and V are both 5 x 1 cell arrays. What am I missing here ?
Thanks for help.
Nicolas
Edit : I would like each row of V matching with its key row in K.
7 commentaires
Stephen23
le 11 Déc 2019
Modifié(e) : Stephen23
le 11 Déc 2019
"You are right, there may be several values for a given key. "
In that case, if you use a key with multiple values do you expect MATLAB to return:
- one value (e.g. the last one defined using that key), or
- all of the values that have that key?
Please state your preference.
Réponse acceptée
Stephen23
le 11 Déc 2019
"All the values of course."
Then you cannot use containers.Map: even if you manage to sort out everything else (those numeric inputs, rows, etc) it will only return one value (the last one) if a key has been defined multiple times:
>> K = { 'x', 'y', 'x'};
>> V = {'cat','sat','mat'};
>> C = containers.Map(K,V);
>> C('x')
ans =
mat
However you could easily use basic MATLAB indexing
>> V = rand(5,3)
V =
0.81472 0.09754 0.15761
0.90579 0.2785 0.97059
0.12699 0.54688 0.95717
0.91338 0.95751 0.48538
0.63236 0.96489 0.80028
>> K = [1,2;3,4;5,6;1,2;3,4]
K =
1 2
3 4
5 6
1 2
3 4
>> want = [3,4];
>> X = ismember(K,want,'rows');
>> V(X,:)
ans =
0.90579 0.2785 0.97059
0.63236 0.96489 0.80028
0 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!