Rem*_*ems 8 python numpy matrix
我对报道的内容感到非常困惑numpy.ndarray.nbytes.
我刚刚创建了一个大小为100万(10 ^ 6)的单位矩阵,因此有1万亿行(10 ^ 12).Numpy报告说这个数组是7.28TB,但是python进程只使用3.98GB的内存,正如OSX活动监视器所报告的那样.
y = 2 * x,它应该与大小相同x,则进程内存增加到大约30GB,直到它被操作系统杀死.为什么,以及在没有内存使用扩展如此之多的情况下,我可以在x上执行什么样的操作?这是我使用的代码:
import numpy as np
x = np.identity(1e6)
x.size
# 1000000000000
x.nbytes / 1024 ** 4
# 7.275957614183426
y = 2 * x
# python console exits and terminal shows: Killed: 9
Run Code Online (Sandbox Code Playgroud)
在Linux上(我假设在Mac下发生同样的事情),当程序分配内存时,操作系统实际上不会分配它直到它使用它.
如果程序从不使用内存,那么操作系统就不必浪费内存,但是当程序请求大量内存并且实际需要使用它时,它确实将操作系统放在了一个位置,但操作系统没有没够.
当发生这种情况时,操作系统可能会开始杀死次要的其他进程并将其RAM提供给请求进程,或者只是终止请求进程(这就是现在发生的情况).
Python使用的最初4GB内存很可能是numpy 1在单位矩阵上设置的页面; 其余页面尚未使用.进行数学运算就像2*x开始访问(从而取消)所有页面一样,直到操作系统内存不足并终止你的进程.