我正試圖創建一個回圈,在離散值上評估一個函式。通常情況下,這是好的,但是,這被證明是困難的,因為我的函式是有條件的(它有一個附加的分片函式,取決于主變數)。下面是我做的一個嘗試;
import math
import numpy as np
for i in np.range(4000,8000, 1000) 。
def f(λ,a,u,o1,o2)。
o = o1 if (λ <= u) else o2
return a*math.exp((λ-u)^2/(-2*o^2)
print(f(i,1.056,5998,379,310)
我希望代碼能在i=4000時評估該函式,然后i=5000等。我得到的輸出結果如下。 TypeError: ufunc 'bitwise_xor' 不支持輸入型別,而且根據鑄造規則''safe'
,輸入不能被安全地強制到任何支持的型別。我似乎找不到任何實作這樣的條件函式的具體例子。我還做了一個沒有回圈的嘗試,但我遇到了數值錯誤,我認為我在評估陣列,就好像它們是一個變數。
我希望以后能對該函式進行整合并繪制其總和。我是否會在涉及回圈的情況下遇到任何問題?
uj5u.com熱心網友回復:
Python使用**進行指數化。^是bitwise xor.
uj5u.com熱心網友回復:
假設你的函式除了冪運算子**之外是正確的,那么用numpy實作的可能性是這樣的
# import math # does not work well with numpy。
import numpy as np
def f(l、a、u、o1、o2) 。 # 將'λ'改為'l'(這樣更容易輸入)。
o = np.where(l <= u, o1, o2) # 矢量化分片定義。
return a*np.exp((l-u)**2/(-2*o*2) # 將'^'改為'**'運算子,使用np.exp。
x = np.range(4000,8000, 1000) # 定義數值范圍。
print(f(x,1.056,5998,379,310) # 用整個范圍呼叫你的函式一次。
輸出
[9.74560013e-07 3. 29586202e-02 1.05597802e 00 5.68878883e-03]
為了重復使用你的函式,你可以把它變成一個引數化的版本
import numpy as np
def f(a,u,o1,o2)。
return lambda x: a*np. exp((x-u)**2/(-2*np.where(x <= u, o1, o2) **2)
x = np.arange(4000,8000, 1000)
f_p = f(1.056,5998, 379, 310) #引數化你的函式。
print(f_p(x)) # 用你的值范圍呼叫引數化的函式。
輸出
[9.74560013e-07 3. 29586202e-02 1.05597802e 00 5.68878883e-03]
uj5u.com熱心網友回復:
import math
import numpy as np
def f(λ,a,u,o1,o2)。
o = o1 if (λ <= u) else o2
return a*math.exp((λ-u)^2/(-2*o^2)
for i in np.range(4000,8000,1000) 。
print(f(i,1.056,5998, 379, 310)
試試這個代碼。這將作業
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/319967.html
標籤:
下一篇:尋找字母數字代碼的公式
