我构造了一个大的稀疏矩阵,我事先知道其中非零元素的数量。在 R 中是否可以为该矩阵分配空间,而不是每次添加元素时自动增加其空间?像spalloc在 Matlab 中所做的事情。
作为我想要的简化代码示例,请考虑以下逐块对角矩阵的构造。
library("Matrix")
n = 1000;
p = 14000;
q = 7;
x_i = Matrix(rnorm(n*p), n, p);
x = Matrix(0, n*q, p*q, sparse=TRUE);
for(i in 1:q) {
x[((i-1)*n+1):(i*n),((i-1)*p+1):(i*p)] = x_i;
}
如果我能提前告诉 R 矩阵将包含 n*p*q 个非零元素,我认为这个过程会快得多。
提前致谢!
编辑:我现在看到对于块矩阵我应该使用 bdiag()
library("Matrix")
n = 1000;
p = 14000;
q = 7;
x_i = Matrix(rnorm(n*p), n, p);
lst = list();
for(i in 1:q) {
lst[i] = x_i;
}
x = bdiag(lst);
这要快得多。