如何获取numpy数组中所有NaN值的索引列表?

nqwrtyyt  于 2023-10-19  发布在  其他
关注(0)|答案(4)|浏览(116)

假设现在我有一个numpy数组,它被定义为,

[[1,2,3,4],
[2,3,NaN,5],
[NaN,5,2,3]]

现在我想有一个列表,其中包含所有缺失值的索引,在这种情况下是[(1,2),(2,0)]
有什么办法可以做到吗?

8mmmxcuj

8mmmxcuj1#

np.isnannp.argwhere组合

x = np.array([[1,2,3,4],
              [2,3,np.nan,5],
              [np.nan,5,2,3]])
np.argwhere(np.isnan(x))

产出:

array([[1, 2],
       [2, 0]])
r6hnlfcb

r6hnlfcb2#

您可以使用np.where来匹配数组的Nan值和map每个结果对应的布尔条件,以生成tuples的列表。

>>>list(map(tuple, np.where(np.isnan(x))))
[(1, 2), (2, 0)]
slhcrj9b

slhcrj9b3#

由于x!=x返回与np.isnan(x)相同的布尔数组(因为np.nan!=np.nan将返回True),您也可以这样写:

np.argwhere(x!=x)

但是,我仍然推荐使用np.argwhere(np.isnan(x)),因为它更易读。我只是试图提供另一种方式来编写这个答案中的代码。

roqulrg3

roqulrg34#

另一种方法是使用np.ma.masked_invalid(x)。如果你想让numpy只对有效值进行操作,这是一种更简单的方法。例如

x = np.ones((2,2))
x[(0,0)] = np.nan
x = np.ma.masked_invalid(x)
np.sum(x)

返回3

相关问题