簡體   English   中英

如何在python中有效地存儲一個非常大的列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM