继续我的研究,
我需要另一个与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
我使用Profile viewer检查了该代码。我在这部分得到了这一点,这使我的代码慢慢地执行了。
任何人都有这方面的经验,请分享。感谢
答案 0 :(得分:7)
MATLAB有几个undocumented built-in functions可以帮助您获得与其他函数相同的结果,但速度更快。
在您的情况下,您可以使用ismembc
:
done = all(ismembc(StartPost(h, 1:4), sort(StartPost(h-1, 1:4)))));
请注意,ismembc(A, B)
要求对矩阵B
进行排序,不要包含任何NaN值。
以下是您的示例的执行时间差异:
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.
这大约快了约50倍。