2010-01-27 4 views

Répondre

0

Ce document décrit l'interface pour lire et écrire des fichiers MAT en C/C++:

http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_external/f39876.html#f13830

+0

J'ai lu les documents, mais je suis un peu confus. Comment puis-je importer des données de la structure de données mxarray vers une structure de données primitive comme un double tableau multi-dim? Quelqu'un peut-il me donner un extrait de code .. – iceman

+0

J'ai vu le fichier matdgns.c – iceman

1

Le format de fichier MatLab documented here. Ça n'a pas l'air trop poilu.

Editer: Désolé, le lien est corrompu.

+0

Le lien de la documentation que vous avez suivi n'est plus valide. – iceman

1

Lien avec libmx.lib, libmat.lib, libeng.lib et inclut les en-têtes mat.h et engine.h. J'ignore le composant imaginaire des données et suppose que vous sachiez comment utiliser le STL C++. Le code ci-dessous est adéquate, mais une interface plus facile appelé mxWrapper est disponible ici: http://www.mathworks.com/matlabcentral/fileexchange/28331-replacement-for-mwarray-using-matlab-engine

vector<double> readSomeNumbers() {

vector<double> data; 

    mxArray *pMx=load("c:\\someFile.mat", "foobar"); 

    if (!pMx) return data; 

    ASSERT(mxGetClassID(pMx) == mxDOUBLE_CLASS); 

    data.assign(mxGetPr(pMx), mxGetPr(pMx)+mxGetNumberOfElements(pMx)); 

    mxDestroyArray(pMx); 

    return data; 
} 

mxArray *load(const string& fileName, const string& variableName) 
{ 

    MATFile *pmatFile = matOpen(fileName.c_str(), "r"); 

    if(pmatFile == NULL) 
     return NULL; 

    mxArray* pMx = matGetVariable(pmatFile, variableName.c_str()); 

    if(pMx == NULL) 
    { 
     matClose(pmatFile); 
     return NULL; 
    } 

    matClose(pmatFile); 
    return pMx; 
} 

Questions connexes