【问题标题】:Return all row indices of non-NA values numpy array返回非NA值numpy数组的所有行索引
【发布时间】:2018-07-02 19:22:35
【问题描述】:

我有一个 numpy 数组,其中包含很多 NaN 值,并且在某些行中是非 NA 值。

现在,我想获取具有非 NA 值(即数值)的行的所有索引,并希望从不同的 numpy 数组中提取这些特定行索引的值。所以我们有:

Y_test,一个长度为 698 的 np 数组,在某些行上有数值

Y_test
array([ nan,  13.,  nan,  10.,  nan])

Y_pred,一个长度为 698 的 np 数组,每行都有数值

Y_pred
array([ 0.96,  0.57,  0.33,  0.43,  0.83])

我只想在 np_array1 中具有数值的行的索引上提取 np_array2 的数值。

例如:

array([ 0.57, 0.43])

我这样做是为了计算 Y_test 的非 NA 行与 Y_pred 的相应行之间的误差。

谁能帮帮我?

【问题讨论】:

  • 请发布示例数组,以便用户演示您的问题的解决方案。
  • 只需创建一个掩码mask = ~np.isnan(array_with_nans) 并使用array_with_nans[mask]array_without_nans[mask] 为您的数组建立索引。如果您确实需要索引:np.flatnonzero(mask)。如果您还想排除+/-inf,请使用mask = np.isfinite(array_with_nans)

标签: python arrays numpy


【解决方案1】:

您可以使用isnan 来查找数组为nan 的索引,然后使用逆向。

np.isnan(Y_test)
array([ True, False,  True, False,  True], dtype=bool)
Y_pred[~np.isnan(Y_test)]
array([ 0.57,  0.43])

编辑

根据进一步的输入,我了解您的两个数组具有不同的大小。在这种情况下,您可以使用@PaulPanzer 指出的flatnonzero

np.flatnonzero(~np.isnan(Y_test))
array([1, 3])
Y_pred[np.flatnonzero(~np.isnan(Y_test))]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 2019-05-04
    • 1970-01-01
    • 2013-09-06
    相关资源
    最近更新 更多