更快地循环

时间:2015-04-18 07:25:51

标签: matlab

我有一个for循环作为我的代码的一部分。 N可能非常大(可能约为10^8)。有没有办法让它更快? neededchoose_set分别为23*133*8

             pos = VChooseK(1:ss,i);
             N = size(pos);
             N=N(1);
             for j = 1 : N,
                testset=unique(choose_set(pos(j,:)',:));
                if sum(size(setdiff(needed,testset))) < 2,
                    no_solution = 0;
                    solution =pos(j,:);
                end
            end

1 个答案:

答案 0 :(得分:1)

在下面的代码中使用N = 1e4运行后,您可以从代码分析器中查看我的结果。

N = 1e4;
M = 10;
needed = randn(23,1);
choose_set = randn(33,8);
pos = ceil( rand(N,M) * size(choose_set,1) );

for j = 1 : N
    testset = unique( choose_set( pos(j,:)', : ) );
    if sum( size( setdiff( needed, testset ) ) ) < 2
        no_solution = 0;
        solution = pos(j,:);
    end
end

代码分析器显示setdiff占用了18%的时间,而unique占用了51%。我不太确定你要用你的代码实现什么,但这两个函数会降低你的代码速度。要优化此功能,您需要相应地对代码进行矢量化。

http://i.imgur.com/8cOqp6w.png