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
将破坏此优化,因为新数组是无论如何创建。您可以手动交换行对以减少内存占用。为了获得更好的性能,您可以翻转和交换行块。
我正在编写大型数组,所以我正在使用 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
将破坏此优化,因为新数组是无论如何创建。您可以手动交换行对以减少内存占用。为了获得更好的性能,您可以翻转和交换行块。