如何在引入 mxIsScalar 之前检查变量是标量还是数组?
How to check if variable is Scalar or Array before mxIsScalar was introduced?
在 Matlab 的 mex 文件中,有一个函数 mxIsScalar
可以告诉您 mex 文件的输入是否为标量。不过这个功能在R2015a已经引入了
如果使用以前版本的 Matlab(在我的例子中是 2014b,如果这很重要),检查输入是标量还是数组的最优雅的方法是什么?
我需要结合使用 mxGetNumberOfDimensions
、mxGetDimensions
和 mxIsNumeric
吗?或者还有其他 clear 和 simple 的方法吗?我更喜欢可读性而不是速度。
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 文件
除了 mxGetM
和 mxGetN
,还有 mxGetNumberOfElements
,您可以这样使用:
bool const isScalar = (size_t(1) == mxGetNumberOfElements(prhs[0]));
在 Matlab 的 mex 文件中,有一个函数 mxIsScalar
可以告诉您 mex 文件的输入是否为标量。不过这个功能在R2015a已经引入了
如果使用以前版本的 Matlab(在我的例子中是 2014b,如果这很重要),检查输入是标量还是数组的最优雅的方法是什么?
我需要结合使用 mxGetNumberOfDimensions
、mxGetDimensions
和 mxIsNumeric
吗?或者还有其他 clear 和 simple 的方法吗?我更喜欢可读性而不是速度。
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 文件除了 mxGetM
和 mxGetN
,还有 mxGetNumberOfElements
,您可以这样使用:
bool const isScalar = (size_t(1) == mxGetNumberOfElements(prhs[0]));