gpt4 book ai didi

python - 如何在Python中有效存储非常大的列表

转载 作者:行者123 更新时间:2023-12-01 08:07:37 25 4
gpt4 key购买 nike

问题:我有一个大型 3D 图像集合,我想将其存储到一个文件中。 我应该如何有效地做到这一点?

背景:该数据集包含大约 1,000 张 3D MRI 图像,尺寸为 256 x 256 x 156。为了避免频繁打开和关闭文件,我试图将所有这些图像存储到一个大列表中并将其导出。

到目前为止,我尝试以 3D numpy 数组的形式读取每个 MRI 并将其附加到列表中。当我尝试使用 numpy.save 保存它时,它消耗了我所有的内存并以“内存错误”退出。
这是我尝试过的代码:

import numpy as np
import nibabel as nib
import os

file_list = os.listdir('path/to/files')

for file in file_list:
mri = nib.load(os.path.join('path/to/files',file))
mri_array = np.array(mri.dataobj)
data.append(mri_array)

np.save('imported.npy',data)

预期结果:

是否有更好的方法来存储此类数据集而不消耗太多内存?

最佳答案

如果您想将所有数据压缩到一个文件中,那么使用 HDF5 文件格式或 Numpy 的 memmap 是我首先选择的两个选项。这些选项不会将所有数据加载到内存中。

Python 有 h5py 包来处理 HDF5 文件。它们有很多功能,我通常倾向于这个选项。它看起来像这样:

import h5py

with h5py.File('data.h5') as h5file:
for n, image in enumerate(mri_images):
h5file[f'image{n}'] = image

memmap 适用于二进制文件,因此功能并不丰富。这看起来像:

import numpy as np

bin_file = np.memmap('data.bin', mode='w+', dtype=int, shape=(1000, 256, 256, 156))
for n, image in enumerate(mri_images):
bin_file[n] = image
del bin_file # dumps data to file

关于python - 如何在Python中有效存储非常大的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55466021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com