【发布时间】:2014-06-06 15:12:28
【问题描述】:
MATLAB 中是否有一个函数可以让我找到字符串元胞数组A 的第一个元素,该元素也属于字符串元胞数组B?
我目前正在使用:
i = find(ismember(A,B));
string = A{i(1)};
但我想知道是否有一个函数在 A 的最后一个元素之前不计算 ismember,而是在找到第一个匹配项时停止。原因是 A 包含大约 1,800,000 个字符串,我只对找到第一个匹配项感兴趣。
如果我这样做,for 循环会更快吗:
for j=1:length(A)
if ismember(A{j}, B)
string = A{j};
break
end
end
??
A 中的元素数量是否会影响计算ismember 所需的时间?
谢谢。
【问题讨论】:
-
不知道有没有这样的功能,也不明白为什么不能自己用tic/toc做时序测试。无论如何,如果 A 包含的元素比 B 多,也许 ismember(B,A) 会更快(当然只有当有匹配时)?
-
我可以自己做时序测试,我只是问一下,以防有人已经知道。为什么
ismember(B,A)会更快?我不知道,因为我完全忽略了ismember内部发生的事情。谢谢! -
另外,如果在 A 中重复了很多字符串,也许 [C,ia,ic] = unique(A) 会有用吗?不确定它是否更快。 ://
-
A已经是“unique” -
关于 ismember(B,A) 我不确定,但我想当一个值被满足时搜索会停止。假设 B 只有两个值,其中一个存在于 A 中间。我猜 ismember(A,B) 需要 1,800,000*2 个搜索步骤,而 ismember(B,A) 只需要 1,800,000*1.5 个步骤。综上所述,如果 B 在 A 中有多个值,可能会走得更快。
标签: string matlab find match cell