为每次迭代标记循环中的值

时间:2011-02-17 05:12:29

标签: matlab

我想用一个值标记循环中出现的每个值。

假设每次迭代都有可变数量的值。我希望这些值可以通过它们出来的迭代来标记。

像 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 个答案:

答案 0 :(得分:2)

对于这种快速问题,我喜欢创建一个单元格数组:

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

如果输出真的很复杂,那么我返回一个带有与输出相关的字段的结构:

for k = 1:12
     results{k}.file = get_filename(...);
     results{k}.result = ...;
end

答案 1 :(得分:0)

目前正如现在一样,在您的内部1:NN循环中,您的local(c)变量正在更新或覆盖。你从不应用local的先前值,所以它不是一些迭代优化算法(?)......

也许一个简单的解决方案是将local的大小/类型从向量更改为矩阵。假设local的大小为[npoints 1]。相反,你的大小为[npoints NN]。它现在是一个二维数组(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

local矩阵的 c'th 行将对应于内循环的NN值。请注意,我假设您的向量是列向量 - 如果不是,只需更改大小的顺序。