我有一个8GB的Macbook Pro,如果我创建一个像这样的numpy数组,它告诉我它的大小是2TB?我对此感到困惑,因为我认为一个numpy数组分配了连续的RAM。那么这是如何工作的呢?
array = np.zeros(1000000 * 1000000, dtype="int16")
In [28]: array.nbytes
Out[28]: 2000000000000
答案 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