2015-10-15 11 views
0

因爲我在編碼方面很新,所以非常感謝幫助。我有一個單獨的文件,我導入和使用此代碼提取數據,一組在15x55矩陣的數據:因爲我已經在其他代碼中使用它當試圖在python中將數據擬合成指數曲線時,我得到一組奇怪的錯誤

ScanNum = [] 

#Import the data 
data = loadtxt('FNScan40.txt') 

#Define columns 
ccd1= data[:,14] 
t= data[:,0] 

我相信對代碼的這一部分,有這樣的工作。然後我定義了我想要適合數據的函數。

def Kinetics(tk,A,B): 
f=A*(1.0-math.e**(-B*tk)) 
return f 

其中A和B是未知係數。 然後,我將x和y數據放到數組中。

x = array([t]) 
y = array([ccd1]) 

直到這裏,我非常肯定,一切都是正確的,這是當我真正嘗試執行曲線擬合,我有麻煩。這是我的代碼的其餘部分:

popt, pcov = curve_fit(Kinetics, x, y, p0=None) 

print popt, pcov 

plt.figure() 
plt.plot(x, kinetics(x, *popt), label="Fitted Curve") 
plt.show() 

當我執行的代碼我得到的錯誤消息:不正確的輸入:N = 2必須不超過M = 1。我知道N是數據點的數量,而M是初始參數的數量。我不知道如何解決這個問題。我發現嘗試的唯一辦法是設置我自己的初始參數,所以在上面的代碼中,我定義了p0 = [1,1](因爲我有兩個參數,我試圖猜測,A和B)。同樣的錯誤(錯誤的輸入:N = 2不能超過M = 1),所以我試着改變我輸入了多少個'1'。如果我超過了兩個,我只是得到一個錯誤,說我試圖輸入太多的參數進入動力學,這是有道理的。

我試過了所有我能想到的/在互聯網上無法找到的東西。如果M是初始參數,爲什麼不改變p0中'1的數量改變錯誤報告爲M?我能做些什麼來解決這個問題?

回答

0

我遇到的問題是在數組中。我決定看看實際的陣列,看看他們是否是這個問題。當我在't'和'ccd1'周圍包括括號時,它將數組的長度設置爲1。拿出括號解決了這個問題。在代碼中還有其他不相關的問題應該很容易解決。