使用MATLAB中的“==”和“find”得出的结果不同

3
我使用MEX创建了一个稀疏矩阵,也使用MATLAB创建了一个稀疏矩阵。为了填充矩阵的值,我使用了相同的公式。 现在要检查这两个矩阵是否相等,我使用了result=(A==B)。结果对于所有的索引返回1,这意味着所有矩阵元素都相等。 但是,如果我执行find(A-B),它会返回一些索引,这表明在这些索引处的值是非零的。这怎么可能呢?
注意:当我比较这些索引处的值时,它显示相等!

1
A-B的结果是什么?如果它非常小,那么不等式可能是由于有限的数值精度导致的结果。 - WebMonster
2
展示一个键值对相等但 A-B 不为零的例子。 - Chris A.
1个回答

6
我猜测你的矩阵在相同的位置出现了无穷大的值。例如:
>> A = Inf;
>> B = Inf;
>> A == B

ans =

     1  %# They are treated as equal...

>> A-B

ans =

   NaN  %# ...but their difference actually results in NaN...

>> find(A-B)

ans =

     1  %# ...which is treated as a non-zero value.

这里的差异是由于涉及无穷大的某些操作导致产生 NaN 值。你可以使用函数 ISINF 检查 AB 中是否存在无穷大。请参考以下示例:
any(isinf(A(:)))
any(isinf(B(:)))

如果你得到了一个值为1(也就是真),那么无穷大的存在很可能是导致你的差异的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接