在R中为稀疏矩阵分配空间

时间:2013-07-30 12:29:58

标签: r sparse-matrix

我构造了一个大的稀疏矩阵,其中我事先知道非零元素的数量。是否可以在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);

这要快得多。

0 个答案:

没有答案