Python 使用np.Load进度条加载.npy文件
我有一个非常大的.npy文件(以前用np.save保存),我正在加载它:Python 使用np.Load进度条加载.npy文件,python,numpy,progress-bar,Python,Numpy,Progress Bar,我有一个非常大的.npy文件(以前用np.save保存),我正在加载它: np.load(open('file.npy')) 有没有办法查看加载过程的进度?我知道TQM和其他一些用于监控进度的库,但不知道如何使用它们解决这个问题 谢谢大家! 据我所知,np.load不提供任何回调或挂钩来监控进度。但是,有一个解决办法可能会奏效:np.load可以将文件作为内存映射文件打开,这意味着数据保留在磁盘上,并且仅在需要时加载到内存中。我们可以滥用这种机制,使用一个可以监控进程的循环,手动将数据从内存映
np.load(open('file.npy'))
有没有办法查看加载过程的进度?我知道TQM和其他一些用于监控进度的库,但不知道如何使用它们解决这个问题
谢谢大家! 据我所知,
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)
将任何进度条库插入循环应该是直接的
由于内存限制,我无法用非常大的阵列来测试这一点,因此我无法确定这种方法是否存在任何性能问题