2012-05-16 3 views
0

Я пытаюсь создать контейнер, в котором есть три списка, где каждый список представляет собой список произвольных размеров произвольного размера. Вот мой поезд мысли о том, что я буду делать (не очень опытный в 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

Смежные вопросы