9

私が書いた非常に単純なコードでいくつかの問題が発生しています。4セットのデータがあり、numpypolyfitを使用して多項式の最適な線を生成したいと思います。リストの3つは、polyfitを使用すると数値を生成しますが、3番目のデータセットは、polyfitを使用するとNANを生成します。以下はコードとプリントアウトです。何か案は?

コード:

すべての「ind_#」はデータのリストです。以下は、それらをnumpy配列に変換し、多項式の最適な線を生成できるようにします。

ind_1=np.array(ind_1, np.float)

dep_1=np.array(dep_1, np.float)

x_1=np.arange(min(ind_1)-1, max(ind_1)+1, .01)

ind_2=np.array(ind_2, np.float)

dep_2=np.array(dep_2, np.float)

x_2=np.arange(min(ind_2)-1, max(ind_2)+1, .01)

ind_3=np.array(ind_3, np.float)

dep_3=np.array(dep_3, np.float)

x_3=np.arange(min(ind_3)-1, max(ind_3)+1, .01)

ind_4=np.array(ind_4, np.float)

dep_4=np.array(dep_4, np.float)

x_4=np.arange(min(ind_4)-1, max(ind_4)+1, .01)

以下は、上記で生成された配列と、通常は多項式の係数であるポリフィットリストの内容を出力しますが、以下の3番目のケースでは、すべてのポリフィットの内容がNANとして出力されます。

print(ind_1)

print(dep_1)

print(np.polyfit(ind_1,dep_1,2))

print(ind_2)

print(dep_2)

print(np.polyfit(ind_2,dep_2,2))

print(ind_3)

print(dep_3)

print(np.polyfit(ind_3,dep_3,2))

print(ind_4)

print(dep_4)

print(np.polyfit(ind_4,dep_4,2))

プリントアウト:

[ 1.405  1.871  2.713 ...,  5.367  5.404  2.155]

[ 0.274  0.07   0.043 ...,  0.607  0.614  0.152]

[ 0.01391925 -0.00950728  0.14803846]

[ 0.9760001  2.067      8.8       ...,  1.301      1.625      2.007    ]

[ 0.219      0.05       0.9810001 ...,  0.163      0.161      0.163    ]

[ 0.00886807 -0.00868727  0.17793324]

[ 1.143      0.9120001  2.162     ...,  2.915      2.865      2.739    ]

[ 0.283  0.3    0.27  ...,  0.227  0.213  0.161]

[ nan  nan  nan]

[ 0.167  0.315  1.938 ...,  2.641  1.799  2.719]

[ 0.6810001  0.7140001  0.309     ...,  0.283      0.313      0.251    ]

[ 0.00382331  0.00222269  0.16940372]

3番目のケースのポリフィット定数がNANとしてリストされているのはなぜですか?すべてのデータセットには同じタイプのデータがあり、すべてのコードに一貫性があります。助けてください。

4

1 に答える 1

20

Just looked at your data. This is happening because you have a NaN in dep_3 (element 713). You can make sure that you only use finite values in the fit like this:

idx = np.isfinite(ind_3) & np.isfinite(dep_3)
print(np.polyfit(ind_3[idx], dep_3[idx], 2))

As for finding for bad values in large datasets, numpy makes that really easy. You can find the indices like this:

print(np.where(~np.isfinite(dep_3)))
于 2012-12-03T23:27:31.017 に答える