2012-09-11 72 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