在忽略NaN的情况下,在Python中平均两行

在忽略NaN的情况下,在Python中平均两行,python,arrays,numpy,average,mean,Python,Arrays,Numpy,Average,Mean,我有一个二维数据数组。我需要每两行求平均值,然后返回平均值,数组的高度为一半。为了求平均值,我还需要忽略所有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.

我有一个二维数据数组。我需要每两行求平均值,然后返回平均值,数组的高度为一半。为了求平均值,我还需要忽略所有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]])

这应该可以做到:

numpy.ma.average(numpy.ma.masked_无效(x).重塑(-1,2,x.shape[-1]),1)
对我来说,它回来了

masked_数组(数据=
[[3.5 7.0 5.5 6.5 5.0]
[13.5 12.0 15.5 16.5 --]],
面具=
[[假假假假]
[假假假真],
填充值=1e+20)

numpy
具有
屏蔽数组
,我认为您可以指定np.nan作为屏蔽,然后应用平均运算。+1:问题是局部的,但至少它的输入和输出是清晰和简洁的。感谢yosukesabai建议的
掩蔽数组
这正是我想要的,非常感谢。今年夏天刚开始学习Python,还有很长的路要走!嗯,我得到的是
数组([[3.5,nan,5.5,6.5,nan],[13.5,nan,15.5,16.5,nan]])
,不确定是什么错误将我的输出添加到了答案中。我不知道你为什么会得到不同的输出。我正在将python 2.6与numpy 1.3.0一起使用。
numpy.savetxt
似乎不适用于屏蔽数组。将带有显式
NaN
值的
x.filled(numpy.NaN)
转换回普通数组,然后将其传递给
numpy.savetxt