Python: 使用 numpy flip 和 memmap

Python: Use numpy flip with memmap

我正在编写大型数组,所以我正在使用 numpy memmap

在我的操作结束时,我想使用翻转功能,但问题是,在 memap 上使用刷新功能后,翻转功能不适用

import numpy as np
from matplotlib import pyplot as plt

#Create array on disk

fpc = np.memmap("test3.rgb", dtype=np.uint8, mode='w+', shape=(10000,20000,3))
fpc[0:5000] = [255,0,0]     #Top red
fpc[5000:10000] = [0,255,0] #Bottom green


plt.subplot(131)
plt.title("Before flip")
plt.imshow(fpc)


#Apply flip function, so green come on top
fpc = np.flip(fpc,0)

plt.subplot(132)
plt.imshow(fpc)
plt.title("After flip")

#Save changes
fpc.flush()

#Reload array
fpc = np.memmap("test3.rgb", dtype=np.uint8, mode='r', shape=(10000,20000,3))


plt.subplot(133)
plt.title("After reload")
plt.imshow(fpc)
plt.show()

结果:

memmap真的可以用翻转功能吗?

np.flip 在内存中创建一个新数组。您需要设置映射到文件的那个。当前代码仅更改 fpc 的引用以引用新数组。您可以使用以下方法解决该问题:

fpc[:,:] = np.flip(fpc,0)

更新: 请注意,如果您使用 memmap 来减少内存占用,那么执行 np.flip 将破坏此优化,因为新数组是无论如何创建。您可以手动交换行对以减少内存占用。为了获得更好的性能,您可以翻转和交换行块