Numpy sum 和 for 循环加法提供不同的值[重复]

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

我注意到,对于完全随机数的数组,使用 np.sum 与使用 for 循环迭代添加值似乎会产生不同的值。我提供了下面的代码。

我想假设存在一些与浮点数相关的错误,但我不明白为什么会出现这种情况/我尝试过的一件事是截断/舍入到有限数量的小数位,但是这个似乎也引发了类似的问题。

Python 3.9.12 numpy 1.21.5 Windows 10 专业版

提前致谢。

import numpy as np

np.random.seed(1)
x = np.round( np.random.uniform(0, 1, 100), 3)

y = np.sum(x.copy())
z = 0.0
for xi in x.copy():
    z += xi

print("y", y)       # With seed=1, y=48.585
print("z", z)       # With seed=1, z=48.585000000000015
print(y-z)

我尝试过截断/舍入到有限的小数位。

python numpy
1个回答
0
投票

不幸的是,这只是浮点运算的现实。

但是,有一种方法可以测试(几乎)相等性,前提是对许多库中这些波动的绝对和/或相对容忍度:

numpy.isclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)

numpy.testing.assert_almost_equal(actual, desired, decimal=7, err_msg='', verbose=True)
© www.soinside.com 2019 - 2024. All rights reserved.