当笔记本电脑的尺寸超过系统内存时,如何在笔记本电脑上创建numpy阵列?

时间:2014-09-02 14:54:22

标签: python numpy

我有一个8GB的Macbook Pro,如果我创建一个像这样的numpy数组,它告诉我它的大小是2TB?我对此感到困惑,因为我认为一个numpy数组分配了连续的RAM。那么这是如何工作的呢?

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

1 个答案:

答案 0 :(得分: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