什么时候数字结果不是数字?
快速回答:当结果是a时南。
内容
算术中的nan
MATLAB遵循了IEEE 754:二进制浮点运算标准从早期开始用于计算,并包括在不符合IEEE标准的机器上实现类似结果的工具和功能,例如数字设备公司的VAX计算机。此外,我们在MATLAB中选择允许除以0,而不是在可以处理此行为的机器架构上导致错误(在IEEE标准中允许)。然而,在允许除0的情况下,我们不仅遇到将非零正数和负数除0的情况(得到正和负,但我们也会遇到导致未定义的数学结果的计算,例如
inf-inf
ans = NaN
0/0
警告:除以零。ans = NaN
nan作为占位符
除了允许南作为数字运算的结果,我们还鼓励使用它们来标记诸如缺失数据之类的信息。如果我们在某些特定的时间收集一些数据,并且没有收集到其中一个值,我们可能会得到这样的数据:
Ts = 0:5;图(ts,vals,“m * - - - - - -”)
vals =列1到列5 0.2000 4.3000 -1.6000 NaN -2.000列6 1.2000
如何找到或比较NaN
根据IEEE标准,南不是一个数字,也不等于任何东西,包括它自己。所以在寻找南值在数组中,你不能做"显而易见的"
vals == NaN
Ans = 0 0 0 0 0 0 0
正如你所看到的,比较总是假。那我们怎么找呢?根据你正在做的事情,你会发现这些函数很有用:
虽然说起来或写起来都很拗口,isequalwithequalnans允许在不允许标量展开的情况下,对匹配值和形状的数组进行比较。
另一种寻找的方法南在MATLAB新闻组中经常被引用。看到这个帖子和评论保罗·博丹的作品。这里的意思是,既然
NaN == NaN
Ans = 0
总是产生一个假因此,我们可以简单地通过寻找值不等于自身的位置来找到nan。这些是nan,其他值不是。
ourNaNs =vals (vals~=vals)
ournan = NaN
nonnan =vals (vals==vals)
nonnan = 0.2000 4.3000 -1.6000 -2.000 1.2000
我的偏好是使用isnan而是因为我发现以后重新访问它时代码更具可读性。然而,在某些情况下,根据NaN值的数量(可能还有其他考虑因素),上面的构造有时会更快。这里有两个额外的链接,指向讨论更多这方面内容的新闻组线程。
南问题
一些用户发现自己遇到了冲突南对于丢失的数据vs。南由于未定义的数值运算。
- 你遇到过这样的碰撞吗?
- 您是否发现自己希望获得更多占位符值?
- 你还想用什么南或者类似的东西?
让我们听听你的想法。
与MATLAB®7.2发布
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。