Mam zagnieżdżoną tablicę struktury t w formacie t.a.b = wartość, gdzie a i a są po prostu losowymi ciągami. t może mieć dowolną liczbę a jako nazwy pól, a każda z nich może mieć dowolną liczbę b jako nazwy pól. Muszę wykonać kopię t, zwaną x, ale ustawić wszystkie x.a.b = 0. Dodatkowo potrzebuję stworzyć kolejną tablicę struktury w postaci y.a = 0 dla wszystkich wt. W tej chwili używam zagnieżdżonego rozwiązania pętli for, ale jest zbyt wolny, jeśli jest ich zbyt wiele a i b. Czy ktoś może mi powiedzieć, czy istnieje sposób na wektorowanie tej zagnieżdżonej pętli lub jakiejkolwiek innej operacji w tym kodzie, aby ten kod działał szybciej? Dzięki.Matlab jak wektorować podwójną pętlę? Ustawianie wartości dla macierzy zagnieżdżonych jest bardzo wolne.
names1 = fieldnames(t);
x = t;
y = {};
for i=1:length(names1)
y.(names1{i}) = 0;
names2 = fieldnames(x.(names1{i}));
for j=1:length(names2)
x.(names1{i}).(names2{j}) = 0;
end
end
Próbka:
if t is such that
t.hello.world = 0.5
t.hello.mom = 0.2
t.hello.dad = 0.8
t.foo.bar = 0.7
t.foo.moo = 0.23
t.random.word = 0.38
then x should be:
x.hello.world = 0
x.hello.mom = 0
x.hello.dad = 0
x.foo.bar = 0
x.foo.moo = 0
x.random.word = 0
and y should be:
y.hello = 0
y.foo = 0
y.random = 0
może Pan podać kilka przykładowych wejść z odpowiednimi wyjściami ? I wskazać, co masz na myśli przez "wiele" i "wolno"? –
Wiele może zawierać nawet do kilkudziesięciu tysięcy kombinacji t.a.b i powolnych, jak w godzinach. – user2017502
Naprawiono literówkę w kodzie, na pierwszy rzut oka jedyne co zauważyłem, to to, że nie dokonałeś wstępnej alokacji y, nie wiesz ile będzie tego wpływu. Czy możesz uruchomić go na kilka minut i podać wyniki profilera? –