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

Jee*_*oon 4 python arrays numpy

我对 70GB memmap 数组进行只读操作,但仅使用其中的约 300MB。从这个答案中得知,memmap 实际上并不使用物理内存,所以我认为我应该将所需的数组复制到物理内存中以获得更好的性能。

但是,当我 np.copy() 一个 memmap 和 np.info() 复制的数组时,该类是一个 memmap。不管这种猜测如何,当使用复制数组时,我看到更多的内存使用和性能的提高。

复制的内存映射是否使用物理内存?或者幕后还有其他事情发生?是不是看起来我正在使用物理内存来复制数组,而我的计算机一如既往地欺骗我?

Rob*_*ern 7

numpy.memmap是 的子类numpy.ndarraymemmap不会覆盖该方法,因此不会触及ndarray.copy()的语义。ndarray.copy()确实已复制到新分配的内存中。由于多种原因,ndarray.copy()在使用子类时尝试保持返回对象的类型相同。对于numpy.memmap其他子类(例如numpy.matrix.

在 的情况下numpy.memmapmmap副本中的特定属性设置为None,因此复制的数组的行为就像 a 一样numpy.ndarray,只是其类型仍然是numpy.memmap。检查._mmap源和副本中的属性以进行验证。