在Python/Numpy中包含NAN的数组的线性回归

Hyp*_*ube 14 python math numpy scipy

我有两个数组,比如varx和vary.两者都包含不同位置的NAN值.但是,我想对两者进行线性回归,以显示两个数组的相关程度.到目前为止,这非常有用:http://glowingpython.blogspot.de/2012/03/linear-regression-with-numpy.html

但是,使用这个:

slope, intercept, r_value, p_value, std_err = stats.linregress(varx, vary)
Run Code Online (Sandbox Code Playgroud)

导致每个输出变量的nans.将两个数组中的有效值作为线性回归的输入的最方便的方法是什么?我听说过屏蔽数组,但我不确定它是如何工作的.

eca*_*mur 22

您可以使用掩码删除NaN:

mask = ~np.isnan(varx) & ~np.isnan(vary)
slope, intercept, r_value, p_value, std_err = stats.linregress(varx[mask], vary[mask])
Run Code Online (Sandbox Code Playgroud)

  • @HyperCube小心翼翼,它只对NumPy数组意味着"不是"(它是滥用正常含义,即按位非运算符).请参阅http://stackoverflow.com/questions/13600988/python-tilde-unary-operator-as-negation-numpy-bool-array/13602395#13602395 (2认同)
  • 您也可以使用mask = np.isfinite(varx)&np.isfinite(vary)保持正值。当然,这稍微改变了含义,也排除了无限。 (2认同)
  • @ecatmur,如果仅变化包含一些 nan 会发生什么?当我尝试应用您建议的方法时,出现以下错误: ValueError: 除串联轴外的所有输入数组维度必须完全匹配 (2认同)