我有大量的时间序列数据。在每一行中,我有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。
谢谢
答案 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)