2014-09-02 48 views
1

我有一個8GB的MacBook Pro,如果我創建一個像這樣的numpy數組,它告訴我它的大小是2Terabytes?我很困惑,因爲我認爲一個numpy數組分配連續的RAM。那麼這是如何工作的?當筆記本電腦的尺寸超過系統內存時,如何在筆記本電腦上創建numpy陣列?

array = np.zeros(1000000 * 1000000, dtype="int16") 
In [28]: array.nbytes 
Out[28]: 2000000000000 
+0

你的硬盤有多大?可能在交換空間。另外,你還期待什麼? – 2014-09-02 15:01:48

+1

http://en.wikipedia.org/wiki/Virtual_memory – 2014-09-02 15:17:44

+0

硬盤是256GB,只有17GB免費? – Handloomweaver 2014-09-02 15:24:05

回答

3

malloc實現正在玩弄你的技巧。大量的保留空間由於安全性而被內核調零,並且在實際使用它們之前可能不會實際給您。

在我的機器(Linux,8GB RAM)中,內存錯誤的閾值較低。這應該分配數據的6 GB:

arr = np.zeros(3000000000, dtype='int16') 

至於這樣做的:

arr2 = np.empty(3000000000, dtype='int16') 

但內存使用量是一樣的。如果你試圖做

arr_ones = np.ones(3000000000, dtype='int16') 

你會看到內存使用率快速爆炸。如果你想看到你的電腦慢慢墜落,直到它崩潰,這樣做:

for i in xrange(len(arr)): 
    arr[i] = 5 
+0

謝謝,那是我想要的解釋。 – Handloomweaver 2014-09-02 15:37:34