2015-04-03 138 views
1

this question类似,我想从二维numpy阵列中删除一些NAN。但是,而不是删除整个具有NAN的行,我想从数组的每一行中删除相应的元素。例如(使用简单列表格式)从numpy二维阵列中删除NAN's

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和其他行中的相应元素),但对我而言,这似乎不是一种非常简化的方式来执行操作。任何其他想法?

回答

3

你可以使用布尔索引只选择那些不包含nan列:

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

(这几乎等同于您链接到答案;只有轴已切换。)