【问题标题】:Matlab Comparison Tool NaN valuesMatlab 比较工具 NaN 值
【发布时间】:2014-01-12 18:20:22
【问题描述】:

我正在尝试使用 Matlab 比较工具比较两个 .mat 文件。在比较结果中,NaN 值突出显示,表示它们不同(即使它们不是)。使用 Matlab 比较工具时如何处理 NaN 值。

【问题讨论】:

  • 如果您只想知道两个 mat 文件的内容是否相等,a=load('file1.mat'); b=load(file2.mat); bothAreSame = isequaln(a,b) 可以解决问题。

标签: matlab matrix comparison mat-file


【解决方案1】:

NaN 根据定义是“不是数字”。引用documentation

由于数学上未定义的运算(如 0.0/0.0 和 inf-inf)而获得 NaN。

因此,从数学上讲,甚至没有定义 NaN 之间的相等性。例如;尝试计算 0/0 会得到 NaN,0/0+1 也是如此。你会说 0/0 和 0/0+1 相等吗?你会说他们不一样吗?两者都不存在:0/0 和 0/0+1 根本不存在。

另一方面,NaN 是一个明确定义的“值”,NaN 之间的相等性也是如此:即,NaN 始终不等于 NaN。这种行为的基本原理可能是数学上的 NaN 是未定义的,因此它不能等于自身。

【讨论】:

  • 抱歉吹毛求疵,但在 NaN 之间定义了相等 :定义是 NaN 不等于 NaN。表达式nan == nan 有一个完美定义的值,即false
  • @SamRoberts 你是对的。在 Matlab 中,它定义的,尽管在数学上它是未定义的,因为它适用的对象是不存在的。我已经更新了我的答案
  • 对不起,我又要吹毛求疵了,我忍不住了。定义的不是 MATLAB(或 MathWorks),而是浮点运算的 IEEE 标准。由于本文档由数学家撰写并且是他们之间的共识,因此 NaN 之间的相等性是数学上定义的。
【解决方案2】:

试试isnan

   label = false(size(data)); 
   different =  true;
   label(isnan(data)) = different

你也可以使用eq:

b=[1 2;nan 4];
 a=[1 2;nan 4];
 eq(a,b)

 >>  1     1
     0     1

【讨论】:

  • 这意味着我必须识别受影响的数据并标记它们。我认为使用 Matlab 比较工具会有更简单的方法。
猜你喜欢
  • 2015-09-26
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 2013-10-19
  • 1970-01-01
  • 2018-07-05
  • 2019-02-25
  • 2016-10-19
相关资源
最近更新 更多