复制numpy memmap数组会发生什么?

时间:2017-02-06 04:39:46

标签: python arrays numpy

我只读取70GB的memmap数组,但只使用了~300MB。从this回答,memmap实际上并没有使用物理内存,所以我想我应该将所需的数组复制到物理内存中以获得更好的性能。

然而,当我在一个memmap和np.info()复制的数组中使用np.copy()时,该类是一个memmap。无论这种推测如何,当使用复制的数组时,我都会看到更多的内存使用和性能提升。

复制的memmap是否使用物理内存?或者是幕后的其他事情?难道它只是看起来我正在使用物理内存来复制数组,而我的电脑一直在欺骗我吗?

1 个答案:

答案 0 :(得分:3)

numpy.memmapnumpy.ndarray的子类。 memmap不会覆盖ndarray.copy()方法,因此不会触及ndarray.copy()的语义。确实复制到新分配的内存中。出于多种原因,ndarray.copy()尝试在使用子类时保持返回对象的类型相同。它对numpy.memmap没有多大意义,但对numpy.matrix等其他子类更有意义。

对于numpy.memmap,副本中的mmap特定属性设置为None,因此复制的数组的行为就像numpy.ndarray一样,除了它的类型仍然是numpy.memmap。检查源和副本中的._mmap属性以进行验证。