首页 > 解决方案 > 如何在matlab mex文件中输出整数向量?

问题描述

我有一个 c++ 代码,它生成一些整数序列。我需要为 matlab 编写一个 mex 文件,它会给我输出。

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


void
mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
double *Input;
mxArray *mxInput,*mxOutput;
//associate inputs
mxInput = mxDuplicateArray(prhs[0]); 
Input=mxGetPr(mxInput);

// number of Steps
int NumOfSteps = (int) Input[0];
// collect diffs    
std::vector <int> result_vector;

// Initialize random generator
std::random_device rnd_device;
std::mt19937_64 rg(rnd_device());
std::normal_distribution<double> Xi(0,1);

// iterate

for (int iStep=0; iStep<NumOfSteps;iStep++) 
{
    if ((Xi(rg)-Xi(rg)) >= 0.5)
    {
       result_vector.push_back(iStep);
    }
}
// Here i should copy result_vector to output

}

我知道如何通过循环来做到这一点,以元素方式应对结果,但我希望应该有更好的解决方案。

你能给我一些建议如何result_vector在我的 mex 文件中输出吗?

更新:

我找到了以下解决方案:

int vecN = result_vector.size();
mxOutput = plhs[0] = mxCreateDoubleMatrix(1,vecN, mxREAL);    
Output=mxGetPr(mxOutput);
std::copy(result_vector.begin(),result_vector.end(),Output);

我在 C++ 中真的很糟糕,这是正确的方法吗?

标签: c++matlabvectormex

解决方案


推荐阅读