我正在逐行计算数组的平均值,而数组可以有一行或多行。某些值可以是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条件?
答案 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输出)。