使用 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
如果需要也可以保留尺寸。
我正在按行计算数组的平均值,而数组可以有一行或多行。一些值可以是 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
如果需要也可以保留尺寸。