【问题标题】:How to handle functions with division by zero如何处理除以零的函数
【发布时间】:2014-11-28 13:58:39
【问题描述】:

我正在尝试使用以下形式的 python / numpy 使用一些模型:

 f(x) = 1 / (exp(x) - 1)

其中 x 可以是 -5 到 +5 之间的任何值。

x 可以为零,在我的模拟过程中确实会发生这种情况,导致 f(x) 趋于无穷大,这会返回 nan + 1jnan。

因为我想稍后使用此计算的结果,例如对于 FFT,这会产生一个主要问题,因为 fft 例程无法处理输入中的 NAN。

请问有什么推荐的方法来解决这个问题吗? 例如把逻辑说成:如果 x == 0:返回 0 要么 例如如果 x 等于 0,则将 x 移动 0.00000001%,以避免这个问题。

谢谢

【问题讨论】:

  • 也许这有用? github.com/kvesteri/infinity
  • np.nan_to_num 很有用,谢谢,但我想将 inf 设置为 0 而不是任意高数。不过我可以手动完成。

标签: python numpy divide-by-zero


【解决方案1】:

你可以通过使用 continue 语句来避免这个问题:

def f(x):
    return 1 / (exp(x) - 1)

f_values = {}
for i in range(-5,5):
    if i == 0: continue
    f_values[i] = f(i)

print f_values
>>> {1: 0.5819767068693265, 2: 0.15651764274966565, 3: 0.05239569649125595, 4: 0.01865736036377405, -2: -1.1565176427496657, -5: -1.0067836549063043, -4: -1.018657360363774, -3: -1.052395696491256, -1: -1.5819767068693265}


FFT(f_values)

这里,只要出现 x = 0 的值,循环就会简单地避开 f(x) 函数并迭代到下一个值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    相关资源
    最近更新 更多