2012-07-12 16 views
11

Mam wektor logiczny 1D, tablicę komórek i wartość ciągu, który chcę przypisać.Przypisywanie wartości do wielu komórek w Matlab

Próbowałem „komórka {} = logiczny ciąg”, ale pojawia się następujący błąd:

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

Czy masz rozwiązanie?

Odpowiedz

17

W rzeczywistości nie trzeba używać deal.

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

a(b) = {myString}; 

Patrząc na ostatniej linii: na lewej stronie mamy wyboru podzbioru komórek z a i mówiąc, że wszystkie one powinny wynosić komórkę po prawej stronie, która jest komórką zawierającą ciąg.

+0

Idealny! Dzięki za zamieszczenie tego. Jest to o wiele prostsze niż użycie 'deal', ale jakoś nigdy nie podniosłem potrzeby ustawienia prawej strony w tablicy komórek przed wykonaniem zadania. – zroth

+0

Wygrywasz właściwą odpowiedź dla większej prostoty;) (rok później) –

13

Można spróbować tej

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

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

Skutkuje:

a = 

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

Nice! Nie można go znaleźć w Internecie ... Czy możesz wyjaśnić, dlaczego []? –

7

Jak powiedział H.Muster, deal jest do zrobienia tutaj. Powód nawiasów polega na tym, że (po konfiguracji H.Mustera) a{b} zwraca listę rozdzielaną przecinkami; nawiasy muszą być umieszczone wokół tej listy, aby połączyć ją w wektor. Uruchamianie help lists w Matlab może dodatkowo wyjaśnić, jak można dokumentację comma-separated lists

EDIT:answer dostarczone przez user2000747 wydaje się o wiele czystsze niż przy użyciu deal.

1

Innym rozwiązaniem może być

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

To może wydawać się zbędnym dodatek, ale powiedzieć, że chce przypisać wektor do 3 ogniw w 1D tablicy komórek o długości 1E8. W przypadku użycia logiki wymagałoby to utworzenia logicznej tablicy wielkości prawie 100 Mb.

Powiązane problemy