gus*_*y83 1 performance matlab set
如果我想找到两个无序集合的并集,表示为1D向量,例如:
a = [2 4 6 8 1]
b = [1 2 5 7 9]
Run Code Online (Sandbox Code Playgroud)
我可以使用union函数:
c = union(a,b)
Run Code Online (Sandbox Code Playgroud)
给出了答案:
c = [1 2 4 5 6 7 8 9]
Run Code Online (Sandbox Code Playgroud)
然而,这似乎相当缓慢(相对而言).如果我对它进行tic-toc测试,我得到:
>> for test = 1
tic
c = union(a,b);
toc
end
Elapsed time is 0.000906 seconds.
Run Code Online (Sandbox Code Playgroud)
然而,如果我使用这种更复杂的方法,我得到一个更快的结果:
>> for test = 1
tic
a_1 = zeros(1,9);
b_1 = zeros(1,9);
a_1(a) = 1;
b_1(b) = 1;
c_1 = or(a_1,b_1);
c = find(c_1);
toc
end
Elapsed time is 0.000100 seconds.
Run Code Online (Sandbox Code Playgroud)
对于c,这仍然给出了相同的答案,但是快了大约9倍(用这个小例子,我不确定它的缩放程度)
使用工会有什么好处?任何人都可以建议一种更紧凑的方式来表达我使用的第二种方法吗?
谢谢
几条评论: