非常に長く実行されているため、コードをスピードアップしようとしています。私はすでに問題がどこにあるのかを知っていました。次の例を考える:ループを回避するベクトル化関数
x<-c((2+2i),(3+1i),(4+1i),(5+3i),(6+2i),(7+2i))
P<-matrix(c(2,0,0,3),nrow=2)
out<-sum(c(0.5,0.5)%*%mtx.exp(P%*%(matrix(c(x,0,0,x),nrow=2)),5))
Iが複素数値を有するベクトルxを有し、ベクトルは12^11のエントリを持っており、私は3行目の和を計算します。 (関数はパッケージのBiodemにありますので、関数mtx.expが必要です。%^%関数は複雑な引数をサポートしていません)。
私はエラーを取得
sum(c(0.5,0.5)%*%mtx.exp(P%*%(matrix(c(x,0,0,x),nrow=2)),5))
を試してみてください:「ポット%の誤差が*%ポット:非適合引数を」だから私の解決策は、ループを使用することでした:
tmp<-NULL
for (i in 1:length(x)){
tmp[length(tmp)+1]<-sum(c(0.5,0.5)%*%mtx.exp(P%*%matrix(c(x[i],0,0,x[i]),nrow=2),5))
}
しかし、これは非常に時間がかかります。コードをスピードアップする方法はありますか?私もサプリを試みましたが、それはループと同じくらい長くかかります。
私はこの関数をapproximatly 500回実行しなければならないので、私が助けてくれることを願っています。これは最初に3時間以上かけて試しました。これは非常に満足していない..です
は、コードは、事前に割り当て、あなたのベクトルでスピードアップ
tmp <- rep(NA,length(x))
が、私は本当にあなたがしようとしているのか理解していないことができ、非常に
: だから私はこの行列normaly対角線でないPを(持っています - 行列)(対角線、この時間)行列はのは、C C <それを呼びましょう。この行列は別を掛けます P < - マトリックス(C(2.1,20、0.3,3.2)を検討し、nrow = 2) 行列(c(x [i]、0,0、x [i])、nrow = 2)番目(X)) そして私はこの場合には、n番目の電力を利用したいN = 5 (P *はC)^ 5 これは再びベクトルとアップsumed要素によって乗算されます。 私はループでそれをしたくないということです(xのすべてのエントリについて計算されなければなりません) – rainer
行列Cがスカラーの場合 (つまり、すべての要素が同じ対角で) これはまだ 'sum(mtx.exp(P、5)/ 2)* x^5'と書くことができます。 –
おかげさまで、少し助けてください。私が直面している次の問題は、行列Cの項目が、関数に依存するものと同じではないということです。C <-matrix(dnorm(x [i]、0,1)、0,0、dnorm(x [ i]、1,3)) – rainer