【发布时间】:2018-09-21 15:59:38
【问题描述】:
我正在处理几个 1.3e6 行的大平方矩阵,我想要它们的对角线。我需要一种有效的方法来做到这一点,但我不能使用 diag()
library(bigmemory)
A=big.matrix(nrow=1.3e6,ncol=1.3e6,init=3)
diag(A)
有什么想法吗? 非常感谢您的宝贵时间
【问题讨论】:
-
不是一个完整的解决方案,但您可以拆分此矩阵(然后使用正常矩阵表示法)还是对您的分析不起作用?例如 A=matrix(3, nrow=1.3e6/100,ncol=1.3e6/100) diag(A) 然后循环 100 次。
-
你真的有一个 1,300,000 x 1,300,000
big.matrix吗?获得对角线的一种有效方法是在 Rcpp 中实现它。但是,我认为这里还有其他事情发生.. -
我只想要一种有效的方法来提取矩阵的对角线。我看到在Rcpp包中有一个函数调用cppFunction来调用C++,而zenglix.github.io/Rcpp_basic中的Li Zeng使用arma::vec中的“diagmat”函数来提取矩阵的对角线。但是,我不知道如何用 cppFunction 调用它
-
cppFunction('NumericVector diagC(NumericMatrix x) { int nrow = x.nrow(), ncol = x.ncol(); NumericVector out(nrow); out=diagmat( x ); return out ; }',depends=arma::vec::iterator)
标签: r bigdata diagonal r-bigmemory