2010-11-25 6 views
1

J'ai une matrice I, et je veux accumuler dans un tableau A, pour chaque valeur I, un intervalle en conséquence à ces valeurs I permet de les appeler i et j.tableau rapide que le passage des arguments dans Matlab

function acc(i,j) 
    global A 
    A(i:j) = A(i:j)+1; 
end 

Toutefois, le passage et le retour des tableaux prennent trop de temps, parce que j'exécute la fonction plusieurs fois, et il est pas aussi simple que cet exemple.

Y a-t-il un moyen de l'accélérer? Comment puis-je passer un retour ces valeurs sans global?

+0

Copie possible de http://stackoverflow.com/q/1258761/426834 – zellus

+0

Si nous suggérons des améliorations à votre exemple simple, ne vous postez pas encore pour expliquer pourquoi ils sont inadéquats pour ce que vous essayez vraiment de faire ? Comment pouvez-vous espérer une aide réelle avec votre vrai problème si vous essayez de nous en protéger? –

+2

Jetez un oeil à cette réponse http://stackoverflow.com/questions/1258761/do-i-conserve-memory-in-matlab-by-declaring-variables-global-instead-of-passing-t/1261429#1261429 écrire acc comme fonction imbriquée. @zellus: Je suis d'accord - toutes les réponses ont déjà été données. – Jonas

Répondre

1

Le lien dans les commentaires propose d'utiliser une fonction imbriquée comme solution. Si la fonction que vous utilisez est utilisée à plusieurs endroits différents, vous ne souhaiterez peut-être pas imbriquer à chaque endroit. Dans ce cas, j'essaierais de faire en sorte que la fonction soit modifiée.

http://blogs.mathworks.com/loren/2007/03/22/in-place-operations-on-data/

function A = acc(A,i,j) 
    A(i:j) = A(i:j)+1; 
end 

Cela ne devrait pas avoir besoin de faire une copie à condition que vous répondez aux exigences énoncées dans le billet de blog de Loren.

Questions connexes