【问题标题】:maximum size of a matrix in RR中矩阵的最大大小
【发布时间】:2012-04-16 13:50:51
【问题描述】:

我正在使用 igraph 进行一些网络分析。作为其中的一部分,我必须创建一个包含 2 列和与链接一样多的行的矩阵。我有一个大型网络(数百万个链接),并且在运行 3 小时后创建此矩阵不起作用(没有错误,只是没有结果,并且显示“没有响应”)。

这种字符矩阵的最大尺寸是多少?运行需要多长时间?

我在 Windows 7 机器上运行 64 位 R 2.14.1,4 GB 内存以 2.67 Ghz 运行

谢谢

添加 感谢您的快速回复。这让我确信这不是矩阵的大小。结果是我使用另一个矩阵的列来创建该矩阵的错误。

【问题讨论】:

  • 您能否详细说明如何创建矩阵?
  • @Tommy 原来是我的错误

标签: r memory


【解决方案1】:

R 中向量的理论极限是 2147483647 个元素。所以这大约是 10 亿行 / 2 列。

...但是该数据量不适合 4 GB 的内存...尤其是字符向量中的字符串。每个字符串至少有 96 个字节 (object.size('a') == 96),矩阵中的每个元素都是指向此类字符串的指针(8 个字节)(虽然每个唯一字符串只有一个实例)。

所以通常发生的情况是机器开始使用虚拟内存并开始交换。大量交换通常会扼杀本世纪完成的所有希望——尤其是在 Windows 上。

但是,如果您正在使用一个包(igraph?)并且您要求它生成矩阵,它可能会做很多内部工作并创建很多辅助对象。因此,即使您远未达到单个结果矩阵的内存限制,用于生成它的算法也可能会耗尽内存。它也可能在时间上是非线性的(二次或更糟),这将再次扼杀所有在本世纪完成的希望......

一个很好的调查方法是在一个小图表上计时(例如使用system.time),然后再将图表大小翻倍。然后你可以看到时间是线性的还是二次的,你可以估计完成你的大图需要多长时间。如果预测显示一周,那么你知道 ;-)

【讨论】:

  • 向量有一些开销,在限制object.size(character(n))/n 显示字符为8 个字节。
  • @James - 是的。字符串的大小每 8 个字符增加 8 个。所以object.size('abcdefgh') == 104(在 64 位系统上)
【解决方案2】:

R 矩阵可以用单索引表示法来寻址,因为它们实际上是一个具有长度为 2 的 dim 属性的向量,并且在 R 中,即使您使用的是 64 位版本,向量也可以通过带符号的 32 位整数来寻址。所以一个 2 列的矩阵最多可以有 2^30-1 行。

data.frame 将允许您使用 2^31-1 行和列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多