2012-05-16 61 views
0

我想創建一個容器,其中有3個列表,其中每個列表是任意大小的列表的任意大小的列表。下面是我的思路是什麼我會做(在Matlab不是很有經驗,所以可能有這樣做的更優雅的方式)如何創建任意大小列表的列表

my_data = [[] [] []]; 

for m = 1 : M 
    list1 = []; 
    list2 = []; 
    list3 = []; 

    for n = 1 : N 
     if something holds 
     list1 = [list1 ftn(n)]; 
     list2 = [list2 ftn2(n)]; 
     list3 = [list3 ftn3(n)]; 
     end 
    end 

    if something else holds 
     my_data(1) = [my_data(1) list1]; 
     my_data(2) = [my_data(2) list2]; 
     my_data(3) = [my_data(3) list3]; 
    end 
end 

此代碼實際上並不雖然運行...怎麼辦我在Matlab中做這樣的事情?

回答

2

這是cell arrays的用途。 Matlab不會讓你做非矩形的規則數組(正如你發現的那樣),但是單元陣列可以讓你做一般的對象數組,包括標準數組。

my_data = {{} {} {}}; 

for m = 1 : M 
    list1 = []; 
    list2 = []; 
    list3 = []; 
    for n = 1 : N 
     if something 
      list1 = [list1 something]; 
      list2 = [list2 something]; 
      list3 = [list3 something]; 
     end 
    end 

    if something 
     my_data{1}{end+1} = list1; 
     my_data{2}{end+1} = list2; 
     my_data{3}{end+1} = list3; 
    end 
end 
+0

謝謝。這很好,但會帶來稍微不理想的行爲,這可能是我的初始代碼的結果。我希望my_data {1} {5}包含添加到my_data {1}的第五個列表,但所有列表都連接在一起。 – zebra

+0

@zebra對,爲了更密切地複製你的代碼,我做了一些愚蠢的事情。我編輯它以分配給'my_data {1} {end + 1}';應該做你想做的事。 – Dougal