2012-07-12 4 views
11

Ich habe einen 1D logischen Vektor, ein Zellenarray und einen String-Wert, den ich zuweisen möchte.Weisen Sie mehreren Zellen in Matlab einen Wert zu

habe ich versucht, "Zelle {logische} = string", aber ich erhalte den folgenden Fehler:

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

Haben Sie die Lösung?

Antwort

17

Sie müssen nicht wirklich deal verwenden.

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

a(b) = {myString}; 

in der letzten Zeile der Suche: auf der linken Seite, wir sind eine Untergruppe von Zellen, die aus a auswählen und sagen, dass sie sollten alle die Zelle auf der rechten Seite gleich, das eine Zelle ist eine Zeichenfolge enthält.

+0

Perfekt! Danke für das Posten. Das ist viel einfacher als die Verwendung von "deal", aber ich habe es irgendwie nie verstanden, die rechte Seite in ein Zellenfeld zu bringen, bevor ich die Aufgabe mache. – zroth

+0

Sie gewinnen die richtige Antwort für größere Einfachheit;) (ein Jahr später) –

13

können Sie diese versuchen

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

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

Es ergibt sich in:

a = 

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

Schön! Es war unmöglich, es im Internet zu finden ... Können Sie erklären, warum das []? –

7

Wie H.Muster sagte deal ist der Weg hier zu gehen. Der Grund für die Klammern ist, dass (nach H.Musters Setup) a{b} eine durch Kommas getrennte Liste zurückgibt; Die Klammern müssen um diese Liste herum angeordnet werden, um sie zu einem Vektor zu verketten. Laufen help lists in Matlab könnte weiter klären, wie es in der Dokumentation auf comma-separated lists

Edit: Die answer von user2000747 vorgesehen scheint viel sauberer als deal verwenden.

1

können andere Lösung

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

sein Dies mag eine unnötige Add sein, aber sagen, dass Sie einen Vektor zu 3 Zellen in einem 1D-Zellen-Array mit einer Länge von 1e8 zuweisen will. Wenn eine logische verwendet wird, würde dies die Erstellung eines logischen Arrays mit einer Größe von fast 100 MB erfordern.