MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   MATLAB:比较字符串的单元格数组 (https://www.labfans.com/bbs/showthread.php?t=23682)

poster 2019-12-10 20:41

MATLAB:比较字符串的单元格数组
 
我有两个字符串的单元格数组,我想检查它们是否包含相同的字符串(它们不必具有相同的顺序,也不知道它们的长度是否相同)。

例如:

a = {'2' '4' '1' '3'}; b = {'1' '2' '4' '3'}; 要么

a = {'2' '4' '1' '3' '5'}; b = {'1' '2' '4' '3'}; 首先,我想到了strcmp但它需要循环一个单元格的内容并与另一个单元格进行比较。我也考虑通过使用类似ismember :

ismember(a,b) & ismember(b,a) 但后来我们不知道它们的长度是相同的(明显的不平等情况)。因此,如何在不编写过多的if / else情况下以最有效的方式执行此比较。



[B]回答:[/B]

您可以使用函数[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/setxor.html"]SETXOR[/URL] ,该函数将返回不在两个单元格数组的交集中的值。如果返回空数组,则两个单元格数组包含相同的值:

arraysAreEqual = isempty(setxor(a,b));


[B]编辑:一些性能指标...[/B]

既然您对性能度量感到好奇,所以我想我会对照[URL="https://stackoverflow.com/questions/3231580/matlab-comparison-of-cell-arrays-of-string/3231836#3231836"]Amro[/URL]列出的两个解决方案(使用[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/ismember.html"]ISMEMBER[/URL]和[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/strcmp.html"]STRCMP[/URL] / [URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cellfun.html"]CELLFUN[/URL] )测试我的解决方案的速度。我首先创建了两个大型单元格数组:

a = cellstr(num2str((1:10000).')); %'# A cell array with 10,000 strings b = cellstr(num2str((1:10001).')); %'# A cell array with 10,001 strings 接下来,我将每个解决方案运行了100次以获取平均执行时间。然后,我交换a和b并重新运行它。结果如下:

Method | Time | a and b swapped ---------------+---------------+------------------ Using SETXOR | 0.0549 sec | 0.0578 sec Using ISMEMBER | 0.0856 sec | 0.0426 sec Using STRCMP | too long to bother ;) 请注意, [URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/setxor.html"]SETXOR[/URL]解决方案具有一致的快速时序。如果a元素不在b ,则[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/ismember.html"]ISMEMBER[/URL]解决方案的运行实际上会稍微快一些。这是由于[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/logicaloperatorsshortcircuit.html"]短路&&[/URL]跳过了计算的后半部分(因为我们已经知道a和b不包含相同的值)。然而,如果所有的值的a ,可以在b中, [URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/ismember.html"]ISMEMBER[/URL]溶液是显著慢。



[url=https://stackoverflow.com/questions/3231580]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 01:13

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.