在R中创建扩展矩阵

时间:2015-05-31 06:18:55

标签: r matrix

操作系统:Linux Centos 6.5 / Centos 7
机器:"特殊" 2.5TB物理内存(是的,真的)
编程语言:R

问题: 在R中,实践(似乎是)在循环之前分配与最终结果一样大的矩阵。在这种情况下, 最终 矩阵大小在启动时未确定。

因此,在R中创建扩展矩阵的最简洁方法是什么?

关键是我想在扩展时避免内存拷贝的开销。 如果这是唯一的方法,那就没关系

重要:我非常熟悉内核级编程,内核级内存管理,页面处理系统等。我是R的新手,并且学习R.(非常有趣并且很有用)在这个例子中,我特意尝试创建一个场景来演示矩阵的内存扩展,而无需预先分配内存,或者回退到分配大小为N的矩阵扩展(使用增量扩展)记忆块。

问题示例

好的,在描述的场景中我们可以创建矩阵A,创建扩展矩阵B,将A复制到B然后对更大的矩阵执行操作。

另一种方法是扩展A,填充结果并迭代......

例如,我们可以先使用outer(),然而" outer()" 会在每次调用时创建一个 new 矩阵。我当时想扩大现有的矩阵......

x<- outer(1:2,1:2,"*")
x

    [,1] [,2]
[1,]    1    2  
[2,]    2    4  

...

x<-outer(1:3,1:3,"*")
x

     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    2    4    6
[3,]    3    6    9

...

x<-outer(1:3,1:3,"*")
x

     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    2    4    6    8
[3,]    3    6    9   12
[4,]    4    8   12   16

因此,我的问题是:

&#34;在没有预先分配大矩阵的情况下,在R中创建动态分配矩阵的首选方法是什么?&#34;

提前感谢大家指点和阅读建议。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

通常,您应该在循环之前分配与最终结果一样大的矩阵,然后在每次迭代中填充值。在您的示例中(如果我正确理解了值的填充方式),您可以尝试:

 #set the dimension of the final matrix
 n<-10
 #create the matrix
 res<-matrix(ncol=n,nrow=n)
 #fill the values
 res[1,1]<-1
 for (i in 2:n) {
   tmp<-c(i,(i+2):(2*i))
   res[i,1:i]<-tmp
   res[1:i,i]<-tmp
   print(res)
 }