簡體   English   中英

python指數函數-錯誤的指數值

[英]python exponential function - incorrect exponential values

我有一個負值范圍:-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]

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]

您正在通過將負號放在已經為負的值前面來將值轉換為正值。 您還應該將其除以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]

正如您可以檢查的那樣, 0.36787944117144233只是e^(-1) ,並且可以推斷出您正在傳遞小數參數的下限(因為您正在執行整數除法)。

這種基本功能上的鼻孔錯誤極不可能發生。

你可以做:

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

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

>>> 1/2
0

但是一個浮點值:

>>> 1.0/2
0.5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM