【问题标题】:Python - Avoiding zero division errors when taking the log of very small values (several hundred decimals)Python - 在记录非常小的值(几百个小数)时避免零除错误
【发布时间】:2016-10-28 12:40:36
【问题描述】:

我正在使用非常小的 p 值(几百位小数),并且我正在尝试检测列表中最小的一个。似乎 Python 将它们中的许多检测为零,所以我在登录时收到零除法错误。

为了避免这种情况,我写了这段代码:

smallest_val = min(np.array(p_value)[np.array(p_value) > 0])
for i in range(len(p_value)):
  if p_value[i] == 0: 
    p_value[i] = smallest_val

p_value_log = []
for i in p_value:
  b = log(i)
  p_value_log.append(b)

当然,这并不能解决我的问题,因为几个小的 p 值等于 minimum_val 并且我无法识别最小的。关于解决此问题的最佳方法的任何想法?

【问题讨论】:

  • 你不能捕捉到异常并在它发生时提供一个准无限值吗?
  • 我可以捕捉到异常,但如何提供准无限值?抱歉,如果这听起来像是一个基本问题,我是 Python 新手

标签: python zero divide-by-zero


【解决方案1】:

不要将 0 替换为 smallest_val,而是将它们替换为 smallest_val/2 或介于 smallest_val 和 0 之间的其他内容,以便您仍然可以识别您的替换。

【讨论】:

  • 问题是 minimum_val 已经处于 Python 接受的非零值的极限,所以如果我将它除以 2,python 仍然认为该值为零
  • 你怎么知道的?您的代码正在寻找数组中最小的非 0 值,而不是(必然)可能的最小非 0。
  • 因为当我对另一个与我比较它的数据集差异较小的数据集使用相同的代码时,我设法绘制了所有 p 值,而最小的 p 值已经有几百小数
  • 那么为什么多一个小数(除以 2 不一定会产生)一定会超过这个限制?
猜你喜欢
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
相关资源
最近更新 更多