如何计算numpy中每一行的正值平均值?

时间:2018-07-02 04:13:08

标签: python numpy average mean

我有大量的时间序列数据。在每一行中,我有15秒的加速度数据。像这样:

a = [[1,2,3,-1,-2,-3,-4,-1,1,2,1,2,3,2,5],
     [1,2,3,-1,-2,-3,-4,-1,1,2,1,2,3,2,5],
     .
     .
     [1,2,3,-1,-2,-3,-4,-1,1,2,1,2,3,2,5]]

例如,在这种情况下,我想计算每行中阳性项目的平均值。我想要拥有:

avg = [0.73 , 0.73, ..... , 0.73]

我不想在实现中使用for和loop。

谢谢

2 个答案:

答案 0 :(得分:1)

这是原始答案:

a = [[1, 2, 3, -1, -2, -3, -4, -1, 1, 2, 1, 2, 3, 2, 5],
     [1, 2, 3, -1, -2, -3, -4, -1, 1, 2, 1, 2, 3, 2, 5],
     [1, 2, 3, -1, -2, -3, -4, -1, 1, 2, 1, 2, 3, 2, 5]]

b = np.array(a)

def avg(a):
    return a[a > 0].mean()

np.apply_along_axis(avg, 1, b)

输出:

array([2.2, 2.2, 2.2])

编辑:根据@ user3483203的评论,这是一个更好的答案:

np.nanmean(np.where(b>=0, b, np.nan), axis=1)

答案 1 :(得分:-2)

如果只想获取正数元素的平均值,则可以执行以下操作:

a.clip(0).sum(1)/np.sum(a>0,1)

如果只想对正元素求和并除以每行元素的总数。您可以这样做:

a.clip(0).mean(1)