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

时间:2014-12-19 22:39:07

标签: python arrays numpy cython

我想知道为什么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

内存使用率上升。有没有办法改变一个值,然后将其改回原来在python或cython中使用的格式numpy.zeros?

1 个答案:

答案 0 :(得分:19)

您使用的是Linux吗? Linux有懒惰的内存分配。 numpy中对malloccalloc的基本调用始终“成功”。在首次访问内存之前,实际上没有分配内存。

zeros函数将使用calloc,它在首次访问之前将任何已分配的内存归零。因此,numpy不需要明确地将数组归零,因此数组将被懒惰地初始化。然而,repeat函数不能依赖calloc初始化数组。相反,它必须使用malloc,然后将重复复制到数组中的所有元素(从而强制立即分配)。