參考文獻:https://www.cnblogs.com/Yiutto/p/5827775.html
在科學計算的過程中,往往需要保存一些數據,也經常需要把保存的這些數據加載到程序中,在 Matlab 中我們可以用 save 和 lood 函數很方便的實現。類似的在 Python 中,我們可以用 numpy.save() 和 numpy.load() 函數達到類似的效果,並且還可以用 scipy.io.savemat() 將數據保存為 .mat 格式,用scipy.io.loadmat() 讀取 .mat 格式的數據,達到可以和 Matlab 或者Octave 進行數據互動的效果.
下面分別介紹之:
numpy.save() 和 numpy.load() numpy.save(arg_1,arg_2) 需要兩個參數,arg_1 是文件名,arg_2 是要保存的數組. 如: import numpy as np a=np.mat('1,2,3;4,5,6') b=np.array([[1,2,3],[4,5,6]]) np.save('a.npy',a) np.save('b.npy',b)
這個時候 Python 的當前工作路徑下就會多出 a.npy 和 b.npy 兩個文件,當然我們也可以給出具體的路徑,如 np.save('D:/PythonWork/a.npy',a)
-
下面我們把保存的這兩個數據文件導入到Python :
data_a=np.load('a.npy') data_b=np.load('b.npy') print ('data_a \n',data_a,'\n the type is',type(data_a)) print ('data_b \n',data_a,'\n the type is',type(data_b)) data_a [[1 2 3] [4 5 6]] the type is <class 'numpy.ndarray'> data_b [[1 2 3] [4 5 6]] the type is <class 'numpy.ndarray'>
-
我們可以看到這一過程把原本為矩陣的 a 變為數組型了
-
如果想同時保存 a b 到同一個文件,我們可以用 np.savez() 函數,具體用法如下:
np.savez('ab.npz',k_a=a,k_b=b) c=np.load('ab.npz') print (c['k_a']) print (c['k_b']) [[1 2 3] [4 5 6]] [[1 2 3] [4 5 6]]
-
這時的 c 是一個字典,需要通過關鍵字取出我們需要的數據
-
下面我們來認識下 scipy.io.savemat() 和 scipy.io.loadmat()
首先我們用 scipy.io.savemat() 創建 .mat 文件,該函數有兩個參數,一個文件名和一個包含變量名和取值的字典.
import numpy as np from scipy import io a=np.mat('1,2,3;4,5,6') b=np.array([[1,1,1],[2,2,2]]) io.savemat('a.mat', {'matrix': a}) io.savemat('b.mat', {'array': b})
-
至此 Python 的當前工作路徑下就多了 a.mat 和 b.mat 這兩個文件.
下面我們用 Matlab 讀取這兩個文件
可以看到 Matlab 已成功讀取 Python 生成的 .mat 文件.
我們在來看看 Python 是怎么讀取 .mat 文件的。首先來讀取剛才生成的 a.mat
c=io.loadmat('a.mat') print (type(c)) print (c) dict {'__version__': '1.0', '__globals__': [], '__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Tue Aug 4 16:49:28 2015', 'a_matrix': array([[1, 2, 3],[4, 5, 6]])}
-
所以 Python 讀取.mat 文件后返回的是個字典,如果要訪問里面的值,就要用到關鍵字,如:
print(c['a_matrix']) [[1 2 3] [4 5 6]]
-
當然了,Python 也可以讀取 Matlab 創建的 .mat 文件,從而可以把他們設置在同一工作路徑下,在必要的時候進行數據的共享.
-
-