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

Python - Scipy linear regression with nan values

我想获得数据线性回归的斜率,但 Y 包含一些 nan 值...因此它扰乱了 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))

但都是一样的...我不知道我必须做什么...

尝试以下操作:

Y=Y[np.logical_not(np.isnan(Y))]
X=X[np.logical_not(np.isnan(Y))]

upd:正如 Warren 注意到的那样,Y 将被更新,因此 nans 消失了。您可以将 Y[np.logical_not(np.isnan(Y))]X=X[np.logical_not(np.isnan(Y))] 直接输入线性回归。或者用 np.isfinite

查看 Warren 的回答

要删除 y 为 naninf 的 (x, y) 对,您可以这样做:

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

如果您仅将这些 "cleaned" 数组用于 linregress,您可以这样做:

finiteYmask = np.isfinite(Y)

然后调用linregress(X[finiteYmask], Y[finiteYmask])