2012-04-02 159 views
4

我使用igraph做一些網絡分析。作爲其中的一部分,我必須創建一個矩陣,其中包含兩列和多列鏈接。我有一個龐大的網絡(數百萬個鏈接),創建這個矩陣在運行3小時後沒有工作(沒有錯誤,只是沒有結果,而且顯示「沒有響應」)。R中矩陣的最大尺寸

這種字符矩陣的最大尺寸是多少?運行需要多長時間?

我運行64位R 2.14.1,Windows 7的機器上有4 GB的內存在2.67 GHz的

感謝

運行ADDED 感謝您的快速反應。這使我積極,它不是矩陣的大小;事實證明,這是我用來創建矩陣的另一個矩陣的列的錯誤。

+0

你能詳細說明*你如何創建矩陣? – Tommy 2012-04-02 22:03:14

+0

@Tommy它原來是我的一部分 – 2012-04-03 21:31:30

回答

11

R中向量的理論極限是2147483647個元素。那大約有10億行/ 2列。

...但這些數據量不適合4 GB的內存...並且尤其不適用於字符向量中的字符串。每個字符串至少有96個字節(object.size('a') == 96),並且矩陣中的每個元素都是一個指向這樣一個字符串的指針(8字節)(儘管每個唯一字符串只有一個實例)。

所以通常會發生的是機器開始使用虛擬內存並開始交換。重大的交換通常會殺死在本世紀完成的所有希望 - 特別是在Windows上。

但是,如果您使用的是包裝(igraph?),並且您要求它生成矩陣,則可能會執行大量內部工作並創建大量輔助對象。所以,即使你不在單個結果矩陣的內存限制附近,用於生成它的算法可能會耗盡內存。它也可以是非線性的(二次或更差),這將再次殺死所有在本世紀完成的希望...

一個很好的調查方法可能是在一個小圖(例如使用system.time),再次將圖形大小加倍幾次。然後你可以看到時間是線性的還是二次的,你可以估計完成你的大圖需要多長時間。如果預測說一個星期,那麼你知道;-)

+1

誤差有在載體上一些開銷,在極限'object.size(字符(N))/ N'顯示字符是8個字節。 – James 2012-04-02 21:58:40

+2

@詹姆斯 - 真。字符串的大小每8個字符增加8個字符。所以'object.size('abcdefgh')== 104'(在64位系統上) – Tommy 2012-04-02 22:01:18

2

R矩陣可以在單一的索引表示法中尋址,因爲它們實際上是一個具有長度爲2的dim屬性的向量,並且在R向量中由一個帶符號的32即使您使用的是64位版本,也是一個整數。所以2列矩陣最多可以有2^30-1行。您可以使用2^31-1行和列。