[英]How to effectively store a very large list in python
問題:我有一個很大的 3D 圖像集合,我想將其存儲到一個文件中。 我應該如何有效地做到這一點?
背景:數據集有大約 1,000 張 3D MRI 圖像,大小為 256 x 256 x 156。為了避免頻繁打開和關閉文件,我試圖將它們全部存儲到一個大列表中並導出。
到目前為止,我嘗試將每個 MRI 讀取為 3D numpy 數組並將其附加到列表中。 當我嘗試使用 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.