我对 mxGetPr 做错了什么
What did I do wrong with mxGetPr
请在 mexFunction
中考虑这段代码摘录
\cppfunc.cpp
void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]){
\...Parts where I check the number of lhs and rhs
double* upper = mxGetPr(prhs[0]);
double* lower = mxGetPr(prhs[1]);
double* grids = mxGetPr(prhs[2]);
mexPrintf("upper 1=%d \n\n", upper[0] );
}
我打算这样调用我的 mex 函数 cppfunc([1 2 3], [1 2 3], [1 2 3])
。基本上,它接受三个 MATLAB
向量并通过 mexPrintf
打印出第一个输入向量的第一个元素。输出应该是 1
。但是,它 returns:
upper 1=3
.
在我看来,该函数是 return 第一个输入向量的长度。例如,如果我做 cppfunc([1 2 3 4], [1 2 3], [1 2 3])
,它会 return upper 1=4
.
我认为我在调用 mexPrintf
时使用 %d
是正确的,因为 mxGetPr
将输入转换为双精度数组。我错过了什么?
格式 %d
适用于 int
类型的整数值。您必须使用 %f
double
秒。
参见 documentation of printf。
请在 mexFunction
\cppfunc.cpp
void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]){
\...Parts where I check the number of lhs and rhs
double* upper = mxGetPr(prhs[0]);
double* lower = mxGetPr(prhs[1]);
double* grids = mxGetPr(prhs[2]);
mexPrintf("upper 1=%d \n\n", upper[0] );
}
我打算这样调用我的 mex 函数 cppfunc([1 2 3], [1 2 3], [1 2 3])
。基本上,它接受三个 MATLAB
向量并通过 mexPrintf
打印出第一个输入向量的第一个元素。输出应该是 1
。但是,它 returns:
upper 1=3
.
在我看来,该函数是 return 第一个输入向量的长度。例如,如果我做 cppfunc([1 2 3 4], [1 2 3], [1 2 3])
,它会 return upper 1=4
.
我认为我在调用 mexPrintf
时使用 %d
是正确的,因为 mxGetPr
将输入转换为双精度数组。我错过了什么?
格式 %d
适用于 int
类型的整数值。您必须使用 %f
double
秒。
参见 documentation of printf。