本文共 1714 字,大约阅读时间需要 5 分钟。
在科学计算过程中,数据的保存与加载是日常工作中常需完成的重要任务。在Matlab中,save和load函数提供了便利的数据存储与读取功能。Python中,numpy库提供了save和load函数,能够以.npy格式存储和读取数据;此外,scipy库的savemat和loadmat函数则允许将数据以.mat格式存储,并且能够与Matlab或Octave进行数据互动。
numpy.save()用于将numpy数组以二进制文件格式保存为.npy文件。该函数接受文件路径或文件对象作为第一个参数,以及要保存的数组作为第二个参数。以下是该函数的详细说明:
参数说明:
file:文件路径、字符串或Path对象。如果是文件对象,文件名将不变;如果是字符串或Path,会自动附加.npy扩展名。arr:要保存的数组数据。allow_pickle:布尔值,允许通过pickling方式保存对象数组,默认为True。fix_imports:布尔值,用于在Python 3中确保对象数组在Python 2中能被正确提取。示例代码:
import numpy as npa = np.mat('1,2,3;4,5,6') # 创建矩阵ab = np.array([[1, 2, 3], [4, 5, 6]]) # 创建数组bnp.save('a.npy', a) # 保存矩阵a为a.npynp.save('b.npy', b) # 保存数组b为b.npy读取文件:
data_a = np.load('a.npy')data_b = np.load('b.npy')print('data_a\n', data_a, '\n类型:', type(data_a))print('data_b\n', data_a, '\n类型:', type(data_b))输出结果显示data_a和data_b均为numpy数组,类型一致。
为了在同一个文件中同时保存多个数组,可以使用numpy.savez()函数。该函数允许将多个数组作为字典形式保存到.npz文件中。
import numpy as npnp.savez('ab.npz', k_a=a, k_b=b) # 同时保存a和b到ab.npz文件c = np.load('ab.npz')print(c['k_a']) # 输出k_a的值print(c['k_b']) # 输出k_b的值 此时c是一个字典,需要通过键名访问相应的数组。
scipy.io模块提供了savemat和loadmat函数,用于将numpy数组以Matlab矩阵格式存储为.mat文件,并支持与Matlab/Octave互动。
savemat函数:
import numpy as npfrom scipy import ioa = np.mat('1,2,3;4,5,6') # 创建矩阵ab = np.array([[1, 1, 1], [2, 2, 2]]) # 创建数组bio.savemat('a.mat', {'matrix': a}) # 保存矩阵a到a.mat文件io.savemat('b.mat', {'array': b}) # 保存数组b到b.mat文件生成的a.mat和b.mat文件可以在Matlab中被成功读取。
loadmat函数:
c = io.loadmat('a.mat')print(type(c)) # 输出字典类型print(c) # 查看字典内容读取的c是一个字典,包含MATLAB生成的文件信息。
访问矩阵数据:
print(c['a_matrix']) # 访问矩阵数据
例如,运行上述代码后,c['a_matrix']会输出矩阵[[1,2,3],[4,5,6]]。
通过以上方法,Python能够方便地将数据以多种格式保存,并支持与Matlab/Octave的数据互动。这使得数据的共享和转换更加便捷。
转载地址:http://roafk.baihongyu.com/