Python中是否存在类似Matlab的save()函数的对应功能?
Python实现类似Matlab一次性读写多组数组的方案
目前主流有三类实现方式,可根据使用场景选择:
方案1:NumPy原生savez/load(最适配纯数组场景)
如果你的输出都是NumPy数组,这是最接近Matlab使用习惯的方案,无需额外依赖。
保存示例
import numpy as np # 你代码输出的多个数组 arr_a = np.array([1, 2, 3, 4]) arr_b = np.random.rand(5, 5) arr_c = np.arange(10).reshape(2, 5) # 一次性保存所有数组,可自定义键名方便后续读取 np.savez('my_output.npz', arr_a=arr_a, arr_b=arr_b, arr_c=arr_c)
读取示例
import numpy as np # 一次性加载全部数据 loaded_data = np.load('my_output.npz') # 按存储时的键名读取对应数组 print(loaded_data['arr_a']) print(loaded_data['arr_b'])
特点
- 逻辑和Matlab的
save/load完全一致,加载后得到类字典结构,可直接遍历所有存储的数组 - 无需额外安装依赖,只要安装了NumPy即可使用
- 需压缩节省存储空间时,将
np.savez替换为np.savez_compressed即可
方案2:Pickle序列化(支持所有Python对象)
如果除了数组外你还需要同时保存其他Python对象(比如列表、字典、自定义类实例),可以用Python原生的pickle模块。
保存示例
import pickle import numpy as np arr_a = np.array([1, 2, 3, 4]) arr_b = np.random.rand(5, 5) other_data = "补充说明文字" # 可将所有数据存入字典后一次性序列化 save_content = { "arr_a": arr_a, "arr_b": arr_b, "other": other_data } with open('my_output.pkl', 'wb') as f: pickle.dump(save_content, f)
读取示例
import pickle with open('my_output.pkl', 'rb') as f: loaded_data = pickle.load(f) print(loaded_data['arr_a']) print(loaded_data['other'])
特点
- 通用性极强,支持存储几乎所有Python对象
- 仅支持Python生态内读写,无法跨语言使用
- 安全提示:不要加载来源不明的pkl文件,存在恶意代码执行风险
方案3:HDF5格式(适合超大容量数据)
如果你的数组体积达到GB甚至TB级,推荐使用HDF5格式存储,支持分块读写、流式加载。
保存示例
import h5py import numpy as np arr_a = np.array([1, 2, 3, 4]) arr_b = np.random.rand(10000, 10000) # 超大数组 with h5py.File('my_output.h5', 'w') as f: f.create_dataset('arr_a', data=arr_a) f.create_dataset('arr_b', data=arr_b, compression='gzip') # 开启压缩
读取示例
import h5py with h5py.File('my_output.h5', 'r') as f: # 支持只读取数组的部分片段,无需将全量数据加载到内存 arr_b_part = f['arr_b'][:100, :100] print(arr_b_part)
特点
- 支持超大容量数据存储,支持分块读写、压缩,内存占用极低
- 需要额外安装
h5py依赖 - 支持跨语言读写,Matlab、R等主流科研工具都可直接读取HDF5格式文件
内容的提问来源于stack exchange,提问作者Dimitri_896
相关产品推荐
相关产品推荐

