- cellfun('isempty', f1) is faster than cellfun(@isempty, f1), but it does not work with strings. Are the inputs char vectors or strings?
- length(nomatch(nomatch == 0)): Faster: numel(s) - sum(nomatch).
- nomatch = cellfun(@isempty, strfind(s,n)): Faster: nomatch = ~contains(s, n)
how can I use a loop instead of cellfun
2 次查看(过去 30 天)
显示 更早的评论
function [out] = motifsupport (s,n)
% Returns indicies of found targets.
f1 = strfind(s,n);
% Returns all the not matching strings.
nomatch = cellfun(@isempty, f1);
match = length(nomatch(nomatch == 0));
out = match/length(f1);
0 个评论
回答(1 个)
Jan
2021-11-23
编辑:Jan
2021-11-23
Why do you want to use a loop? To improve the speed? Then there are better methods:
function out = motifsupport(s,n)
out = sum(contains(s, n)) / numel(s);
end
Is there still a need to use a loop?
function out = motifsupport(s, n)
count = 0;
for is = 1:numel(s)
count = count + any(strfind(s{is}, n));
end
out = count / nuzmel(s);
end
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!