与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和相应的元素)其他行)但对我来说似乎并不是一种非常精简的做事方式。还有其他想法吗?
答案 0 :(得分:5)
您可以使用布尔索引来仅选择那些不包含nan
的列:
>>> x[:, ~np.isnan(x).any(axis=0)]
array([[ 1., 2., 4.],
[ 2., 4., 8.],
[ 3., 6., 0.]])
(这与您链接的答案几乎相同;只有轴已切换。)