String MATLAB:找到属于另一个单元数组的单元数组的第一个元素

String MATLAB:找到属于另一个单元数组的单元数组的第一个元素,string,matlab,find,match,cell,String,Matlab,Find,Match,Cell,MATLAB中是否有一个函数可以让我找到同样属于字符串单元格数组B的字符串单元格数组a的第一个元素 我目前正在使用: i = find(ismember(A,B)); string = A{i(1)}; 但是我想知道是否有一个函数在a的最后一个元素之前不计算ismember,而是在找到第一个匹配项时停止。原因是A包含大约1800000个字符串,我只对查找第一个匹配项感兴趣 如果我这样做,的循环是否会更快: for j=1:length(A) if ismem

MATLAB中是否有一个函数可以让我找到同样属于字符串单元格数组
B
的字符串单元格数组
a
的第一个元素

我目前正在使用:

    i = find(ismember(A,B));
    string = A{i(1)};
但是我想知道是否有一个函数在
a
的最后一个元素之前不计算
ismember
,而是在找到第一个匹配项时停止。原因是
A
包含大约1800000个字符串,我只对查找第一个匹配项感兴趣

如果我这样做,的
循环是否会更快:

    for j=1:length(A)
      if ismember(A{j}, B)
        string = A{j};
        break
      end
    end
?

A
中元素的数量是否会影响计算
ismember
所需的时间


谢谢。

有一些可选参数可供
查找
,只允许您获取前N个结果。我还没有证实这会导致短路评估;这取决于MATLAB的JIT编译器是否根据需要对操作进行重新排序,以执行
ismember

i = find(ismember(A,B), 1, 'first');
发件人:

nd=find(X,k)
ind=find(X,k,'first')
最多返回与
X
的非零项对应的第一个
k
索引
k
必须是正整数,但可以是任何数字数据类型


您当前的解决方案看起来既简单又保证具有所需的复杂性。

我不知道是否有这样的功能,我也不明白您为什么不能自己使用tic/toc进行计时测试。无论如何,如果A包含的元素比B多,那么ismember(B,A)可能会更快(当然只有在有匹配的情况下)?我可以自己做计时测试,我只是想问问是否有人已经知道。为什么执行
ismember(B,A)
会更快?我不知道,因为我完全忽略了
ismember
内部发生的事情。谢谢!另外,如果在A中重复了许多字符串,那么[C,ia,ic]=unique(A)可能有用吗?但不确定它是否更快/
A
已经是关于ismember(B,A)的“
unique
”,我不确定,但我猜当满足某个值时,搜索就会停止。假设B只有两个值,其中一个存在于A的中间。我猜ISMPER(A,B)需要1800000×2搜索步骤,而IsMead(B,A)只需要1800000×1.5步。总之,如果B在A中有多个值,它可能会更快。