我想使用Numpy來適合具有絕對值的分段函數。適合使用Python的分段函數
數學函數是
X < P [1]:Y = 1個+ P [0] * ABS((大小+ X - P [1])/尺寸 - 尺寸/ 2)
X> = p [1]:Y = 1個+ p [0] * ABS((X - p [1])/尺寸 - 尺寸/ 2)
這是我的Python函數:
fitfunc = lambda p, x: \
x < p[1] and\
1 + p[0] * abs((data['n1'].size + x - p[1])/data['n1'].size - data['n1'].size/2) or\
1 + p[0] * abs((x - p[1])/data['n1'].size - data['n1'].size/2)
雖然,我得到的錯誤:
The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
但是,任何和所有評估整個列表爲單個布爾值。
更多信息:
我已經通過使用lambda表達式來數據擬合正弦波如下:
fitfunc = lambda p, x: 1 + p[0] * sin(pi * x/data['n1'].size + p[1])
errfunc = lambda p, x, y: fitfunc(p, x) - y # Distance to the target function
然後在一個循環:
data = np.genfromtxt(dataFileName, names=('n1', 'n2'))
xAxisSeries = scipy.linspace(0., data['n1'].max(), data['n1'].size)
p0 = [489., 123.] # Initial guess for the parameters
p1, success = scipy.optimize.leastsq(errfunc, p0[:], args=(xAxisSeries, data['n2']))
#time says which points from the sine wave will be plotted
time = scipy.linspace(0., data['n1'].max(), 100)
pylab.plot(time, fitfunc(p1, time), 'r-')
我試圖使用lambda函數,因爲optimize.leastsq需要一個。我正在使用完全相同的代碼,除了正在更改的fitfunc。
你什麼時候遇到這個錯誤?你如何調用這個功能?你傳遞給它什麼? – Tadeck
這裏有一個誤解。用def構造的函數對於其他函數來說是非常好的輸入。在Python中使用lambda的原因是創建匿名函數,但考慮到您命名它們,沒有必要避免def。 – dyoo