【问题标题】:Create an Expanding Matrix in R在 R 中创建一个扩展矩阵
【发布时间】:2015-05-31 06:18:54
【问题描述】:

操作系统:Linux Centos 6.5 / Centos 7
机器:“特殊”2.5 TB 物理内存(是的,真的)
编程语言: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

因此,我的问题:

“在 R 中创建动态分配矩阵的首选方法是什么,无需预先分配大矩阵?”

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

【问题讨论】:

  • 你会在R Inferno找到很多关于代码优化的信息。

标签: r matrix


【解决方案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)
 }

【讨论】:

  • Nicola,感谢您的示例 - 非常感谢。问题是我不想在运行算法之前分配矩阵,因为结果的大小是未知的。结果是有界的,但可能非常大。
猜你喜欢
  • 1970-01-01
  • 2015-01-10
  • 2021-12-06
  • 2017-10-31
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
相关资源
最近更新 更多