【发布时间】:2018-03-10 17:45:21
【问题描述】:
在我的机器上,
m1 = ( runif(5*10^7), ncol=10000, nrow=5000 )
使用大约 380 MB。我需要在内存中同时处理许多这样的矩阵(例如,将它们相加或相乘或在它们上使用 apply 函数)。总而言之,由于内存中存储了多个矩阵,我的代码使用了 4 GB 的 RAM。我正在考虑更有效地存储数据的选项(即以使用更少 RAM 的方式)。
我已经看到R package bigmemory 被推荐。然而:
library(bigmemory)
m2 = big.matrix( init = 0, ncol=10000, nrow=5000 )
m2[1:5000,1:10000] <- runif( 5*10^7 )
使 R 使用的内存量与我使用 Windows 任务管理器验证的内存量大致相同。所以我预计不会有太大的收获,还是我错了,我应该以不同的方式使用big.matrix?
【问题讨论】:
-
不确定它是否适合您的需求,但包 e1071 具有稀疏矩阵功能
-
在您的第二个代码块中,
runif(5*10^7)会占用您的内存,因此将其分配给 big.matrix 将无济于事。想想你想如何初始化你的矩阵。 -
@Hong Ooi 不清楚 OP 是否使用它来初始化矩阵。他们可能只是将其用作他们正在使用的数据类型的示例。如果这确实具有代表性,则稀疏矩阵不合适。 OP 要么必须处理正在使用的大量内存,要么重写代码以使用硬盘。
-
@Accumulation 确实,我很关心用浮点数填充指定大小的矩阵的问题。使用硬盘驱动器不会比在 RAM 和页面文件中更影响性能吗?
-
如果你正在做大量的驱动器读取,那将比 RAM 慢,但页面文件只是硬盘驱动器的接口。与普通硬盘访问相比,它旨在减少寻道时间,但如果你有 SSD,我认为这无关紧要。您可以对代码进行计时,看看将内容保存在内存中与进行驱动器交换有多大区别。
标签: r performance matrix memory