我有一个非常大的.npy文件(以前使用np.save保存),我正在加载它:
np.load(open('file.npy'))
有什么方法可以看到加载过程的进度?我知道TQDM和其他一些用于监视进度的库,但不要将它们用于此问题。
谢谢!
我知道,np.load
不提供任何回调或钩子来监视进度。但是,有可能有效的工作:np.load
可以作为内存映射的文件打开文件,这意味着数据停留在磁盘上,并且仅按需将其加载到内存中。我们可以滥用此机器,以使用可以监视进度的循环将来自内存映射的文件的数据手动复制到实际内存中。
这是一个带有粗略进度监视器的示例:
import numpy as np
x = np.random.randn(8096, 4096)
np.save('file.npy', x)
blocksize = 1024 # tune this for performance/granularity
try:
mmap = np.load('file.npy', mmap_mode='r')
y = np.empty_like(mmap)
n_blocks = int(np.ceil(mmap.shape[0] / blocksize))
for b in range(n_blocks):
print('progress: {}/{}'.format(b, n_blocks)) # use any progress indicator
y[b*blocksize : (b+1) * blocksize] = mmap[b*blocksize : (b+1) * blocksize]
finally:
del mmap # make sure file is closed again
assert np.all(y == x)
将任何进度栏库插入循环中应直接向前。
由于内存限制,我无法用异常大的数组进行测试,因此我无法真正判断此方法是否存在任何性能问题。