我有一个for循环作为我的代码的一部分。 N
可能非常大(可能约为10^8
)。有没有办法让它更快? needed
和choose_set
分别为23*1
和33*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
答案 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%。我不太确定你要用你的代码实现什么,但这两个函数会降低你的代码速度。要优化此功能,您需要相应地对代码进行矢量化。