我有一个类似[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
的numpy数组
假设我要平均3个元素,则目标数组应如下所示:
[2, 2, 2, 5, 5, 5, 8, 8, 8, 10]
请注意,当没有可用的三元组时,我想计算其余元素的平均值
是否可以通过数组操作来做到这一点?
答案 0 :(得分:0)
您可以reshape
数组来使用mean
函数,例如:
a = np.arange(1,11)
b = a[:a.size//3*3]
b.shape = (-1,3)
c = np.mean(b, axis=1)
# c == array([2., 5., 8.])
然后将结果重新分配到原始数组中:
c.shape = (-1,1) # i.e. (len(b), 1)
b[:] = c
print(a)
# array([ 2, 2, 2, 5, 5, 5, 8, 8, 8, 10])
请注意,这是因为b
是a
的子视图。另外,最后一个元素不是您所要求的平均值(我保持不变),但是它很容易修复,例如:
a[9:] = np.mean(a[9:])
答案 1 :(得分:0)
我只是为了好玩而在一个班轮里完成了大部分工作:D *注意,我正在使用sum()来使列表变平..(这是一些怪异的python技巧)
def custom_avg(group: int, arr):
out = list()
[out.append(list(np.full( (1, group), np.sum(arr[i:i+group])/ (1 if i + group > len(arr) else group), dtype=int))) for i in range(0, len(arr), group) ]
return sum(out,[])
享受!祝你好运。