我只读取70GB的memmap数组,但只使用了~300MB。从this回答,memmap实际上并没有使用物理内存,所以我想我应该将所需的数组复制到物理内存中以获得更好的性能。
然而,当我在一个memmap和np.info()复制的数组中使用np.copy()时,该类是一个memmap。无论这种推测如何,当使用复制的数组时,我都会看到更多的内存使用和性能提升。
复制的memmap是否使用物理内存?或者是幕后的其他事情?难道它只是看起来我正在使用物理内存来复制数组,而我的电脑一直在欺骗我吗?
答案 0 :(得分:3)
numpy.memmap
是numpy.ndarray
的子类。 memmap
不会覆盖ndarray.copy()
方法,因此不会触及ndarray.copy()
的语义。确实复制到新分配的内存中。出于多种原因,ndarray.copy()
尝试在使用子类时保持返回对象的类型相同。它对numpy.memmap
没有多大意义,但对numpy.matrix
等其他子类更有意义。
对于numpy.memmap
,副本中的mmap
特定属性设置为None
,因此复制的数组的行为就像numpy.ndarray
一样,除了它的类型仍然是numpy.memmap
。检查源和副本中的._mmap
属性以进行验证。