【问题标题】:Normalizing a random unending unknown series?标准化一个随机的无休止的未知系列?
【发布时间】:2014-02-12 03:15:45
【问题描述】:

我有一个没有方程式的无休止序列,并且是随机的,像这样,

   X = 1, 456, 555, 556, 557, 789 ... 

请注意,我将此列表作为流获取,我不知道未来的值,也不知道 X 的最小值和最大值。

如何找出任何x in X 的倒置法线N(X),这样,

N(x) --> 0 如果x --> inf

N(x) --> 1 如果x --> 0

请阅读,x 越大,它应该越接近0x 越小,它应该越接近1

我怎样才能实现这样的转变?

我尝试了以下方法:

#python
def invnorm(x):
    denom = 1 + math.exp(-x)
    return 2 - (2/denom)

invnorm(200)
Out[8]: 0.0

invnorm(20)
Out[9]: 4.1223073843355e-09

invnorm(2)
Out[10]: 0.23840584404423537

invnorm(1)
Out[11]: 0.5378828427399902

不知何故,随着我的范围越来越大,这并没有给出令人满意的结果,而200 本身给出了0,我的范围将向0 倾斜。

【问题讨论】:

  • 输入是否保证为正整数?
  • 一个非常有趣的问题,我很遗憾我现在没有时间思考它。如果你在这里没有得到满意的答案,也许可以试试math.stackexchange.com,因为这是一个数学问题,可能比计算恕我直言。祝你好运。
  • 您的问题未充分说明N(x)=(x>0)?1:0 满足您的要求,据我所知。
  • 原始函数的问题是e^{-x} 下降得非常快,所以当你到达x=200 时,它基本上为零。公认的解决方案是通过找到减少更慢的东西来解决这个问题。

标签: python algorithm math normalization


【解决方案1】:

好的,所以你基本上是在寻找一个连续的单调函数 N: [0,∞) → (0,1] 这样:

  • limx → 0N(x) = 1,且
  • limx → ∞N(x) = 0.

在这种情况下,“显而易见”的选择是 N(x) = 1 / (x + 1),或者在 Python 中:

def invnorm (x):
    return 1.0 / (x + 1)

当然,满足这些条件的函数还有无穷多个,例如 N(x) = 1 / (x + 1)a对于任何正实数a

另一个“自然”选择是N(x) = ex,或者在 Python 中:

def invnorm (x):
    return math.exp(-x)

这也可以重新调整为 N(x) = b-x sup> 对于任何实数 b > 1,同时仍然满足您的要求。

当然,如果我们放宽单调性要求(我只是假设,即使你没有明确说明),甚至像 Abhishek Bansal 的 N(x) = sin(x) / x 这样更奇怪的函数也符合条件。

【讨论】:

  • 我在想 sin(x) / x 但这打败了我。
【解决方案2】:

1 - X / M,其中M 是预期的最大值(对于整数X,可能是4294967295.)。

【讨论】:

  • 实际上,您没有提供足够的细节来提供合理的答案。
猜你喜欢
  • 1970-01-01
  • 2015-04-23
  • 2011-12-29
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
相关资源
最近更新 更多