2012-09-11 110 views
1

我有一個二維數組數組。我需要平均每兩行,並返回平均數組的一半高度。我也需要忽略所有的NaN值來達到平均目的。例如:Python中平均兩行,忽略NaN

>>> x = numpy.array([[ 1, nan, 3, 4, 5], 
... [ 6, 7, 8, 9, nan], 
... [11, 12, 13, 14, nan], 
... [16, nan, 18, 19, nan]]) 

和函數需要返回:

>>> x 
array([[3.5, 7, 5.5, 6.5, 5], 
[13.5, 12, 15.5, 16.5, nan]]) 
+1

'numpy的'有'蒙面數組',我想你可以指定np.nan蒙版,然後應用平均操作。 – yosukesabai

+0

+1:問題是一種本地化,但至少它與預期的輸入和輸出是清晰和簡潔的。 –

回答

3

這應該做的伎倆:

numpy.ma.average(numpy.ma.masked_invalid(x).reshape(-1, 2, x.shape[-1]), 1) 

對於我來說,返回

masked_array(data = 
[[3.5 7.0 5.5 6.5 5.0] 
[13.5 12.0 15.5 16.5 --]], 
      mask = 
[[False False False False False] 
[False False False False True]], 
     fill_value = 1e+20) 
+0

支持yosukesabai建議'masked_array' –

+0

這正是我所期待的,非常感謝。剛剛開始學習Python今年夏天,還有很長的路要走! – Josiah

+0

嗯,我越來越'陣列([[3.5,南,5.5,6.5,南], [13.5,南,15.5,16.5,南]]),並不確定有什麼問題 – yosukesabai