在Matlab的mex文件中有一个函数mxIsScalar
,告诉你mex文件的输入是否是标量。但该功能已在R2015a中引入。
如果使用以前版本的Matlab(在我的情况下是2014b,如果这很重要),检查输入是标量还是数组的最优雅方法是什么?
我是否需要合并mxGetNumberOfDimensions
,mxGetDimensions
和mxIsNumeric
来完成这项工作?或者还有其他清晰和简单方式吗?我赞成可读性而不是速度。
答案 0 :(得分:5)
除mxGetM
和mxGetN
之外,还有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文件。