Python Numpy数据与变量保存方法咨询(含Matlab相关对比)
Hey there! 既然你熟悉Matlab的文件处理逻辑,那我直接对应着给你梳理Numpy里适配的方案,绝对能对上你习惯的用法~
对应Matlab「简易小文件」的Numpy方案
如果是处理小数据量、想快速保存/读取单个或多个变量,这两个方法最常用:
- 单个数组保存:用
numpy.save()和numpy.load(),生成的.npy文件是Numpy专属的二进制格式,读写速度快,还能保留数组的维度、dtype等信息。import numpy as np # 保存单个矩阵/向量 my_matrix = np.random.rand(100, 100) np.save('my_matrix.npy', my_matrix) # 读取 loaded_matrix = np.load('my_matrix.npy') - 多个变量保存:用
numpy.savez()或numpy.savez_compressed(),生成的.npz文件相当于打包了多个.npy,savez_compressed还会压缩文件大小,省存储空间。读取时可以像字典一样按名称访问变量。arr1 = np.array([1, 2, 3]) arr2 = np.matrix([[1,2],[3,4]]) # 保存多个命名变量 np.savez('my_vars.npz', vec=arr1, mat=arr2) # 压缩版(更省空间) np.savez_compressed('my_vars_compressed.npz', vec=arr1, mat=arr2) # 读取变量 loaded_data = np.load('my_vars.npz') print(loaded_data['vec']) # 访问向量 print(loaded_data['mat']) # 访问矩阵
对应Matlab「大变量/可检索」的Numpy方案
如果要处理2G以上的超大数组,或者需要随机检索部分数据(不用一次性读入内存),推荐用HDF5格式,配合h5py库(先通过pip install h5py安装),完全对应Matlab里处理大文件+可检索的需求:
import h5py import numpy as np # 写入大数组,支持压缩 large_arr = np.random.rand(10000, 10000) # 模拟超大矩阵 with h5py.File('large_data.h5', 'w') as f: # 创建数据集,指定压缩算法(比如gzip)减小文件大小 dset = f.create_dataset('large_matrix', data=large_arr, compression='gzip') # 读取时只取部分数据,不用全加载到内存 with h5py.File('large_data.h5', 'r') as f: # 比如只取前100行、前100列 partial_arr = f['large_matrix'][:100, :100] print(partial_arr.shape) # 输出 (100, 100)
这种方式不仅能处理超大文件,还支持像操作数组一样直接索引部分数据,非常灵活。
与Matlab直接交互的兼容方案
如果需要和Matlab的.mat文件无缝对接(不管是读取Matlab生成的文件,还是让Python生成的数据能直接在Matlab里用),用scipy.io里的方法就对了:
from scipy.io import savemat, loadmat # 保存为Matlab兼容的.mat文件 data_dict = {'my_matrix': np.random.rand(50,50), 'my_vector': np.random.rand(100)} savemat('matlab_data.mat', data_dict) # 读取Matlab的.mat文件 mat_data = loadmat('matlab_data.mat') print(mat_data['my_matrix']) print(mat_data['my_vector'])
这个方法完美适配Matlab的文件格式,变量名也能直接对应,不用额外转换。
内容的提问来源于stack exchange,提问作者user8930103
相关产品推荐
相关产品推荐

