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 为 nan
或 inf
的 (x, y) 对,您可以这样做:
finiteYmask = np.isfinite(Y)
Yclean = Y[finiteYmask]
Xclean = X[finiteYmask]
如果您仅将这些 "cleaned" 数组用于 linregress
,您可以这样做:
finiteYmask = np.isfinite(Y)
然后调用linregress(X[finiteYmask], Y[finiteYmask])
我想获得数据线性回归的斜率,但 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
要删除 y 为 nan
或 inf
的 (x, y) 对,您可以这样做:
finiteYmask = np.isfinite(Y)
Yclean = Y[finiteYmask]
Xclean = X[finiteYmask]
如果您仅将这些 "cleaned" 数组用于 linregress
,您可以这样做:
finiteYmask = np.isfinite(Y)
然后调用linregress(X[finiteYmask], Y[finiteYmask])