我有一系列负值:-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]
答案 0 :(得分:2)
将int
与int
分开会产生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]
答案 1 :(得分:1)
您通过在已经为负值的前面加上减号将您的值转换为正值。您还应将其除以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]
答案 2 :(得分:1)
正如您可以检查的那样,0.36787944117144233
只是e^(-1)
,您可以推断出您正在通过小数参数的底线(因为您正在执行整数除法)。
基本功能中出现这种类型的错误是非常不可能的。
答案 3 :(得分:0)
你可以这样做:
expos = [math.exp(float(-i)/35) for i in array_values]
整数除法返回整数值,例如:
>>> 1/2
0
但浮动值:
>>> 1.0/2
0.5