Импорт 3D-массива из MAT-файла с использованием C ++ - PullRequest
3 голосов
/ 06 февраля 2012

Хотелось бы узнать, есть ли способ узнать размерность z массива 3D при чтении данных из файла MAT с использованием API-интерфейса MATLAB. Я реализовал функцию загрузки данных из файла следующим образом:

double* importMATFile(const char* i_file)
{
    MATFile *pMF;
    // open MAT-file
    pMF = matOpen(i_file, "r");
    // check for file errors

    // Matlab Array Data
    mxArray *mArrayData;
    // Matlab Variable Name
    const char* mVarName = NULL;
    // read data from file
    mArrayData = matGetNextVariable(pMF, &mVarName);

    // pointer to mxArray data
    double *dataPtr; 
    dataPtr = (double*) mxGetPr(mArrayData);

    // NOTE MATLAB work in COLUMN-MAJOR order

    // dimension of the array : rows
    int32_t NROWS = mxGetM(mArrayData);
    // Right now the z dimension must be known a priori
    int32_t NDEPTH = 32
    // dimension of the array : cols
    int32_t NCOLS = mxGetN(mArrayData) / NDEPTH;

    return dataPtr;
}

Я застрял при получении значения DEPTH, чтобы узнать количество столбцов. Я заметил, что результат функции mxGetNumberOfDimensions (mArrayData) равен 3 , поэтому API знает, что есть три измерения.

1 Ответ

2 голосов
/ 06 февраля 2012

Я верю, что вы хотите mxGetDimensions . Он вернет размер каждого из измерений. Это должно работать для любого количества измерений, а не только 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...