2014-09-02 37 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

相关问题