读写bin
前言
工程中經常將參數文件存儲為bin格式, 但是實際中為了分析其參數, 也不好用C++去讀取調試它, 所以可以用matlab或者python去讀取它, 但是還是蠻坑的
Matlab中的讀取和寫入
寫入文件
比較坑的是, 一定要注意自己的文件存儲的類型, 比如數值是float還是double之類的, 不然很容易在讀取的時候出問題.
關于數字的寫入方法如下:
fileID=fopen('MatrixTest.bin','w');%w+是不擦除,直接附加內容 a=[1,2,3;4,5,6;7,8,9]; fwrite(fileID,a,'double');%存儲為double類型 fclose(fileID);文本的寫入方法同樣:
fileID=fopen('TxtTest.bin','w');%w+是不擦除,直接附加內容 a='哈哈哈哈嗝'; fwrite(fileID,a,'char');%寫入格式char fclose(fileID);讀文件
一定要與寫入的數據類型相同
讀取bin中存儲的矩陣
fileID=fopen('MatrixTest.bin'); A=fread(fileID,[17,17],'double') fclose(fileID); %% 輸出 A'ans =1 4 7 2 5 8 3 6 9可以發現matlab是列讀取的, 如果我們知道矩陣的大小,那么就可以指定好
fileID=fopen('MatrixTest.bin'); A=fread(fileID,[3,3],'double') fclose(fileID); %輸出 A =1 2 34 5 67 8 9如果我們將double類型替換成float,得到的結果就是
A =0 2.2500 01.8750 0 2.00000 2.4375 0可以發現是完全錯誤的,當然我們不指定類型, 即去掉double, 最終的結果也是錯誤的, 因而這個格式需要非常嚴格.
讀取文本就需要用另一個函數native2unicode,而且不需要指定數據類型
fileID=fopen('TxtTest.bin'); A=fread(fileID); native2unicode(A') fclose(fileID); %輸出 ans =哈哈哈哈嗝Python中的讀取和寫入
主要涉及到tofile和fromfile兩個函數, 同時也必須注意存儲的矩陣數值的類型
寫入文件
import numpy as np import sys a=np.arange(1,10,1).reshape(3,-1) a=np.asarray(a,dtype='float') a.tofile('matrix_a.bin')這樣我們就在bin文件中存儲了一個矩陣, 類型為float
[[ 1. 2. 3.][ 4. 5. 6.][ 7. 8. 9.]]讀取文件
讀取就很簡單了,就一個函數,只不過要提前知道數據類型
b=np.fromfile('matrix_a.bin','float') #輸出 #[ 1. 2. 3. 4. 5. 6. 7. 8. 9.]總結
從這里可以發現, 無論是matlab還是python, 我們存儲和讀取的時候的數據類型一定要一致,不然讀到的結果就是錯誤的. 還可以發現matlab是按列存儲, python是按行存儲的
總結
- 上一篇: 【theano-windows】学习笔记
- 下一篇: 矩阵求导与BP的证明的建议