计算 R 中 big.matrix 的对角线
Posted
技术标签:
【中文标题】计算 R 中 big.matrix 的对角线【英文标题】:Calculate the diagonal of a big.matrix in R 【发布时间】: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,000big.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)
【参考方案1】:
好的,事实上,这里不需要 Rcpp。 只需使用两列的特殊矩阵访问器:
library(bigmemory)
X <- big.matrix(10, 10); X[] <- 1:100
d <- min(dim(X))
X[cbind(1:d, 1:d)]
X[cbind(1:d, 1:d)]
将访问 X[1, 1]
、X[2, 2]
、...、X[d, d]
。
【讨论】:
非常感谢您的回答。它工作正常,我已经检查了库 profvis,这段代码的性能非常好。以上是关于计算 R 中 big.matrix 的对角线的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用car包的scatterplotMatrix函数绘制散点图矩阵并添加线性回归曲线平滑曲线以及对角线核密度图和轴须图rugcor函数计算变量两两相关性
R语言使用cor函数计算相关性矩阵进行相关性分析,使用corrgram包可视化相关性矩阵行和列使用主成分分析重新排序下三角形中使用平滑的拟合线和置信椭圆,上三角形中使用散点图对角线最小值和最大值