簡體   English   中英

scipy.optimze curve_fit返回錯誤的值

[英]scipy.optimze curve_fit return wrong value

我試圖用scipy來適應一個特定的功能,我得到了奇怪的結果。 我決定測試一些我知道答案的東西,所以我創建了這個:

from scipy.optimize import curve_fit as cf
import numpy as np
import random

def func(x,a):
    return a+X

X =[]
for i in range (10):
    V = random.random()
    X.append(i+3 + V/10)

print cf(func, np.array(range(10)),np.array(X))

我預計會得到3左右的東西,不過,這里輸出:

(array([ -2.18158824e-12]), inf)

作為旁注,我試着看看我發送了什么東西到func ,我得到了這個:

print func(np.array(range(10)),3)

Traceback (most recent call last):
  File "/tmp/py1759O-P", line 16, in <module>
    print func(np.array(range(10)),3)
  File "/tmp/py1759O-P", line 6, in func
    return a+X
TypeError: unsupported operand type(s) for +: 'int' and 'list

我究竟做錯了什么?

當它們具有不同的含義時,不要使用xX作為變量名(或者你可能不知道Python是區分大小寫的?):

def func(x,a):
    return a+X

X =[]

x是一個numpy數組, X是一個列表, a是一個標量參數值。

a+X導致錯誤,因為您無法將標量添加到列表中。

在func中,參數是x ,但是X在函數體中使用。

這是您的代碼的修改版本。 它使用numpy的更多功能(例如np.random.random()而不是random.random())。

from scipy.optimize import curve_fit as cf
import numpy as np


def func(x, a):
    return a + x


n = 10
xdata = np.arange(n)
ydata = func(xdata, 3) + np.random.random(n) / 10

print cf(func, xdata, ydata)

輸出是

(array([ 3.04734293]), array([[  8.19208558e-05]]))

暫無
暫無

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

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