You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python保存不同维度numpy数组列表的推荐方法 解决加载报错

你遇到的报错是因为直接将包含不同维度numpy数组的列表存入npz时,numpy会自动将列表转换为object类型数组存储,numpy默认加载时allow_pickle=False(规避反序列化安全风险),因此无法直接加载。以下是几种适配场景的存储方案,均支持单文件存储多组异构数据,类似MATLAB.mat文件的使用体验:

方案1:npz动态键存储(无额外依赖、无安全风险,最推荐普通场景使用)

不需要提前获知数组数量,直接将列表中的数组按序号生成动态键存入npz即可:

  • 存储代码:
import numpy as np

# 你的异构numpy数组列表
arr_list = [np.random.rand(2,3), np.random.rand(5), np.random.rand(4,4,2)]
save_dict = {f'arr_{i}': arr for i, arr in enumerate(arr_list)}
np.savez('multi_arr.npz', **save_dict)
  • 加载代码:
loaded = np.load('multi_arr.npz')
loaded_list = [loaded[f'arr_{i}'] for i in range(len(loaded.files))]
方案2:开启allow_pickle参数(仅适用于加载自身生成的可信文件)

如果你不想修改存储逻辑,只需要在加载时添加参数即可,注意不要用于加载来源不明的文件,避免恶意代码执行风险:

# 存储逻辑保持不变
np.savez('arr_list.npz', arr_list=arr_list)
# 加载时添加allow_pickle参数
loaded = np.load('arr_list.npz', allow_pickle=True)
loaded_list = loaded['arr_list'].tolist()
方案3:HDF5格式存储(适合大规模数据、结构化存储场景)

如果你的数据量较大,或者需要类似MATLAB struct的嵌套结构化存储能力,可以使用h5py操作HDF5格式文件,底层逻辑和高版本.mat文件完全兼容:

  • 存储代码:
import h5py

arr_list = [np.random.rand(2,3), np.random.rand(5), np.random.rand(4,4,2)]
with h5py.File('data.h5', 'w') as f:
    # 存储数组列表
    arr_group = f.create_group('arr_list')
    for i, arr in enumerate(arr_list):
        arr_group.create_dataset(f'arr_{i}', data=arr)
    # 支持额外存储属性、其他数组,和MATLAB struct使用逻辑一致
    f.attrs['data_desc'] = '异构数组集合'
    f.create_dataset('other_mat', data=np.random.rand(3,3))
  • 加载代码:
with h5py.File('data.h5', 'r') as f:
    loaded_list = [f['arr_list'][f'arr_{i}'][()] for i in range(len(f['arr_list']))]
    other_mat = f['other_mat'][()]
    desc = f.attrs['data_desc']
方案4:joblib存储(适合混合存储numpy数组与普通Python对象)

如果你需要同时存储numpy数组和其他Python对象(比如字典、列表、自定义类实例),可以使用joblib,接口非常简洁:

import joblib

# 存储
joblib.dump(arr_list, 'arr_list.joblib')
# 加载
loaded_list = joblib.load('arr_list.joblib')

内容的提问来源于stack exchange,提问作者secondrate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:36:07