Je veux exécuter des algorithmes Matlab rapides sur des matrices en ignorant les éléments zéro.
Dans le passé, je travaillais simplement avec une double boucle très lente par exemple.
for i = 1 : size(x,1)
for j = 1 : size(x,2)
if x(i,j) ~= 0
... faire quelque chose avec x(i,j)
end
end
end
Mais comment puis-je effectuer l'opération matricielle sur toute la matrice x ? Par exemple, comment puis-je exécuter
x(i,j) = log(x(i,j)) if x>0 else 0 <-- code pseudo
dans Matlab sur toute la matrice sans boucles for?
Enfin, je veux réécrire des lignes comme
résultat = sum(sum((V.*log(V./(W*H))) - V + W*H));
en ignorant les zéros.
Je dois simplement comprendre le concept. Au cas où j'aurais besoin, je pourrais également utiliser NaN à la place de zéro, mais je n'ai pas trouvé par exemple la fonction
nanlog()