2012-05-10 8 views
1

Je souhaite optimiser le code suivant. Actuellement, il tourne autour de 0,085 secondes sur une machine dual core 2Ghz avec 2 Mo de cache L2, M étant un 2404 de 100 matrice numérique:Optimisation apply()

Rescale <- function(M = utility.mat){ 
    exp.M <- exp(M) 
    result <- apply(exp.M, 1, function(x) x/sum(x)) 
    result <- t(result) 
    return (result) 
} 

J'ai essayé de remplacer apply() avec boucle, ce qui donne à peu près les mêmes performances. D'autres idées?

Répondre

3

Cela semble être un combat 6 fois plus vite sur ma machine:

Rescale1 <- function(M){ 
    M <- exp(M) 
    result <- M/rowSums(M) 
    return (result) 
} 

Je pensais que vous pourriez peut-être accélérer encore en appelant .Internal(rowSums()) mais il ne fonctionnait pas. Bien que cela puisse simplement être parce que je ne l'utilise pas correctement.

+0

est le 't()' nécessaire dans votre code? –

+0

Oups ... non. Fixation. – joran

+0

Merci. Cela me donne 0,28 seconde sur ma machine. – user103500