如何使用不确定性软件包修复ZeroDivisionError?

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

我有两个unumpy数组:

A= [390.9999999999952+/-19.77371993328507
 129.99999999999932+/-11.40175425099135
 34.99999999999997+/-5.9160797830996135
 4.999999999999999+/-2.2360679774997894 0.0+/-0 0.0+/-0
 4.999999999999999+/-2.2360679774997894]
B= [33.999999999999964+/-5.830951894845297
 17.33333333333334+/-4.163331998932266
 9.666666666666666+/-3.1091263510296048
 4.999999999999999+/-2.2360679774997894 0.0+/-nan 0.0+/-nan
 4.999999999999999+/-2.2360679774997894]

我想通过以下方法传播平均误差时传播其误差:

fraction = np.where(unumpy.nominal_values(A) > 0, unumpy.std_devs(B/A), np.nan)

但是我不知道如何解决我收到的以下错误:

Traceback (most recent call last):
  File "my_code4.py", line 2076, in <module>
    fraction =            np.where(unumpy.nominal_values(A) > 0, unumpy.std_devs(B/A), np.nan)
  File "/home/username/anaconda3/lib/python3.6/site-packages/uncertainties/core.py", line 661, in f_with_affine_output
    f_nominal_value = f(*args_values, **kwargs)
ZeroDivisionError: float division by zero
python-3.x numpy divide-by-zero uncertainty
1个回答
0
投票
0当然具有物理意义。但是对于计算,计算机科学无法处理NaNInf。因此,通常我们如何通过添加一个较小的值来处理此数学错误。不会有太大影响。

通常在许多数学库中,它们按如下方式处理;

让我们说矩阵/向量A可以包含0。我将除以另一个矩阵。因此,在此之前,我们可以进行以下预处理。

import sys eps = sys.float_info.epsilon A+=eps

这将为所有元素添加一个非常小的值,例如2.220446049250313e-16。因此,通过这种方式,您的矩阵分布也将得以保留。

希望这会有所帮助。 :)

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