- 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
3 views (last 30 days)
Show older comments
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 Comments
Answers (1)
Jan
on 23 Nov 2021
Edited: Jan
on 23 Nov 2021
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 Comments
See Also
Categories
Find more on Cell Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!