我有一个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