我有120,000 X 120,000个numpy数组,其格式为:
STEP1: NUMERATOR =
[[8.85191777e-12 0.00000000e+00 6.62258993e-12 ... 0.00000000e+00
0.00000000e+00 0.00000000e+00]
:
[0.00000000e+00 1.22870643e-11 0.00000000e+00 ... 0.00000000e+00
0.00000000e+00 0.00000000e+00]]
我有另一个(120,000,) numpy数组,叫做DENOMINATOR。
STEP2 DENOMINATOR =
[8.85191777e-12 0.00000000e+00 6.62258993e-12 ... 0.00000000e+00
0.00000000e+00 0.00000000e+00]
To avoid a "divide by zero" error, I updated DENOMINATOR array as
DENOMINATOR = DENOMINATOR + 0.00000000000001
现在我们找到一个NEW_DENOMINATOR,如下所示:
STEP3:
NEW_DENOMINATOR = np.multiply.outer(DENOMINATOR, DENOMINATOR)
which results in a 120,000 X 120,000 matrix as follows:
[[1.78266171e-13 5.62788054e-13 5.75945750e-13 ... 6.33114532e-18
2.82924941e-18 4.22215788e-21]
:
[5.62788054e-13 1.77672741e-12 1.81826639e-12 ... 1.99874880e-17
8.93196817e-18 1.33293939e-20]]
我想要执行的计算是: np.log2(NUMERATOR/NEW_DENOMINATOR),但是我仍然收到以下错误:
RuntimeWarning: divide by zero encountered in log2
output=np.log2(NUMERATOR/NEW_DENOMINATOR)
and the output looks like:
[[5.63388519 -inf 3.5233907 ... -inf -inf -inf]
[ -inf 2.78984599 -inf ... -inf -inf -inf]
:
[5.63388519 -inf 3.5233907 ... -inf -inf -inf]
[ -inf 2.78984599 -inf ... -inf -inf -inf]
]
python显示此警告的是什么?结果包含inf,这意味着执行了除以0。为什么即使分母不包含0,也会发生这种情况?
发布于 2021-03-28 18:34:16
“被零除”的警告有点令人困惑,因为在NUMERATOR/NEW_DENOMINATOR
中(很有可能)没有被零除。相反,您正在尝试计算零值的log2
。在内部,numpy
很可能会根据log2
的输入执行除法运算,并给出此警告。
请记住,没有定义零的对数;从正侧逼近零的对数的极限是−∞。如果仔细查看输出,您会发现这也是存储在输出中的值,而不是正无穷大。如下图所示,log2(x)
作为x
的函数(source: Wikipedia
https://stackoverflow.com/questions/66844763
复制相似问题