2012-05-10 3 views
1

Я хотел был бы оптимизировать следующий код. В настоящее время работает около 0,085 секунд на 2 ГГц двухъядерный машины с 2 Мб кэша L2, для M быть 2404 на 100 числовая матрица:Оптимизация 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) 
} 

Я попытался заменить apply() с цикл, который дает примерно такую ​​же производительность. Любые другие идеи?

ответ

3

Это, кажется, бой в 6 раз быстрее, на моей машине:

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

Я подумал, что, может быть, вы могли бы ускорить его дальше по телефону .Internal(rowSums()), но это не сработало. Хотя это может быть просто потому, что я не использую его правильно.

+0

является 't()' необходимым в вашем коде? –

+0

Упс ... нет. Закрепление. – joran

+0

Спасибо. Это дает мне 0,28 секунды на моей машине. – user103500