簡體   English   中英

如何根據函數的輸入值返回2個值中的1個

[英]How to return 1 out of 2 values depending on input values from a function

嗨,基本上我想在輸入為負時返回1值,如果輸入為正則返回另一個值。 但不能同時返回。 返回的值將用於scipy的curve_fit函數,以確定我的未知參數(a和b)。

我嘗試在函數內部使用if循環,但它給出了以下錯誤:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

這是我的代碼:

#Input fitting data
PAP_Applied_H = [-5,5,10]
PAP_Eb_fit = [30.7,31.3,31.6]

#Function Fitting
def f2(x,a,b):
    if x<0:
        y=a*((1+(x/b))**2)
    else:
        y=a*((1-(x/b))**2)
    return y

params2,extras2 = curve_fit(f2,PAP_Applied_H,PAP_Eb_fit,p0=(1,15))

#Linear Fitting
linefit2 = py.polyfit(PAP_Applied_H,PAP_Eb_fit,1)
l2 = py.poly1d(linefit2)

x_new2 = list(range(-50000,1000,1))
x_line2 = list(range(-3000,3000,1))
y_func2 = f2(x_new2,params2[0],params2[1])
y_line2 = l2(x_line2)

那么我應該如何更改函數'f2'以便它返回我想要的值? 任何幫助,將不勝感激。 提前致謝。

怎么樣:

def f(x,a,b):返回a *(1 - 2 * abs(x)/ b +(x / b)** 2)

我知道,這是一種解決方法,並沒有解決一般的問題。

您的輸入x是一個列表。 您無法檢查整個列表的正值或負值。 你必須逐個檢查每個元素。 嘗試這個:

def f2(x,a,b):
    y=[]
    for i in range(len(x)):
        if x[i]<0:
            y.append(a*((1+(x[i]/b))**2))
        else:
            y.append(a*((1-(x[i]/b))**2))
    return y

這里返回值y也是值列表。

暫無
暫無

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

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