使用numpy.mean()保留垂直尺寸

时间:2015-01-03 11:29:23

标签: python arrays numpy

我正在逐行计算数组的平均值,而数组可以有一行或多行。某些值可以是NaN,在数组中,整行都是NaN

当我的数组看起来像

[[  3.  nan  nan  nan  nan  nan  nan]
 [  1.  nan  nan  nan  nan  nan  nan]]

numpy.mean(.., axis=0)的结果是[ 2. nan nan nan nan nan nan]

但是,当我只有一个像

这样的列数组时
[  5.  nan  nan  nan  nan  nan  nan]

然后numpy.mean(.., axis=0)的结果仅为nan

但我想要[ 5. nan nan nan nan nan nan]。我怎样才能做到这一点?我是否必须使用if条件?

2 个答案:

答案 0 :(得分:3)

将您的数组换入atleast_2d。问题数组将被重新整形为[[5 nan ...]],即1row 2d数组。

np.mean(np.atleast_2d(myarray), axis=0)

np.matrix做了类似的事情,但有更多的包袱,包括保留输出中的2个维度。如果需要,np.mean也可以保留尺寸。

答案 1 :(得分:0)

您可以将数组转换为矩阵,以确保它具有所需的两个维度:

In [5]: arr = np.array([5., np.nan, np.nan, np.nan, np.nan, np.nan, np.nan])

In [6]: np.mean(arr, axis=0)
Out[6]: nan

In [7]: np.mean(np.matrix(arr), axis=0)
Out[7]: matrix([[  5.,  nan,  nan,  nan,  nan,  nan,  nan]])

这适用于您的两个示例(但请注意,它会产生2D输出)。