Numpy的array_equal和float完全相等检查

问题描述 投票:1回答:1

我知道类似的精度问题在这里也有人问过,但是我正在阅读一个项目的代码,这个项目是在浮点之间做一个精确的平等比较,这让我很困惑。

假设 x1x2 属于 numpy.ndarray 和d型 np.float32. 这两个变量是通过对相同数据执行相同的代码计算出来的,但是 x1 已由一台机器计算出来,并且 x2 (这是在与MPI通信的AWS集群上完成的)。

然后将这些值进行比较,具体如下

numpy.array_equal(x1, x2)

因此,完全平等(无容差)是这个程序工作的关键,而且似乎工作得很好。这让我很困惑。如何比较两个 np.float32 在不同的机器上计算,并且不面临精度问题?什么时候这两个(或多个)浮点数可以相等?

python numpy floating-point precision equality
1个回答
1
投票

IEEE-754规定的算术是确定性的,给定了其第11条(2008年版)中讨论的某些约束条件,包括合适的表达式评估规则(如从编程语言中的表达式毫不含糊地翻译成IEEE-754操作,如 a+b+c 要给 (a+b)+c,不 a+(b+c)).

如果不使用并行性或者并行性的构造是合适的,比如总是将一个作业分割成相同的片段,并以相同的方式组合它们的结果,而不管计算完成的顺序如何,那么获得相同的结果就不足为奇了。

妨碍可重复性的一些因素包括:不同的并行性、使用不同的数学库(对诸如 "DSP "等函数的实现不同)。pow),以及使用对浮点运算不严格的语言(比如允许但不要求额外的精度)。

© www.soinside.com 2019 - 2024. All rights reserved.