2015-04-03 154 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.]]) 

(這幾乎等同於您鏈接到答案;只有軸已切換。)