操作系统: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;
提前感谢大家指点和阅读建议。非常感谢您的帮助。
答案 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)
}