Python - 具有nan值的Scipy线性回归

时间:2016-07-17 13:14:09

标签: python scipy linear-regression

我想获得我的数据线性回归的斜率,但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))

但它是一样的...我不知道我要做什么......

2 个答案:

答案 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为naninf的(x,y)对,您可以执行以下操作:

finiteYmask = np.isfinite(Y)
Yclean = Y[finiteYmask]
Xclean = X[finiteYmask]

如果您只为linregress使用这些“已清理”的数组,则可以执行以下操作:

finiteYmask = np.isfinite(Y)

然后拨打linregress(X[finiteYmask], Y[finiteYmask])