Python 加载未勾选文件时数据量大
取消勾选后,文件大小有问题。文件夹的大小 在酸洗之前,当我将图像插入时,大约307MB(shape=357227227) 将文件夹设置为所需大小(6000227227),然后使用gzip对其进行pickle 压缩时,pickle文件大小为14MB。然而,当我试图 将其加载到内存中的pickle文件加载为1.25 GB,同时该文件位于 磁盘307MB为什么会发生这种情况,有没有办法用它加载pickle文件 内存大小是否相同?下面是示例输出Python 加载未勾选文件时数据量大,python,python-3.x,Python,Python 3.x,取消勾选后,文件大小有问题。文件夹的大小 在酸洗之前,当我将图像插入时,大约307MB(shape=357227227) 将文件夹设置为所需大小(6000227227),然后使用gzip对其进行pickle 压缩时,pickle文件大小为14MB。然而,当我试图 将其加载到内存中的pickle文件加载为1.25 GB,同时该文件位于 磁盘307MB为什么会发生这种情况,有没有办法用它加载pickle文件 内存大小是否相同?下面是示例输出 import gzip f=gzip.open('C
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
存储在磁盘上的任何数据都将与脚本中的相同数据具有非常不同的大小。存储在磁盘上的数据几乎总是比内存中的数据(pickles、h5或任何您正在使用的数据)占用更小的空间。加载数据时,数据会从字节(pickle本质上是什么)转换为numpy对象,该对象包含许多属性和属性,这些属性和属性由于一个明显的原因不会存储在磁盘上—它们不需要。在磁盘上,您只需要阵列的值,仅此而已。这不需要添加压缩效果。然而,当您将数据加载到内存中时,所有这些属性都会初始化,以便能够快速访问切片、数学运算和转换。想想下面的片段:
im[:,:2]
如果Numpy不使用大量指针来快速高效地访问这些信息,它就不可能拥有它的能力或性能。不用说,这些指针将对记忆产生重大影响。因此,不,恐怕你无法将pickle加载到内存中,也无法用内存支付额外的费用。谢谢@Alexander Ejbekov,所以除了pickle之外,没有其他技术可以解决这个问题了?@N.zay不,至少不是以传统的方式。但是,有一些方法可以克服这一问题,这取决于您试图做什么,也就是将任务分配到多台机器,或者处理大量数据,或者求助于诸如dask之类的解决方案,但您的性能将不可避免地受到io操作或联网速度缓慢等因素的影响。总是有权衡的。