【问题标题】:python exponential function - incorrect exponential valuespython指数函数 - 不正确的指数值
【发布时间】:2015-03-27 03:14:24
【问题描述】:

我有一个负值范围:-30 到 -80 比方说

array_values = [-30, -31, -32, -33, -34, -35, -36, -37, -38, -39, -40, -41, -42, -43, -44, -45, -46, -47, -48, -49, -50, -51, -52, -53, -54, -55, -56, -57, -58, -59, -60, -61, -62, -63, -64, -65, -66, -67, -68, -69, -70, -71, -72, -73, -74, -75, -76, -77, -78, -79, -80]

我正在评估这个表达式:|(-k).exp(array_values[idx]/k)|for idx in array_values

k=35

我遇到的问题是,在绘制此表达式后,我没有得到平滑的指数曲线。

所以我想我会检查exp(array_values[idx]/k) 这是我从计算器和 python 得到的一堆值(分别是 math.exp() 和 numpy.exp())

exp(-30/35): Calculator: 0.42437284567   Python:0.36787944117144233
exp(-31/35):             0.4124194827           0.36787944117144233                 
exp(-32/35):             0.40080281159          0.36787944117144233
exp(-33/35):             0.38951334871          0.36787944117144233
exp(-34/35):             0.38754187754          0.36787944117144233

是我做错了什么,还是函数中存在错误? 我的代码行是

expos = [math.exp(-i/35) for i in array_values]

【问题讨论】:

  • 将您的列表元素转换为floats。将intint 相除得到int
  • 或在脚本顶部添加from __future__ import division
  • 是的,我的大脑处于冻结状态或类似情况。这样的白痴。谢谢@igavriil

标签: python math numpy exponential


【解决方案1】:

intint 相除得到int。所以

array_values = [-30, -31, -32, -33, -34]
test = [-i/35 for i in array_values]
>>> [0, 0, 0, 0, 0]
expos = [math.exp(-i/35) for i in array_values]
>>> [1.0, 1.0, 1.0, 1.0, 1.0]

如果您将除法中的一个数字转换为float 将产生预期的结果。

test = [float(-i)/35 for i in array_values]
>>> [0.8571428571428571, 0.8857142857142857, 0.9142857142857143, 0.9428571428571428, 0.9714285714285714]

expos = [math.exp(-float(i)/35) for i in array_values]
#or expos = [math.exp(-i/35.0) for i in array_values]
>>> [2.3564184423836605, 2.4247157128777834, 2.494992477791509, 2.5673061098152665, 2.6417156445012626]

【讨论】:

    【解决方案2】:

    通过在已经为负的值前面加上减号,您将值转换为正值。您还应该将它划分为 35.0,以便它返回 float 而不是 int。这有效:

    import math
    array_values = [-30, -31, -32, -33, -34, -35, -36]
    expos = [math.exp(i/35.0) for i in array_values]
    print expos
    

    结果:

    [0.42437284567695, 0.4124194827001579, 0.40080281159210923, 0.3895133487108618, 0.37854187754140095, 0.36787944117144233, 0.35751733497916927]
    

    【讨论】:

    • 对于这个菜鸟的错误,我现在感觉自己像个大白痴!当然除以浮动!非常感谢。
    【解决方案3】:

    如您所见,0.36787944117144233 只是 e^(-1),您可以推断您正在传递小数参数的下限(因为您正在执行整数除法)。

    在基本功能中出现此类直接错误的可能性极小。

    【讨论】:

      【解决方案4】:

      你可以这样做:

      expos = [math.exp(float(-i)/35) for i in array_values]
      

      整数除法返回整数值,例如:

      >>> 1/2
      0
      

      但是一个浮点值:

      >>> 1.0/2
      0.5
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-23
        • 2017-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多