我有一個8GB的MacBook Pro,如果我創建一個像這樣的numpy數組,它告訴我它的大小是2Terabytes?我很困惑,因爲我認爲一個numpy數組分配連續的RAM。那麼這是如何工作的?當筆記本電腦的尺寸超過系統內存時,如何在筆記本電腦上創建numpy陣列?
array = np.zeros(1000000 * 1000000, dtype="int16")
In [28]: array.nbytes
Out[28]: 2000000000000
我有一個8GB的MacBook Pro,如果我創建一個像這樣的numpy數組,它告訴我它的大小是2Terabytes?我很困惑,因爲我認爲一個numpy數組分配連續的RAM。那麼這是如何工作的?當筆記本電腦的尺寸超過系統內存時,如何在筆記本電腦上創建numpy陣列?
array = np.zeros(1000000 * 1000000, dtype="int16")
In [28]: array.nbytes
Out[28]: 2000000000000
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
謝謝,那是我想要的解釋。 – Handloomweaver 2014-09-02 15:37:34
你的硬盤有多大?可能在交換空間。另外,你還期待什麼? – 2014-09-02 15:01:48
http://en.wikipedia.org/wiki/Virtual_memory – 2014-09-02 15:17:44
硬盤是256GB,只有17GB免費? – Handloomweaver 2014-09-02 15:24:05