J'ai un vecteur logique 1D, un tableau de cellules et une valeur de chaîne que je veux attribuer.
J'ai essayé "cell {logical} = string" mais j'obtiens l'erreur suivante:
The right hand side of this assignment has too few values to satisfy
the left hand side.
Avez-vous la solution?
Vous n'avez pas réellement besoin d'utiliser deal
.
a = cell(10,1); % cell array
b = Rand(1,10)>0.5; % vector with logicals
myString = 'hello'; % string
a(b) = {myString};
En regardant la dernière ligne: à gauche, nous sélectionnons un sous-ensemble de cellules de a
et nous leur disons qu'elles doivent toutes être égales à la cellule de droite, qui contient une chaîne.
Tu peux essayer ça
a = cell(10,1); % cell array
b = Rand(1,10)>0.5; % vector with logicals
myString = 'hello'; % string
[a{b}] = deal(myString);
Il en résulte:
a =
'hello'
[]
[]
'hello'
'hello'
[]
'hello'
'hello'
[]
[]
Comme H.Muster l'a dit, deal
est la voie à suivre ici. La raison des crochets est que (suivant la configuration de H.Muster), a{b}
renvoie une liste séparée par des virgules; les crochets doivent être placés autour de cette liste pour la concaténer en un vecteur. Exécuter help lists
dans Matlab pourrait préciser, de même que la documentation sur listes séparées par des virgules
Edit: Le réponse fourni par l'utilisateur2000747 semble beaucoup plus propre que d'utiliser deal
.
Une autre solution peut être
a = cell(10,1);
a([1,3]) = {[1,3,6,10]}
Cela peut sembler être un ajout inutile, mais dites que vous voulez affecter un vecteur à 3 cellules dans un tableau de cellules 1D de longueur 1e8. Si une logique est utilisée, cela nécessiterait la création d'un tableau logique d'une taille proche de 100 Mo.