从numpy 2-D数组中删除NAN

时间:2015-04-03 19:17:11

标签: python numpy nan

this question类似,我想从2-D numpy数组中删除一些NAN。但是,我没有删除具有NAN的整行,而是想从数组的每一行中删除相应的元素。例如(为简单起见使用列表格式)

x=[ [1,2,3,4],
    [2,4,nan,8],
    [3,6,9,0] ]

会变成

x=[ [1,2,4],
    [2,4,8],
    [3,6,0] ]

我可以想象使用numpy.where来确定NAN出现在每一行的哪个位置,然后使用一些循环和逻辑语句从旧数组中创建一个新数组(跳过NAN和相应的元素)其他行)但对我来说似乎并不是一种非常精简的做事方式。还有其他想法吗?

1 个答案:

答案 0 :(得分:5)

您可以使用布尔索引来仅选择那些不包含nan的列:

>>> x[:, ~np.isnan(x).any(axis=0)]
array([[ 1.,  2.,  4.],
       [ 2.,  4.,  8.],
       [ 3.,  6.,  0.]])

(这与您链接的答案几乎相同;只有轴已切换。)