matlab 資料檔案MAT的讀與寫
相信matlab的流行, 可以從盜版的速度以及盜版的覆蓋率看出, 各大學校物理化學自動化實驗室說沒有matlab來輔助計算和模擬, 還真不能想象這個實驗室規模.
matlab 提供了額外的庫供大家存取他的資料檔案mat, 該資料檔案是二進位制的, 有特殊的頭和資料格式.
以下函式設計僅僅示範, 大家可以自創
unsigned int matrixLoadFromMat(float* A,char* Matfile,char* matrixName);
unsigned int matrixSaveToMat(float* A, char* matFile,char* matrixName,int m, int n);
兩個函式返回值都是存或者取的資料總個數, 執行期間需要安裝matlab, 並在系統path目錄有matlab的dll 所在目錄C:\Program Files\MATLAB\R2010a\bin\win64(這個是64位matlab安裝目錄) m 和 n 是矩陣的行列數, 注意一下矩陣儲存在matlab下面是按照列來儲存的.
標頭檔案
#include
unsigned int matrixLoadFromMat(float* A,char* matFile,char* matrixName)
{
MATFile *pMatFile=NULL;
mxArray *pMxArray=NULL;
float* pFloat=NULL;
unsigned int numberOfElements=0;
pMatFile = matOpen(matFile, "r");
if (pMatFile == NULL) {
printf("Error reopening file %s\n", matFile);
return 0;
}
pMxArray = matGetVariable(pMatFile, matrixName);
if (pMxArray == NULL) {
printf("Error reading existing matrix from the %s file\n",matFile);
return 0;
}
pFloat=(float*)mxGetData(pMxArray);
numberOfElements=mxGetNumberOfElements(pMxArray);
for (unsigned int i=0;i
A[i]=pFloat[i];
}
if (matClose(pMatFile) != 0) {
printf("Error closing file %s\n",matFile);
return 0;
}
mxDestroyArray(pMxArray);
return numberOfElements;
}
unsigned int matrixSaveToMat(float* A, char* matFile,char* matrixName,int m, int n)
{
MATFile *pMatFile=NULL;
mxArray *pMxArray=NULL;
double* pDouble=NULL;
int status;
unsigned int numberOfElements=0;
int i=0;
int j=0;
pMatFile = matOpen(matFile, "w");
pMxArray = mxCreateDoubleMatrix(m,n,mxREAL);
pDouble=(double*)malloc(m*n*sizeof(double));
for (int i=0;i
pDouble[i]=A[i]; //轉換成double, matlab預設資料格式double
}
if (pMxArray == NULL) {
printf("Unable to create mxArray.\n");
return 0;
}
memcpy((void*)(mxGetPr(pMxArray)), (void*)pDouble,m*n*mxGetElementSize (pMxArray));
status = matPutVariable(pMatFile, matrixName, pMxArray);
if (status != 0) {
printf("%s : Error using matPutVariable on line %d\n", __FILE__, __LINE__);
return 0;
}
mxDestroyArray(pMxArray);
free(pDouble);
if (matClose(pMatFile) != 0) {
printf("Error closing file %s\n",matFile);
return 0;
}
numberOfElements=mxGetNumberOfElements(pMxArray);
return numberOfElements;
}
程式碼相當簡單, 基本上就是用指標來獲取資料,相信大家都能看得懂, 有不懂的, 再來詢問.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20259129/viewspace-662454/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python讀取並寫入mat檔案Python
- Matlab將.mat檔案儲存為.txt檔案Matlab
- Matlab+Qt開發筆記(二):Qt開啟mat檔案顯示讀取的資料MatlabQT筆記
- python中如何使用scipy.io讀寫.mat檔案?Python
- 【MATLAB】讀取和寫入文字檔案Matlab
- c/c++、matlab讀取資料夾下的檔案C++Matlab
- Matlab檔案IO--文字與數值的寫Matlab
- python讀取檔案——python讀取和儲存mat檔案Python
- matlab寫coe檔案Matlab
- Matlab檔案IO--文字與數值的讀Matlab
- [QT]QSharedMemory讀寫cv::MatQT
- RM-2 使用matlab進行txt檔案讀寫Matlab
- 檔案的讀寫
- matlab讀取npy檔案Matlab
- Python讀取、儲存、檢視.mat檔案Python
- python之 檔案讀與寫Python
- matlab讀資料Matlab
- 檔案讀寫
- MATLAB快速讀取STL檔案Matlab
- 普通檔案的讀寫
- alwayson只讀節點資料檔案的磁碟被寫滿
- 【萬里征程——Windows App開發】檔案&資料——寫入與讀取WindowsAPP
- matlab輸出資料為excel檔案MatlabExcel
- matlab遍歷資料夾下的所有檔案Matlab
- 檔案排版(文字檔案讀寫)
- 用MATLAB編寫VIVADO的coe檔案Matlab
- HDFS讀檔案過程分析:讀取檔案的Block資料BloC
- Golang 讀、寫檔案Golang
- keras讀寫檔案Keras
- perl 讀寫檔案
- 檔案讀寫IO
- IO流的檔案讀寫
- Scala檔案的讀寫操作
- Python(3):檔案讀寫與異常Python
- EEGlab匯入.mat檔案
- 檔案與資料
- DBWR 寫資料檔案 (zt)
- Matlab & C++ 混合程式設計mex檔案的編寫與除錯MatlabC++程式設計除錯