Отметить значения из цикла для каждой итерации - PullRequest
1 голос
/ 17 февраля 2011

Я хочу отметить каждое значение, которое выходит из моего цикла, значением.

Скажем, у меня есть переменное число значений, которые выходят из каждой итерации.Я хочу, чтобы эти значения были помечены, из какой итерации они вышли.

как 1-1, 2-1, 3-1,

1-2, 2-2, 3-2, 4-2,

и т. Д.

где первое число - это значение цикла, а второе - подсчет, с какой итерации оно пришло.Я чувствую, что есть способ, которым я просто не могу его найти.

Хорошо, вот код.

for c=1:1:npoints;
    for i=1:1:NN;
        if ((c-1)*spacepoints)<=PL(i+1) && ((c-1)*spacepoints)>=PL(i);
            local(c)=((c)*spacepoints)-PL(i); 

        end
        if ((c-1)*spacepoints)>=PL(NN);
            local(c)=((c)*spacepoints)-PL(NN);
            element(i)=NN;
        end

    end

Я хочу пометить каждое локальное значение той итерацией, из которой оно получено для i: NN.PL - вектор, а на выходе - набор векторов для каждой итерации.

Ответы [ 2 ]

2 голосов
/ 17 февраля 2011

Для такой быстрой проблемы мне нравится создавать массив ячеек:

for k = 1:12
    results{k} = complicated_function(...);
end

Если вывод действительно сложный, тогда я возвращаю структуру с полями, относящимися к выводам:

for k = 1:12
     results{k}.file = get_filename(...);
     results{k}.result = ...;
end
0 голосов
/ 17 февраля 2011

В настоящее время, как и сейчас, в вашем внутреннем цикле 1:NN ваша переменная local(c) обновляется или перезаписывается. Вы никогда не применяете предыдущее значение local, так что это не какой-то итерационный алгоритм оптимизации (?) ...

Возможно, простым решением является изменение размера / типа local с вектора на матрицы . Допустим, что local имеет размер [npoints 1]. Вместо этого вы делаете его размером [npoints NN]. Теперь это 2d-массив (матрица из npoints строк и NN столбцов). используйте второе измерение для хранения каждого (предполагаемого столбца) вектора из внутреннего цикла:

local = zeros([npoints NN]);

%# ... code in bewteen ...

for c=1:1:npoints;
    for i=1:1:NN;
       if ((c-1)*spacepoints)<=PL(i+1) && ((c-1)*spacepoints)>=PL(i);
           local(c, i)=((c)*spacepoints)-PL(i); 

       end
       if ((c-1)*spacepoints)>=PL(NN);
           local(c, i)=((c)*spacepoints)-PL(NN);
           element(i)=NN;
       end

   end
end

Строка c'th вашей матрицы local будет соответствовать значениям NN из внутреннего цикла. Обратите внимание, что я предположил, что ваш вектор является вектором столбца - если нет, просто измените порядок размеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...