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

How to check if variable is Scalar or Array before mxIsScalar was introduced?

在 Matlab 的 mex 文件中,有一个函数 mxIsScalar 可以告诉您 mex 文件的输入是否为标量。不过这个功能在R2015a已经引入了

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

我需要结合使用 mxGetNumberOfDimensionsmxGetDimensionsmxIsNumeric 吗?或者还有其他 clearsimple 的方法吗?我更喜欢可读性而不是速度。

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

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

请注意,如果 prhs[0] 有超过 2 个维度,比如 N,则 mxGetN 是维度 2 ... N 的乘积的结果。mxGetM 将始终 return 第一个维度。对于稀疏矩阵,这可能不是一个很好的检查,因为这些可能不是 return 矩阵中元素的实际数量。

可以在 http://www.mathworks.com/help/matlab/matlab_external/passing-a-scalar_btgcjh1-1.html.

找到完整的示例 mex 文件

除了 mxGetMmxGetN,还有 mxGetNumberOfElements,您可以这样使用:

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