mex从mex函数将矢量从c ++传输到matlab

时间:2012-03-09 20:44:29

标签: mex

我正在尝试通过在C ++中编写一些函数并使用mex接口来集成它们来使我的Matlab程序更加完善。我用c ++中的向量得到了我的结果。我想将它传输到MATLAB中的数组。 我知道我应该重定向

 plhs[0] to the vector 
但我不明白我该怎么做。

1 个答案:

答案 0 :(得分:6)

当我完成类似的事情时,我手动编组数据,以便在C ++例程完成时不会释放它。这是一个基本概要:

#include <vector>
#include "mex.h"

mxArray * getMexArray(const std::vector<double>& v){
    mxArray * mx = mxCreateDoubleMatrix(1,v.size(), mxREAL);
    std::copy(v.begin(), v.end(), mxGetPr(mx));
    return mx;
}

void mexFunction(int nlhs, mxArray *plhs[ ], int nrhs, const mxArray *prhs[ ]) {
    std::vector<double> v;

    v.push_back(0);
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

    plhs[0] = getMexArray(v);

}

如果我将其保存为test.cpp然后在该目录中打开matlab,我会执行以下操作:

>> mex test.cpp
>> test

ans =

      0     1     2     3

这是预期的输出。希望这是一个很好的起点 - 你可能想要内联它,但我不确定它的好处。顺便说一句,如果你还没有查看matlab mex help,那就是一个很好的资源。