2012-07-12 17 views
11

Ho un vettore logico 1D, un array di celle e un valore di stringa che desidero assegnare.Assegnare un valore a più celle in MATLAB

ho provato "cella {} logico = stringa" ma ottengo il seguente errore:

The right hand side of this assignment has too few values to satisfy 
the left hand side. 

Hai la soluzione?

risposta

17

In realtà non è necessario utilizzare deal.

a = cell(10,1); % cell array 
b = rand(1,10)>0.5; % vector with logicals 
myString = 'hello'; % string 

a(b) = {myString}; 

Guardando l'ultima riga: sul lato sinistro ci sono la selezione di un sottogruppo di cellule dal a e dicendo che tutti devono essere uguale alla cella sul lato destro della strada, che è una cella contenente una stringa.

+0

Perfetto! Grazie per aver postato questo. Questo è molto più semplice dell'uso di 'deal', ma in qualche modo non mi sono mai reso conto di dover creare il lato destro in un array di celle prima di eseguire il compito. – zroth

+0

Hai vinto la risposta giusta per una maggiore semplicità;) (un anno dopo) –

13

Si può provare questo

a = cell(10,1); % cell array 
b = rand(1,10)>0.5; % vector with logicals 
myString = 'hello'; % string 

[a{b}] = deal(myString); 

Essa si traduce in:

a = 

    'hello' 
     [] 
     [] 
    'hello' 
    'hello' 
     [] 
    'hello' 
    'hello' 
     [] 
     [] 
+1

Bello! Era impossibile trovarlo su internet ... Puoi spiegare perché []? –

7

Come ha detto H.Muster, deal è il modo di andare qui. Il motivo delle parentesi è che (seguendo l'impostazione di H.Muster) a{b} restituisce un elenco separato da virgole; le parentesi devono essere posizionate attorno a questo elenco per concatenarlo in un vettore. Esecuzione help lists in Matlab potrebbe chiarire ulteriormente, come potrebbe la documentazione relativa comma-separated lists

Edit: Il answer fornito da user2000747 sembra molto più pulito rispetto all'utilizzo deal.

1

Un'altra soluzione può essere

a = cell(10,1); 
a([1,3]) = {[1,3,6,10]} 

Questo può sembrare un inutile aggiungere, ma dire che si vuole assegnare un vettore a 3 celle in un array di celle 1D di lunghezza 1e8. Se viene utilizzata una logica, ciò richiederebbe la creazione di una matrice logica di dimensioni quasi 100Mb.

Problemi correlati