在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;
}