Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Matlab mex文件中使用特征向量 我尝试使用特征库来做一个C++,我想把它变成Matlab的MEX文件。我将代码分解为以下要点。我需要生成一个返回向量,其长度对应于输入矩阵中的行数_C++_Matlab_Mex_Eigen - Fatal编程技术网

在Matlab mex文件中使用特征向量 我尝试使用特征库来做一个C++,我想把它变成Matlab的MEX文件。我将代码分解为以下要点。我需要生成一个返回向量,其长度对应于输入矩阵中的行数

在Matlab mex文件中使用特征向量 我尝试使用特征库来做一个C++,我想把它变成Matlab的MEX文件。我将代码分解为以下要点。我需要生成一个返回向量,其长度对应于输入矩阵中的行数,c++,matlab,mex,eigen,C++,Matlab,Mex,Eigen,使用下面的代码,我在编译对应于该行的代码时会出现以下错误: double y_OUT[nrow]={} 错误C2057:预期的常量表达式错误 错误C2466:无法分配常量大小为0的数组 我不明白为什么我不能分配长度nrow的向量。 通过取消对特定行的注释并打印nrow,我验证了它实际上包含正确的数字。有人能给点建议吗(双关语) void mexFunction( 国际nlhs, mxArray*plhs[], 国际nrhs, 常量mxArray*prhs[] ) { 双x_英寸; int n

使用下面的代码,我在编译对应于该行的代码时会出现以下错误:

double y_OUT[nrow]={}

  • 错误C2057:预期的常量表达式错误
  • 错误C2466:无法分配常量大小为0的数组
我不明白为什么我不能分配长度nrow的向量。 通过取消对特定行的注释并打印nrow,我验证了它实际上包含正确的数字。有人能给点建议吗(双关语)

void mexFunction(
国际nlhs,
mxArray*plhs[],
国际nrhs,
常量mxArray*prhs[]
)
{
双x_英寸;
int nrow,ncols;
/*检查参数的数目是否正确*/
//...
x_IN=mxGetPr(prhs[0]);
nrow=(int)mxGetM(prhs[0]);
ncols=(int)mxGetN(prhs[0]);
双y_OUT[nrow]={};
矩阵x=映射(x_IN,nrow,ncols);
VectorXd response=VectorXd::零(nrow);
Map(y_OUT,nrow)=响应数组();
返回;
}

您没有在其中分配任何内容。行
double y_OUT[nrow]={}包含两个错误。如错误消息所述

  • nrow
    不是
    constexpr
    。无法在编译时对其求值
  • 通过大括号初始值设定项,您建议向量具有
    0
    元素,这也没有意义
  • 动态分配的正确语法是:
    double*y_OUT=newdouble[nrow]。我想这就是你想要的。您使用的
    double y_OUT[nrow]
    语法用于静态分配,换句话说,在编译时必须知道数组的大小


    旁注:当然你需要记住释放你保留的内存。问题与主题IMO=)完全无关。

    您是否能够更正代码?你能把它更新到工作版本吗?我无法从mex matlab输入参数创建特征矩阵。我无法将@MrOperator转换为特征,你能看一下吗:?谢谢
         void mexFunction(
                 int          nlhs,
                 mxArray      *plhs[],
                 int          nrhs,
                 const mxArray *prhs[]
                 )
        {
    
    
    
          double *x_IN;
          int nrow,ncols;
    
          /* Check for proper number of arguments */
          //...
    
          x_IN = mxGetPr(prhs[0]);
          nrow = (int)mxGetM(prhs[0]);
          ncols = (int)mxGetN(prhs[0]);
    
          double y_OUT[nrow] = {};
    
          MatrixXd x=Map<MatrixXd>(x_IN,nrow,ncols);
          VectorXd Respons=VectorXd::Zero(nrow);
    
          Map<VectorXd>(y_OUT,nrow)=Respons.array();
          return;
        }