加载未选取文件时的大数据量

时间:2019-03-16 15:13:17

标签: python python-3.x

拆开后,文件大小出现问题。文件夹的大小

当我在

中填充图像时,在酸洗之前约为307 MB(形状= 357,227,227)

将文件夹设置为所需的大小(6000,227,227),然后使用gzip将其腌制

压缩,泡菜文件大小变为14 mb。但是,当我尝试

将加载的pickle文件加载到内存中时为1.25 GB,

磁盘307 MB为什么会发生这种情况,有没有办法用它加载pickle文件

是否有相同大小的内存?下面是示例输出。

import gzip


 f=gzip.open('C:/Users/Documents/data/folder_030.pklz','rb')
 img_array = pickle.load(f)
 img_array.shape
 print('size of unpickle images',sys.getsizeof(img_array) )


 X = np.empty((1,6106 ,227, 227), dtype='float32')

 print('empty X shape',X.shape)

for i in range(1):

  X[i] = img_array

 print(X.shape)


 print('size of unpickle file',sys.getsizeof(X))

这是输出:

 (6106, 227, 227)
 size of unpickled images 128

 X.shape (1, 6106, 227, 227)
 size of x  1258544440

1 个答案:

答案 0 :(得分:1)

磁盘上存储的任何数据的大小都将与脚本中的相同数据大不相同。磁盘上存储的数据几乎总是比内存中的数据(点刺,h5或正在使用的任何数据)小。当您加载数据时,它会从字节(实际上是泡菜)转换为numpy对象,该对象包含许多由于明显的原因而不会存储在磁盘上的属性和属性-不需要它们。在磁盘上,您只需要数组的值,仅此而已。那没有增加对压缩的影响。但是,当您将数据加载到内存中时,所有这些属性都会被初始化,以便能够快速访问切片,数学运算和转换。考虑以下切片:

im[:,:2]

如果Numpy不使用多个指针来快速有效地访问该信息,则它可能无法发挥其功能或性能。不用说,这些指针将对内存产生重大影响。因此,不行,恐怕您将无法将泡菜装载到内存中,也无法为内存支付额外的费用。