我有一个如下所示的numpy数组:
x = array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ nan, 8., 9.]])
我想计算每列的平均值。如果我使用np.mean(x, axis=0)
,那么我将nan
作为第一列的平均值,并使用x[~np.isnan(x)]
过滤掉nan
值,将数组展平为一维数组。< / p>
我需要使用较旧版本的numpy,因此我无法使用numpy.nanmean
修改:This comment解释了为什么这不是发布的问题的副本
答案 0 :(得分:1)
一种方法是使用boolean-indexing
-
def nanmean_cols(x):
mask = ~np.isnan(x)
x_masked = np.where(mask, x, 0)
return x_masked.sum(0)/mask.sum(0)
示例运行 -
In [114]: x
Out[114]:
array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ nan, 8., 9.]])
In [115]: np.nanmean(x,axis=0)
Out[115]: array([ 2.5, 5. , 6. ])
In [117]: nanmean_cols(x)
Out[117]: array([ 2.5, 5. , 6. ])
答案 1 :(得分:0)
我想出了另一种不使用布尔索引的方法:
means = []
# Iterate over each column in x
for col in x.T:
filtered_vals = col[~np.isnan(col)]
avg = np.mean(filtered_vals)
means.append(avg)
一行版本:
means = [np.mean(col[~np.isnan(col)]) for col in x.T]