继续我的研究,
我需要另一个类似的逻辑,ismember它的执行时间更快.这部分代码和矩阵.
StartPost =
14 50 30 1 72 44 76 68 63 80 25 41;
14 50 30 1 61 72 42 46 67 77 81 27;
35 23 8 54 19 70 48 75 66 79 2 84;
35 23 8 54 82 72 78 68 19 2 48 66;
69 24 36 52 63 47 5 18 11 82 1 15;
69 24 36 52 48 18 1 12 80 63 6 84;
73 38 50 7 1 33 24 68 29 20 62 84;
73 38 50 7 26 61 65 32 22 18 2 69]
for h=2:2:8,
...
done=all(ismember(StartPost(h,1:4),StartPost(h-1,1:4)));
...
end
Run Code Online (Sandbox Code Playgroud)
我使用Profile viewer检查了该代码.我在这部分得到了这一点,使我的代码慢慢地执行时间.
任何人都有这方面的经验,请分享.谢谢
MATLAB有几个未记录的内置函数,可以帮助您实现与其他函数相同的结果,但速度更快.
在您的情况下,您可以使用ismembc:
done = all(ismembc(StartPost(h, 1:4), sort(StartPost(h-1, 1:4)))));
Run Code Online (Sandbox Code Playgroud)
请注意,ismembc(A, B)需要对矩阵B进行排序,并且不包含任何NaNs值.
这是您的示例的执行时间差异:
tic
for h = 2:2:8
done = all(ismember(StartPost(h, 1:4), StartPost(h-1, 1:4)));
end
toc
Elapsed time is 0.029888 seconds.
tic
for h = 2:2:8
done = all(ismembc(StartPost(h, 1:4), sort(StartPost(h-1, 1:4))));
end
toc
Elapsed time is 0.006820 seconds.
Run Code Online (Sandbox Code Playgroud)
这大约快了约50倍.