Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-Scipy带nan值的线性回归_Python_Scipy_Linear Regression - Fatal编程技术网

Python-Scipy带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

我想得到我的数据的线性回归的斜率,但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.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这也有助于屏蔽实例WAR
X
is
nan
inf
但不
y
;对吗?@Dataman是的,通过使用
.all()
你强制x和y都是有限的。一个建议是:如果你将掩码更改为
np.isfinite([x,y])。all(axis=0)
它也可以处理x数组中的nan值。@ayhan这也有助于屏蔽实例是
x
is
nan
inf
,但不是
y
;对吗?@Dataman是的,通过使用
.all()
您强制x和y都是有限的。