什么是另一个类似的逻辑比ismember快?(What is another similar log

2019-09-22 01:23发布

继续我的研究,

我需要有其他类似逻辑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

我使用档案浏览器检查的代码。 我得到的这部分,使我的代码花时间慢慢地执行。

任何人有这个逻辑的经验,请分享。 谢谢

Answer 1:

MATLAB有几个无证内置功能 ,它可以帮助你实现同样的结果等功能,只是速度更快。

你的情况,你可以使用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倍。



文章来源: What is another similar logic that is faster than ismember?
标签: matlab random