2010-05-05 15 views
8

Hej, mam trochę kłopotów. Próbując przypisać tablicę o zmiennej długości 1d do różnych wartości tablicy, np."Tablica tablic" w Matlab?

a(1) = [1, 0.13,0.52,0.3]; 
a(2) = [1, 0, .268]; 

Jednakże pojawia się błąd:

??? In an assignment A(I) = B, the number of elements in B and 
I must be the same. 

Error in ==> lab2 at 15 
a(1) = [1, 0.13,0.52,0.3]; 

Przypuszczam, oznacza to, że spodziewa wartość skalarna zamiast tablicy. Czy ktoś wie, jak przypisać tablicę do tej wartości?

Wolałbym nie definiują go bezpośrednio jako 2d tablicy, jak to robią dla rozwiązania różnych problemów w pętli

Edit: Got it!

a (1,1: 4) = [1, 0,13,0,52,0,3];

a (2,1: 3) = [1, 0, .268];

+0

mają cię preallocated a? Jeśli tak, to jak? –

+0

Nie dokonałem wstępnej alokacji, nie myślałem, że muszę – bcoughlan

+0

Z tego, co wiem, nie można tego zrobić za pomocą tablic. Jeśli chcesz przechowywać tablicę w jednym adresie, wypróbuj typy danych komórki lub struct. Jeśli mogę zapytać konkretnie, co powstrzymuje cię od korzystania z tablicy 2D? –

Odpowiedz

13

Co prawdopodobnie chciał napisać było

a(1,:) = [1, 0.13,0.52,0.3]; 
a(2,:) = [1, 0, .268]; 

tj The pierwszy wiersz jest [1, 0.13,0.52,0.3] a drugi wiersz jest [1, 0, .268]. Nie jest to możliwe, bo jaka byłaby wartość (2,4)?

Istnieją dwa sposoby rozwiązania problemu.

(1) Stosować tablice komórkowe

a{1} = [1, 0.13,0.52,0.3]; 
a{2} = [1, 0, .268]; 

(2) Jeśli znasz maksymalną możliwą liczbę kolumn twoje rozwiązania będą miały można przydzielenia swoją tablicę i napisać w wynikach jak tak (jeżeli nie przydzielenia będziesz dostać uzupełnianie zerami. istnieje również ryzyko spowolnienia pętli dużo, jeśli istnieje wiele powtórzeń, ponieważ tablica będzie musiała zostać odtworzone w każdej iteracji.

a = NaN(nIterations,maxNumCols); %# this fills the array with not-a-numbers 

tmp = [1, 0.13,0.52,0.3]; 
a(1,1:length(tmp)) = tmp; 
tmp = [1, 0, .268]; 
a(2,1:length(tmp)) = tmp; 
+0

Z metodą (1), jeśli wiedziałeś, jak długo każda z macierzy ma być (każda z nich ma inną długość), czy istnieje sposób na zainicjowanie "a", abyś mógł wstępnie przydzielić pamięć? – Edd

+1

@clairharrison: tak. '[a {1:33}] = deal (zera (20,4));' Zauważ, że jeśli 'a' zostało wcześniej zadeklarowane, musisz wyczyścić je lub jawnie zadeklarować tablicę komórek jako' a = komórka (1,33) ". – Jonas