2012-05-10 5 views
1

次のコードを最適化したいと思います。現在はMが2404 100の数値行列であるために、2メガバイトL2キャッシュと2GHzのデュアルコアマシン上の周りに0.085秒を実行します: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