use*_*890 11 python arrays numpy cython
我想知道为什么numpy.zeros占用这么小的空间?
x = numpy.zeros(200000000)
Run Code Online (Sandbox Code Playgroud)
这不占用任何记忆,
x = numpy.repeat(0,200000000)
Run Code Online (Sandbox Code Playgroud)
占用约1.5GB.numpy.zeros会创建一个空指针数组吗?如果是这样,有没有办法在cython中更改它后将指针设置为空?如果我使用:
x = numpy.zeros(200000000)
x[0:200000000] = 0.0
Run Code Online (Sandbox Code Playgroud)
内存使用率上升.有没有办法改变一个值,然后将其改回原来在python或cython中使用的格式numpy.zeros?
Dun*_*nes 19
你在用Linux吗?Linux有懒惰的内存分配.底层调用malloc,并calloc在numpy的总是"成功".在首次访问内存之前,实际上没有分配内存.
在首次访问之前,该zeros函数将使用calloc任何已分配内存的零.因此,numpy不需要明确地将数组归零,因此数组将被懒惰地初始化.然而,repeat函数不能依赖于calloc初始化数组.相反,它必须使用malloc然后将重复复制到数组中的所有元素(从而强制立即分配).