我正在尝试将3618和480x480大小的大型RGB图像数据集转换为numpy数组,但是由于RAM问题而停止了操作。
我尝试了许多解决方案,但没有一个起作用。
这是我尝试的代码:
def batching_function(imlist, batchsize):
ims = []
if batchsize < len(imlist):
batch = imlist[:batchsize]
elif batchsize == len(imlist):
batch = imlist[:batchsize-1]
else:
batch = imlist[:len(imlist)-1]
ims = np.array(batch,dtype='float32')
new_imlist = imlist[batchsize:]
return ims, new_imlist
imlist = dataset # list of arrays of images : size = 3617 , dataset[1].shape = (480, 480, 3)
batchsize = 100
total_files = 3618
ims0 = np.empty((0,480, 480, 3))
for i in range(int(total_files/batchsize)+1):
imsnew, imlist = batching_function(imlist, batchsize)
ims0 = np.concatenate((ims0, imsnew))
答案 0 :(得分:0)
函数numpy.savez_compressed
可以作为第一个参数bufor而不是文件路径来获取。与numpy.load
相同。因此,您可以压缩部分图像以暂时减小图像的大小。
但是,如果这样做会花费您额外的计算时间。
numpy.ndarray
以无限制的形式存储数据以加快访问速度。并且不能减少RAM使用而不会丢失信息(例如转换为numpy.float16
)