断言数组几乎等于零
Assert array almost equal zero
我正在为我的模拟编写单元测试,并想检查特定参数的结果(numpy 数组)是否为零。由于计算不准确,也接受较小的值 (1e-7)。断言此数组在所有位置都接近 0 的最佳方法是什么?
np.testing.assert_array_almost_equal(a, np.zeros(a.shape))
和 assert_allclose
失败,因为相对容差为 inf
(如果切换参数则为 1)Docu
- 我觉得
np.testing.assert_array_almost_equal_nulp(a, np.zeros(a.shape))
不够精确,因为它将差异与间距进行比较,因此对于 nulps >= 1
始终为真,否则为假,但没有说明 [= 的幅度15=]Docu
- 基于this question使用
np.testing.assert_(np.all(np.absolute(a) < 1e-7))
没有给出任何详细的输出,我已经习惯了其他np.testing
方法
还有其他方法可以测试吗?也许另一个测试包?
如果比较全为零的 numpy 数组,可以使用绝对容差,因为相对容差在这里没有意义:
from numpy.testing import assert_allclose
def test_zero_array():
a = np.array([0, 1e-07, 1e-08])
assert_allclose(a, 0, atol=1e-07)
rtol
值在这种情况下无关紧要,因为如果计算公差,它会乘以 0:
atol + rtol * abs(desired)
更新:用更简单的标量 0 替换了 np.zeros_like(a)
。正如@hintze 所指出的,np 数组比较也适用于标量。
我正在为我的模拟编写单元测试,并想检查特定参数的结果(numpy 数组)是否为零。由于计算不准确,也接受较小的值 (1e-7)。断言此数组在所有位置都接近 0 的最佳方法是什么?
np.testing.assert_array_almost_equal(a, np.zeros(a.shape))
和assert_allclose
失败,因为相对容差为inf
(如果切换参数则为 1)Docu- 我觉得
np.testing.assert_array_almost_equal_nulp(a, np.zeros(a.shape))
不够精确,因为它将差异与间距进行比较,因此对于nulps >= 1
始终为真,否则为假,但没有说明 [= 的幅度15=]Docu - 基于this question使用
np.testing.assert_(np.all(np.absolute(a) < 1e-7))
没有给出任何详细的输出,我已经习惯了其他np.testing
方法
还有其他方法可以测试吗?也许另一个测试包?
如果比较全为零的 numpy 数组,可以使用绝对容差,因为相对容差在这里没有意义:
from numpy.testing import assert_allclose
def test_zero_array():
a = np.array([0, 1e-07, 1e-08])
assert_allclose(a, 0, atol=1e-07)
rtol
值在这种情况下无关紧要,因为如果计算公差,它会乘以 0:
atol + rtol * abs(desired)
更新:用更简单的标量 0 替换了 np.zeros_like(a)
。正如@hintze 所指出的,np 数组比较也适用于标量。