Effacer les filtres
Effacer les filtres

how can I use a loop instead of cellfun

1 vue (au cours des 30 derniers jours)
Manav Divekar
Manav Divekar le 23 Nov 2021
Modifié(e) : Jan le 23 Nov 2021
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);

Réponses (1)

Jan
Jan le 23 Nov 2021
Modifié(e) : Jan le 23 Nov 2021
Why do you want to use a loop? To improve the speed? Then there are better methods:
  • 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)
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

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Produits


Version

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by