【发布时间】:2016-10-11 19:37:23
【问题描述】:
现在说我有一个 numpy 数组,它被定义为,
[[1,2,3,4],
[2,3,NaN,5],
[NaN,5,2,3]]
现在我想要一个包含所有缺失值索引的列表,在这种情况下为[(1,2),(2,0)]。
有什么办法可以做到吗?
【问题讨论】:
现在说我有一个 numpy 数组,它被定义为,
[[1,2,3,4],
[2,3,NaN,5],
[NaN,5,2,3]]
现在我想要一个包含所有缺失值索引的列表,在这种情况下为[(1,2),(2,0)]。
有什么办法可以做到吗?
【问题讨论】:
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]])
【讨论】:
您可以使用np.where 来匹配与数组的Nan 值和map 对应的布尔条件,以生成tuples 的列表。
>>>list(map(tuple, np.where(np.isnan(x))))
[(1, 2), (2, 0)]
【讨论】:
list( zip(* map( list, np.where(np.isnan(x) ) ) ) )
由于x!=x 返回与np.isnan(x) 相同的布尔数组(因为np.nan!=np.nan 将返回True),您也可以这样写:
np.argwhere(x!=x)
但是,我仍然建议编写 np.argwhere(np.isnan(x)),因为它更具可读性。我只是尝试提供另一种方法来编写此答案中的代码。
【讨论】: