numpy.polyfitを使用するときに発生するLinAlgError( 'SVDが線形最小二乗法に収束しなかった')エラーを解決します



Solve Raise Linalgerror Error When Using Numpy



#Test talib module import talib import numpy as np import pandas as pd import matplotlib.pyplot as plt df = [] close_list = [] f = open('trade_records/contract_data_HOUR.txt','r') data = f.readlines() for item in data: df.append(eval(item)) f.close() print(df) df = pd.DataFrame(df) print(df) real = talib.MA(df.close,timeperiod=3) print(real) x=range(0,len(real)-2,1) y= real[2:] #Find the polynomial of x,y z1 = np.polyfit(x,list(y),6) p1 = np.poly1d(z1)# Convert to polynomial expression yvals = p1(x) #Find the fitting function yvals #Draw fitting curve plt.plot(x,y,'b--',label='original values') plt.plot(x,yvals,'r',label='polyfit values') plt.xlabel('Time') plt.ylabel('Price') plt.legend(loc=3) plt.show()

realの値は次のとおりです。

0 NaN 1 NaN 2 3.606000 3 3.584333 4 3.580000 5 3.572333 6 3.585000 7 3.589000 8 3.599667 9 3.593000 10 3.585000 11 3.575667 12 3.557000 13 3.544000 14 3.562000 15 3.590000 16 3.613333 17 3.598333 18 3.590000 19 3.577000 dtype: float64

上記の例では、realの最初の2つの値はnp.NaNタイプであるため、プロットを実行できず、LinAlgErrorが表示されます。不正な値を削除するだけで、正常に実行できます



演算結果:
画像