如何在引入mxIsScalar之前检查变量是否为标量或数组?

时间:2015-07-27 13:28:50

标签: c matlab mex

在Matlab的mex文件中有一个函数mxIsScalar,告诉你mex文件的输入是否是标量。但该功能已在R2015a中引入。

如果使用以前版本的Matlab(在我的情况下是2014b,如果这很重要),检查输入是标量还是数组的最优雅方法是什么?

我是否需要合并mxGetNumberOfDimensionsmxGetDimensionsmxIsNumeric来完成这项工作?或者还有其他清晰简单方式吗?我赞成可读性而不是速度。

2 个答案:

答案 0 :(得分:5)

mxGetMmxGetN之外,还有mxGetNumberOfElements,您可以这样使用:

bool const isScalar = (size_t(1) == mxGetNumberOfElements(prhs[0]));

答案 1 :(得分:4)

mrows = mxGetM(prhs[0]);
ncols = mxGetN(prhs[0]); 

if (mrows==1 && ncols==1) {
 // Scalar prhs[0] here
}

请注意,如果prhs [0]的维度多于2个,则mxGetN是维度为2 ... N的乘积的结果.mxGetM将始终返回第一个维度。这可能不是对稀疏矩阵的良好检查,因为稀疏矩阵可能不会返回矩阵中实际的元素数。

可以在http://www.mathworks.com/help/matlab/matlab_external/passing-a-scalar_btgcjh1-1.html找到完整的示例mex文件。