如何在mex中获取结构内矩阵的大小
How to get sizes of a matrix inside a struct in mex
我有一个 mex 程序,它接受多个输入并检查它们的大小是否合适。
其中一个输入是内部包含多个标量和矩阵的结构。我的问题是,其中一个字段可以是 3x1 或 3xN 矩阵。每当它是 3xN 时,我都会得到 weird/wrong 结果。
让我们看 3 个例子:
第三个输入是一个矩阵。如果我这样做:
mrows = mxGetM(prhs[2]);
ncols = mxGetN(prhs[2]);
mexPrintf("%d x %d \n", (int)mrows,(int)ncols);
打印:
>> 1 x 360
不错。
然后,结构。
for(int ifield=0; ifield<nfields; ifield++) {
tmp=mxGetField(prhs[1],0,fieldnames[ifield]); //fieldnames has the names they shoudl have
// check if that fieldname exists in the struct
if(tmp==NULL){
mexPrintf("%s number: %d %s \n", "FIELD",ifield+1, fieldnames[ifield]);
mexErrMsgIdAndTxt( "CBCT:MEX:Atb:InvalidInput",
"Above field is missing. Check spelling. ");
}
switch(ifield){ //for each field checnk if it is how it shoudl be
// some other things that work
case 8:
mrows = mxGetM(tmp);
ncols = mxGetN(tmp);
mexPrintf("%d x %d \n", (int)mrows,(int)ncols);
//check if they are what the should be
break;
case 9:
mrows = mxGetM(tmp);
ncols = mxGetN(tmp);
mexPrintf("%d x %d \n", (int)mrows,(int)ncols);
//check if they are what the should be
break;
}
}
因此结构中的第 8 个字段是 str.field8=[0;0;0];
,第 9 个字段是 str.field9=[zeros(1,360);zeros(1,360)]
。但是这段代码打印:
>> 3 x 1
>> -96713592 x 2
这里发生了什么?我应该使用其他函数来获取结构内矩阵的大小吗?我在 tmp
变量中获取的数据有误吗?
我很困惑,因为如果 prhs[2]
是一个矩阵,它会打印正确的大小,所以 mxGetM()
和 mxGetN()
似乎符合我的要求。
我有一个 mex 程序,它接受多个输入并检查它们的大小是否合适。
其中一个输入是内部包含多个标量和矩阵的结构。我的问题是,其中一个字段可以是 3x1 或 3xN 矩阵。每当它是 3xN 时,我都会得到 weird/wrong 结果。
让我们看 3 个例子:
第三个输入是一个矩阵。如果我这样做:
mrows = mxGetM(prhs[2]);
ncols = mxGetN(prhs[2]);
mexPrintf("%d x %d \n", (int)mrows,(int)ncols);
打印:
>> 1 x 360
不错。
然后,结构。
for(int ifield=0; ifield<nfields; ifield++) {
tmp=mxGetField(prhs[1],0,fieldnames[ifield]); //fieldnames has the names they shoudl have
// check if that fieldname exists in the struct
if(tmp==NULL){
mexPrintf("%s number: %d %s \n", "FIELD",ifield+1, fieldnames[ifield]);
mexErrMsgIdAndTxt( "CBCT:MEX:Atb:InvalidInput",
"Above field is missing. Check spelling. ");
}
switch(ifield){ //for each field checnk if it is how it shoudl be
// some other things that work
case 8:
mrows = mxGetM(tmp);
ncols = mxGetN(tmp);
mexPrintf("%d x %d \n", (int)mrows,(int)ncols);
//check if they are what the should be
break;
case 9:
mrows = mxGetM(tmp);
ncols = mxGetN(tmp);
mexPrintf("%d x %d \n", (int)mrows,(int)ncols);
//check if they are what the should be
break;
}
}
因此结构中的第 8 个字段是 str.field8=[0;0;0];
,第 9 个字段是 str.field9=[zeros(1,360);zeros(1,360)]
。但是这段代码打印:
>> 3 x 1
>> -96713592 x 2
这里发生了什么?我应该使用其他函数来获取结构内矩阵的大小吗?我在 tmp
变量中获取的数据有误吗?
我很困惑,因为如果 prhs[2]
是一个矩阵,它会打印正确的大小,所以 mxGetM()
和 mxGetN()
似乎符合我的要求。