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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Matlab+Qt開發筆記(二):Qt開啟mat檔案顯示讀取的資料MatlabQT筆記
- python中如何使用scipy.io讀寫.mat檔案?Python
- c/c++、matlab讀取資料夾下的檔案C++Matlab
- RM-2 使用matlab進行txt檔案讀寫Matlab
- matlab讀取npy檔案Matlab
- [QT]QSharedMemory讀寫cv::MatQT
- 檔案的讀寫
- MATLAB快速讀取STL檔案Matlab
- matlab讀資料Matlab
- matlab輸出資料為excel檔案MatlabExcel
- matlab遍歷資料夾下的所有檔案Matlab
- 普通檔案的讀寫
- EEGlab匯入.mat檔案
- 檔案排版(文字檔案讀寫)
- Python中的檔案讀寫Python
- Golang 讀、寫檔案Golang
- Python 讀寫檔案Python
- Python——檔案讀寫Python
- keras讀寫檔案Keras
- 「Python」:檔案讀寫Python
- 檔案與資料
- 讀取資料夾檔案
- python config配置檔案的讀寫Python
- python讀寫excel檔案PythonExcel
- C++讀寫檔案C++
- python檔案讀寫操作Python
- C++檔案讀寫C++
- VBA建立文字檔案、讀寫文字檔案
- Python中的檔案的讀寫操作Python
- Python中檔案的讀寫、寫讀和追加寫讀三種模式的特點Python模式
- 用 ABAP 新建本地 Excel 檔案並寫入資料試讀版Excel
- java資料list寫入檔案Java
- 使用yaml檔案讀取資料YAML
- Python中讀寫Parquet檔案的方法Python
- csv檔案的寫入和讀取
- 讀取檔案流並寫入檔案流
- Python:讀寫檔案(I/O) | 組織檔案Python
- nodejs xmlreader 讀寫xml檔案NodeJSXML
- C++檔案讀寫操作C++