小编典典

为什么numpy.zeros占用很少的空间

python

我想知道为什么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中使用的?


阅读 273

收藏
2020-12-20

共1个答案

小编典典

您在使用Linux吗?Linux的内存分配是延迟的。malloccallocnumpy中的基础调用始终“成功”。在首次访问该内存之前,实际上没有分配任何内存。

zeros函数将使用calloc它在首次访问之前将所有分配的内存清零。因此,numpy无需将数组显式清零,因此将延迟初始化数组。而该repeat函数不能依赖于calloc初始化数组。相反,它必须使用malloc然后将重复项复制到数组中的所有元素(因此强制立即分配)。

2020-12-20