我想我找到了python numpy.polyfit()的錯誤。我使用numpy.polyfit與兩個相同的數據,一個來自txt,另一個來自打字。但結果是不同的。爲什麼?請幫助我。我想我找到了一個Python的錯誤numpy.polyfit()
這是我的代碼:
# -*- coding:utf-8 -*-
import re
from numpy.polynomial import polynomial
import numpy
import matplotlib.pyplot as plt
fl=open(r'C:\Users\yanzhiquan\Desktop\4-6.txt','r')
def stof(str):#把txt文件中的string變成數據
if str:
[e, t] = re.split(' ',str)
e=int(e)
t=float(re.sub('\n','',t))
return e,t
def avi(fl):#生成x y
x=[]
y=[]
for s in fl:
[tx,ty]=stof(s)
x.append(tx)
y.append(ty)
return x,y
x,y=avi(fl)
f=polynomial.polyfit(x,y,5)
f=numpy.poly1d(f)
print f
print x[0:10],type(x),type(x[1])
print y[0:10],type(y),type(y[1])
plt.plot(x,f(x),'g',x,y,'d')
plt.show()
結果:
5 4 3 2
-0.6467 x + 3.384 x - 2.032 x + 0.5557 x - 0.06226 x + 0.00241
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] <type 'list'> <type 'int'>
[1.2, 1.5, 1.9, 2.1, 4.0, 4.4, 4.9, 5.1, 4.0, 4.1] <type 'list'> <type 'float'>
的txt文件的內容僅僅是數據。 像這樣:
1 1.2
2 1.5
3 1.9
4 2.1
5 4
6 4.4
7 4.9
8 5.1
9 4
10 4.1
這是我的測試代碼,其結果應該是正確的:
import numpy
import matplotlib.pyplot as plt
x=[1,2,3,4,5,6,7,8,9,10]
y=[1.2,1.5,1.9,2.1,4.0,4.4,4.9,5.1,4.0,4.1]
f=numpy.polyfit(x,y,5)
f=numpy.poly1d(f)
print f
t=[]
i=0
while True:
t.append(i)
i=i+0.01
if i>10:
break
print x,type(x),type(x[1])
print y,type(y),type(y[1])
plt.plot(t,f(t),'r',x,y,'d')
plt.show()
結果:
5 4 3 2
0.00241 x - 0.06226 x + 0.5557 x - 2.032 x + 3.384 x - 0.6467
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] <type 'list'> <type 'int'>
[1.2, 1.5, 1.9, 2.1, 4.0, 4.4, 4.9, 5.1, 4.0, 4.1] <type 'list'> <type 'float'>
爲什麼你在一個片段中使用'numpy.polynomia.polynomiall.polyfit'而在另一個片段中使用'numpy.polyfit'? – kazemakase