假设现在我有一个numpy数组,它被定义为,
[[1,2,3,4], [2,3,NaN,5], [NaN,5,2,3]]
现在我想有一个列表,其中包含所有缺失值的索引,在这种情况下是[(1,2),(2,0)]。有什么办法可以做到吗?
[(1,2),(2,0)]
8mmmxcuj1#
np.isnan与np.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]])
r6hnlfcb2#
您可以使用np.where来匹配数组的Nan值和map每个结果对应的布尔条件,以生成tuples的列表。
np.where
Nan
map
tuples
>>>list(map(tuple, np.where(np.isnan(x)))) [(1, 2), (2, 0)]
slhcrj9b3#
由于x!=x返回与np.isnan(x)相同的布尔数组(因为np.nan!=np.nan将返回True),您也可以这样写:
x!=x
np.isnan(x)
np.nan!=np.nan
True
np.argwhere(x!=x)
但是,我仍然推荐使用np.argwhere(np.isnan(x)),因为它更易读。我只是试图提供另一种方式来编写这个答案中的代码。
np.argwhere(np.isnan(x))
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
4条答案
按热度按时间8mmmxcuj1#
np.isnan与np.argwhere组合
产出:
r6hnlfcb2#
您可以使用
np.where
来匹配数组的Nan
值和map
每个结果对应的布尔条件,以生成tuples
的列表。slhcrj9b3#
由于
x!=x
返回与np.isnan(x)
相同的布尔数组(因为np.nan!=np.nan
将返回True
),您也可以这样写:但是,我仍然推荐使用
np.argwhere(np.isnan(x))
,因为它更易读。我只是试图提供另一种方式来编写这个答案中的代码。roqulrg34#
另一种方法是使用np.ma.masked_invalid(x)。如果你想让numpy只对有效值进行操作,这是一种更简单的方法。例如
返回3