J'ai le morceau de code suivant qui est assez lent pour calculer les centiles d'un ensemble de données ("DATA"), parce que les matrices d'entrée sont grandes ("Data" est environ 500.000 de long avec 10080 valeurs uniques attribuées à partir des "Indices").Améliorer le code/supprimer for-loop lors de l'utilisation accumarray MATLAB
Existe-t-il une possibilité/des suggestions pour rendre ce morceau de code plus efficace? Par exemple, pourrais-je en quelque sorte omettre la boucle for?
k = 1;
for i = 0:0.5:100; % in 0.5 fractile-steps
FRACTILE(:,k) = accumarray(Indices,Data,[], @(x) prctile(x,i));
k = k+1;
end
Juste comme une note: 'accumarray' est de toute façon un wrapper pour une boucle. – Adriaan
Fractile semble être une matrice, qu'est-ce que vous essayez réellement de faire? Habituellement, si vous voulez vous débarrasser d'une boucle for, vous pouvez essayer de faire une opération matricielle, quelque chose que matlab est assez bon (mais gardez à l'esprit les limites de la mémoire) –
Oui en effet, c'est une matrice. Je stocke les résultats de centiles individuels (0: 0,5: 100) pour chacun des indices 10080 uniques. – Jonas