我想获得我的数据线性回归的斜率,但Y包含一些纳米值...因此它扰乱了linregress函数... 例如:
from scipy import stats
import numpy as np
X = np.array([0,1,2,3,4,5])
Y = np.array([np.NaN,4, 5, 10, 2, 5])
stats.linregress(X,Y)
但是,我获得:( nan,nan,nan,nan,nan) 因此,我试图掩盖无效值,如您所见:
import numpy.ma as ma
stats.linregress((X),ma.masked_invalid(Y))
但它是一样的...我不知道我要做什么......
答案 0 :(得分:2)
尝试以下方法:
Y=Y[np.logical_not(np.isnan(Y))]
X=X[np.logical_not(np.isnan(Y))]
upd:正如沃伦注意到的那样,Y
将会更新,因此nans
已经消失。您可以将Y[np.logical_not(np.isnan(Y))]
和X=X[np.logical_not(np.isnan(Y))]
直接提供给线性回归。或者参见Warren对np.isfinite
答案 1 :(得分:2)
要删除y为nan
或inf
的(x,y)对,您可以执行以下操作:
finiteYmask = np.isfinite(Y)
Yclean = Y[finiteYmask]
Xclean = X[finiteYmask]
如果您只为linregress
使用这些“已清理”的数组,则可以执行以下操作:
finiteYmask = np.isfinite(Y)
然后拨打linregress(X[finiteYmask], Y[finiteYmask])