【问题标题】:Reading Variable from .mat file in C++ [duplicate]从 C++ 中的 .mat 文件中读取变量 [重复]
【发布时间】:2016-07-23 19:24:33
【问题描述】:

我正在制作一个程序,我在 matlab 中进行一些处理,然后在 matlab 中使用以下命令将结果保存在 .mat 文件中,

save data x;

假设 x=2,

现在我正在从 Visual Studio 2010 中的 C++ 程序读取相同的 data.mat 文件。我的程序正在编译,我还可以完美地读取数组的名称及其维度,.. 现在问题是当我使用以下命令,我无法读取 x 的确切值。每次我运行程序时,它都会显示一些随机值。

variable = matGetNextVariable(pmat, &name);

现在变量的值 =50779048..

请指导我在哪里犯错。变量的值应该是 2,因为我已经从 matlab cammand 中保存了 2..

我已经检查过这个问题,但似乎没有人回答, Reading .mat file in C++

void main(int argc, char **argv)
{
    MATFile *pmat;
    const char* name=NULL;
    mxArray *pa;

    /* open mat file and read it's content */
    pmat = matOpen("data.mat", "r");
    if (pmat == NULL) 
    {
        printf("Error Opening File: \"%s\"\n", argv[1]);
        return;
    }

    /* Read in each array. */
    pa = matGetNextVariable(pmat, &name);
    while (pa!=NULL)
    {
        /*
        * Diagnose array pa
        */
        printf("\nArray %s has %d dimensions.", name, 
               mxGetNumberOfDimensions(pa));

        //print matrix elements
        printf("\ndata %d",pa);

        //get next variable
        pa = matGetNextVariable(pmat,&name);

        //printf("\ndata %d",pa);
        //destroy allocated matrix
        mxDestroyArray(pa);
    }

    matClose(pmat);
}

谢谢。

【问题讨论】:

  • 默认情况下,MATLAB 会将整数写入双精度浮点数,而不是整数。这可能是您的问题,但由于您没有提供有关代码的信息,因此无法判断。另一种解决方案是将您的 .mat 文件编写为 7.3 版(将“-v7.3”添加到保存调用)。然后,这会将文件写入 HDF5 文件,您可以使用成熟的开源 HDF5 C++ API 来读取数据。
  • @Justin 感谢您的回复。我已经更新了问题并包含了我的代码。如果我在代码中遗漏了某些内容,请您看一下代码吗?

标签: c++ matlab visual-studio-2010 mat-file


【解决方案1】:

又做了很多搜索,我找到了答案。有人已经问过问题但方式不同,以下是答案的链接。我希望它可以帮助其他人。 Matlab API reading .mat file from c++, using STL container

【讨论】:

    猜你喜欢
    • 2015-06-30
    • 2014-07-31
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2018-01-07
    相关资源
    最近更新 更多