相当于isnumeric(X)& 〜isnan(X)?

时间:2013-06-11 19:38:34

标签: matlab

我发现自己写的东西很多:

if isnumeric(X) & ~isnan(X)
   % etc etc
end

在我用自己的测试混淆命名空间之前

function out = isanumber(X)
    out = isnumeric(X) & ~isnan(X);
end

MATLAB是否已经进行了等效测试?

2 个答案:

答案 0 :(得分:3)

不,没有。

NaN是一个数字类(默认情况下为double,符合IEEE754),这使isnumeric在传递true时评估为NaN。我会马上承认看似琐碎的

isnumeric ( not a number )

实际上赋予 true 有点违反直觉,但是当你从文件中读取大量数据时它非常有意义,并且因此读取的矩阵的一些元素是{{ 1}}(缺失,错误或类似) - 在这种情况下,如果NaN会说isnumeric(NaN),那么会非常烦人

和往常一样,这一切都取决于你如何看待它。 MathWorks决定(很可能经过大量研究)认为返回false有意义的情况要远远多于相反的情况。因此,您必须始终手动测试两种我害怕的情况。

顺便说一句,如果你只是把它作为一个子函数或嵌套函数,你就不会那么混乱:

true

答案 1 :(得分:2)

您很可能需要isfinite(X)

不可否认,它与isnumeric(X) & ~isnan(X)不完全相同,相当于isnumeric(X) & ~isnan(X) & ~isinf(X),但我猜你不想要其他特殊情况(加上和减去无穷大)。