我有一个方阵,尺寸从W
xW
到W
00xW
00不等.该矩阵表示函数的参数值.我经历了一个循环,在那里我try 了各种参数组合.每次迭代W
都有一个不同的值,所以我必须更新矩阵中值为W
的位置.这恰好是对角线的偶数项,所以[2,2]
、[4,4]
等等.我很好奇是否有比我现在的方法更有效的方法来做到这一点:
W<-treeDepth*newVar
for (iW in evenDiag) {
matrixSource[iW,iW]<-W
}
到目前为止,我只测试了134x134大小的矩阵,但根据对profvis
个大小的矩阵的分析,循环似乎是最快的方法.
当我try 的时候
diag(matrixSource)[evenDiag]<-W
它似乎花费了类似的时间,但它在平均每5个调用之后开始调用<;GC&>;,但实际调用<;GC&>的时间似乎是随机的.
我认为<;gc>;是垃圾回收,但无论它是什么,它永远都需要花费很长时间,而且当我使用上面的循环版本时,它很少被调用.
如果我认为有比逐个循环更好的方法,那我是错的吗?用Rcpp
写循环会不会让速度更快?在《高级R》中,Hadley没有说用RCPP将值写入矩阵会更快,所以它可能不会.如果是这样,我如何才能在不编写C++函数或任何复杂的东西(我不知道任何C++)的情况下将这一小行(S)更改为RCPP.
根据我的研究,不可能只写这样的东西
matrixSource[evenDiag,evenDiag]<-W
但如果是这样的话,R将在矢量化处理方面表现出色.
什么是最好的方法呢?
如果它有帮助,那么背景是需要将矩阵输入
negLogLik<- -mvtnorm::dmvnorm(flattenedData,sigma=matrixSource,log=T,checkSymmetry = FALSE)
在该函数内部,它被提供给chol()(有时并行调用<;gc>;)
因此,如果有一种方法可以修改该函数,使其只处理不完全的部分矩阵 这样我可能只需要给W赋值一次,这也是很好的.
我还需要一种方法来分配主对角线正上方和下方的对角线,所有相同的值,Z.有好的方法吗?
谢谢您<;3