Image 在R中连接图像

Image 在R中连接图像,image,r,memory,concatenation,Image,R,Memory,Concatenation,我试图在R中将一个大矩阵(8000 x 8000)绘制为光栅图像。不幸的是,这对我的32位操作系统来说需要太多内存,因此在重新组合之前,我将数据绘制为两个(4000 x 8000)图像 我看过很多软件包,但没有找到合适的功能。我知道图像是作为S4对象导入的,颜色存储在一个数组中,这意味着应该有一种方法将它们组合在一起,但我无法理解。有人知道在R里怎么做吗? 谢谢 编辑: 数据存储在8000个csv文件中,其中file1对应于矩阵的第一行,file2对应于第二行 示例代码 # get the na

我试图在R中将一个大矩阵(8000 x 8000)绘制为光栅图像。不幸的是,这对我的32位操作系统来说需要太多内存,因此在重新组合之前,我将数据绘制为两个(4000 x 8000)图像

我看过很多软件包,但没有找到合适的功能。我知道图像是作为S4对象导入的,颜色存储在一个数组中,这意味着应该有一种方法将它们组合在一起,但我无法理解。有人知道在R里怎么做吗? 谢谢

编辑:

数据存储在8000个csv文件中,其中file1对应于矩阵的第一行,file2对应于第二行

示例代码

# get the name of each matrix-row file
# each file is a vector of length 8000, each filei corresponding to matrix row i 

a <- list.files()

for(i in 1:4000){

     # read the data into R, and combine it with the other rows

     matrixRow <- read.table(a[i])
     matrixToPlot <- rbind(matrixToPlot, matrixRow)   

 }


 png("test", 4000, 4000)
     rasterImage(as.raster(matrixToPlot))
 graphics.off()
 ## identical code for matrix-row 4001, 4002, ...8000
#获取每个矩阵行文件的名称
#每个文件是长度为8000的向量,每个文件i对应于矩阵行i

a试着缩小矩阵,你真的需要那个细节吗?像这样做增量rbind会破坏性能,而且绘图也无法工作,光栅图像需要设置一个现有的绘图。试着带着你真正的目标提问,这不是一个好办法。

我在查看系统监视器上的内存时尝试了以下方法,但它始终保持在3 Gb以下:

    A <- matrix(rnorm(8000*8000),ncol = 8000)
    print(object.size(A),units = "Mb") # 488.3 Mb
    gc() # remove wasted mem (something I don't fully understand)

    # open a plot of appropriate dimensions- scale to your case
    plot(NULL, type = "n", xlim = c(0, 8001), ylim = c(0, 8000))
    # add chunks of the image a bit at a time, removing waste memory at each chunk
    for (m in 1:4){
      for (n in 1:4){
        image(x = (m * 2000 - 2000):(m * 2000 - 1) + .5, # pixels are centered..
              y = (n * 2000 - 2000):(n * 2000 - 1) + .5, 
              t(A[(m * 2000 - 1999):(m * 2000), (n * 2000 - 1999):(n * 2000)]), 
              useRaster = TRUE, # this is key
              add = TRUE)     
        gc() # my naive guess is that this keeps wasted mem from building up
      }
    }

A你能给出一些你想做什么的示例代码吗?还有,为什么不把它们绘制成矢量图像,然后在R之外进行缩放呢?我添加了一个最小的代码示例。稍微澄清一下,矩阵是~1GB,R处理得很好。当我调用绘图函数(plot、ggplot、rasterImage)时,绘图函数会在处理数据时创建大型内部对象,从而停止R的工作。我假设在尝试保存为矢量格式(.png或.svg)时也会发生同样的情况欢迎使用StackOverflow。如果您真的简化了示例代码,使其在我的机器上运行并生成两个图像打印,我将看一看。例如,构造两个10x10的随机数矩阵。由于您知道如何读取文件,因此这不是您的问题的一部分。另外,删除
png()
dev.off()
——这也不是你的问题的一部分。谢谢你的回复,这是解决问题的一个非常聪明的方法。这比与物体搏斗要简单得多。不过,在R中,我从来没有真正充分利用过垃圾收集器;如果我定义了一个巨大的对象,用rm()将其删除,然后调用gc(),内存仍然会有一段时间是满的。gc()没有更好的效果。谢谢你的代码,你的方法应该工作得很好。在这种情况下,是的。我正在制作的图像是一个分形图像,我希望在不使用zoom()函数的情况下以近放大倍数查看它。无论如何,我知道这是一种非常愚蠢的做事方式;bigmatrix包将更适合,因为预分配会提高性能。我只是把这个方法作为一个技术挑战,看看我是否能让它工作:)好的,只需预先分配矩阵而不是rbind,它应该工作得很好