【问题标题】:How can I calculate the mean value of positive values in each row in numpy? [duplicate]如何计算 numpy 中每一行中正值的平均值? [复制]
【发布时间】:2018-12-10 06:14:51
【问题描述】:

我有一大堆时间序列数据。在每一行中,我都有 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 和循环。

谢谢

【问题讨论】:

  • 如果只取正值的平均值,如何得到 0.73?

标签: python numpy average mean


【解决方案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)

【讨论】:

  • 请不要实际使用这个答案。还有很多更好的方法。使用np.nanmean(np.where(a>=0,a,np.nan),axis=1),这是从副本中得到很好的答案
【解决方案2】:

如果你想只得到正元素的平均值,你可以这样做:

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

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

a.clip(0).mean(1)

【讨论】:

    猜你喜欢
    • 2021-07-24
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多