2009-07-23 6 views
0

私はデータにガウスベルカーブを合わせるためにhereというアルゴリズムを使用しています。フィットアルゴリズムが自分のデータを受け入れない

私は私のデータ配列を生成する場合:

x=linspace(1.,100.,100) 
data= 17*exp(-((x-10)/3)**2) 

すべてが正常に動作します。

しかし、私は

file = open("d:\\test7.txt") 
arr=[] 
data=[] 


def column(matrix,i): 
    return [row[i] for row in matrix] 

for line in file.readlines(): 
    numbers=map(float, line.split()) 
    arr.append(numbers) 

data = column(arr,300) 
x=linspace(1.,115.,115) 

を使用してテキストファイルからデータを読み込む場合、私は、エラーメッセージが表示されます。

Traceback (most recent call last): 
File "readmatrix.py", line 60, in <module> fit(f, [mu, sigma, height], data) 
File "readmatrix.py", line 42, in fit if x is None: x = arange(y.shape[0]) 
AttributeError: 'list' object has no attribute 'shape' 

は、私の知る限り見ることができるように、データに含まれる値が正しいですか、それはのように見えます:

[0.108032, 0.86181600000000003, 1.386169, 3.2790530000000002, ... ] 

誰かが私が間違ってやっている手がかりを持っていますか?

ありがとうございます!

+3

@Dzz:ソースコードの関連部分は含まれていません。 42行目は "y.shape [0]"を使用しているためにエラーが発生し、yはシェイプ属性を持たないリストタイプです。エラーを適切に見つけるためには、より多くのソースを含める必要があります。 –

+0

申し訳ありませんが、コードにリンクして投稿のテキストを減らしたいと考えていました。 – Dzz

答えて

4

fit関数は、numpy配列(形状属性を持つ)であり、リストではない(したがってそうでない)ため、AttributeErrorを想定しています。

あなたのデータを変換します

def column(matrix,i): 
    return numpy.asarray([row[i] for row in matrix]) 
+0

ほぼ!ヒントありがとう! – Dzz

4

balphaの解決が正しくありません。解決策は単にnumpy.arrayを使用して私のリストをnumpy配列に変換することです。

私にヒントを与えてくれてありがとう!

+1

どのように正しくないのですか? (私はちょうどasarrayが動作するはずのnumpyのドキュメントを使用しました;私はnumpyがインストールされていません)何のエラーが表示されますか? – balpha

+0

これは行いますが、arr.append(numbers)コマンドはnumpy.arrayからリストを作成します。 – Dzz

+0

arr.append(numbers)は* before * column()と呼ばれますので、違いはありません。とにかく、それが動作する限り... :-) – balpha