我想知道为什么numpy.zeros占用这么小的空间?
x = numpy.zeros(200000000)
这不会占用任何内存,
x = numpy.repeat(0,200000000)
占用约1.5GB。numpy.zeros是否创建一个空指针数组?如果是这样,是否可以在cython中更改指针后将其设置为空?如果我使用:
x = numpy.zeros(200000000) x[0:200000000] = 0.0
内存使用率上升。有没有办法更改一个值,然后将其更改回numpy.zeros的格式,最初是在python或cython中使用的?
您在使用Linux吗?Linux的内存分配是延迟的。malloc和callocnumpy中的基础调用始终“成功”。在首次访问该内存之前,实际上没有分配任何内存。
malloc
calloc
该zeros函数将使用calloc它在首次访问之前将所有分配的内存清零。因此,numpy无需将数组显式清零,因此将延迟初始化数组。而该repeat函数不能依赖于calloc初始化数组。相反,它必须使用malloc然后将重复项复制到数组中的所有元素(因此强制立即分配)。
zeros
repeat