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

Preserve vertical dimension with numpy.mean()

我正在按行计算数组的平均值,而数组可以有一行或多行。一些值可以是 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 条件吗?

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

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 输出)。

将您的数组包装在 atleast_2d 中。问题数组将被重塑为 [[5 nan ...]],一个 1 行二维数组。

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

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