Python-Scipy带nan值的线性回归
我想得到我的数据的线性回归的斜率,但Y包含一些nan值…因此它干扰了线性回归函数。。。 例如:Python-Scipy带nan值的线性回归,python,scipy,linear-regression,Python,Scipy,Linear Regression,我想得到我的数据的线性回归的斜率,但Y包含一些nan值…因此它干扰了线性回归函数。。。 例如: 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) 但是,我得到:(楠,楠,楠,楠,楠) 因此,我尝试屏蔽无效值,如您所见: import numpy.ma as ma stats.linr
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)
但是,我得到:(楠,楠,楠,楠,楠)
因此,我尝试屏蔽无效值,如您所见:
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:正如沃伦所注意到的,Y
将被更新,因此nan
不见了。您可以输入Y[np.logical\u not(np.isnan(Y))]
和X=X[np.logical\u not(np.isnan(Y))]
直接进入线性回归。或者使用np.isfinite
查看Warren的答案,尝试以下方法:
Y=Y[np.logical_not(np.isnan(Y))]
X=X[np.logical_not(np.isnan(Y))]
upd:正如沃伦所注意到的,Y
将被更新,因此nan
不见了。您可以输入Y[np.logical\u not(np.isnan(Y))]
和X=X[np.logical\u not(np.isnan(Y))]
直接进入线性回归。或者查看Warren关于np.isfinite
的回答。要删除y为nan
或inf
的(x,y)对,可以执行以下操作:
finiteYmask = np.isfinite(Y)
Yclean = Y[finiteYmask]
Xclean = X[finiteYmask]
如果您仅对linregresse
使用这些“已清理”数组,则只需执行以下操作:
finiteYmask = np.isfinite(Y)
然后调用linregresse(X[finiteYmask],Y[finiteYmask])
删除Y为nan
或inf
的(X,Y)对,您可以执行以下操作:
finiteYmask = np.isfinite(Y)
Yclean = Y[finiteYmask]
Xclean = X[finiteYmask]
如果您仅对linregresse
使用这些“已清理”数组,则只需执行以下操作:
finiteYmask = np.isfinite(Y)
然后打电话给LinRegression(X[finiteYmask],Y[finiteYmask])谢谢你的帮助,但我想我也有无穷多的数字激怒了nan。。。这种情况下有相同的函数吗?该解决方案存在问题。第一行更改为Y,因此不再有任何
nan
s。然后,在第二行,np.logical_not(np.isnan(Y))
将始终是所有的真值,如果Y
中最初有任何nan
,布尔数组的长度将小于X
的长度,因此它将简单地丢弃X
末尾的值。用问题中给出的例子测试一下,你会发现它并没有达到你想要的效果。是的,但你得到了这个想法,你可以将Y[np.logical\u not(np.isnan(Y))]
和X[np.logical\u not(np.isnan(Y))]
输入到线性回归中。谢谢你的帮助,但我想我也有无穷多的数字激发了nan。。。这种情况下有相同的函数吗?该解决方案存在问题。第一行更改为Y,因此不再有任何nan
s。然后,在第二行,np.logical_not(np.isnan(Y))
将始终是所有的真值,如果Y
中最初有任何nan
,布尔数组的长度将小于X
的长度,因此它将简单地丢弃X
末尾的值。用问题中给出的例子测试它,你会发现它并没有达到你想要的效果。没错,但你明白了,你可以将Y[np.logical\u not(np.isnan(Y))]
和X[np.logical\u not(np.isnan(Y))]
输入到线性回归中。一个建议:如果你将掩码改为np.isfinite([X,Y])。all(axis=0)
它也可以处理X数组中的nan值。@ayhan这也有助于屏蔽实例WARX
isnan
或inf
但不y
;对吗?@Dataman是的,通过使用.all()
你强制x和y都是有限的。一个建议是:如果你将掩码更改为np.isfinite([x,y])。all(axis=0)
它也可以处理x数组中的nan值。@ayhan这也有助于屏蔽实例是x
isnan
或inf
,但不是y
;对吗?@Dataman是的,通过使用.all()
您强制x和y都是有限的。