【问题标题】:Linear regression of arrays containing NANs in Python/NumpyPython/Numpy 中包含 NAN 的数组的线性回归
【发布时间】:2012-11-18 13:32:39
【问题描述】:

我有两个数组,比如说 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)

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

【问题讨论】:

  • 两个数组中的NaN是相同还是不同的位置?
  • 在两个阵列中的不同/随机位置。

标签: python math numpy scipy


【解决方案1】:

您可以使用掩码移除 NaN:

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

【讨论】:

  • 完美运行!不知道 ~ 运算符的意思是“不是”。
  • @HyperCube 注意这一点,它仅表示 NumPy 数组的“不是”(这是对正常含义的滥用,即按位非运算符)。见stackoverflow.com/questions/13600988/…
  • 公平地说,如果按照老式的位掩码来考虑掩码,这并不是什么滥用
  • 您也可以使用mask = np.isfinite(varx) & np.isfinite(vary) 保持积极性。当然,这会稍微改变含义以排除无穷大。
  • @ecatmur,如果仅变量包含一些 nan 会发生什么?当我尝试应用您建议的方法时,出现以下错误:ValueError:除连接轴外的所有输入数组维度必须完全匹配
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
  • 2017-10-02
  • 2021-11-24
  • 1970-01-01
相关资源
最近更新 更多