我有两个向量:
time_vec = np.array([0.2,0.23,0.3,0.4,0.5,...., 28....])
values_vec = np.array([500,200,220,250,200,...., 218....])
time_vec.shape == values_vec.shape
现在,我想每 0.5 秒间隔取一次 bin 的值,并取这些值的平均值。例如
value_vec = np.array(mean_of(500,200,220,250,200), mean_of(next values in next 0.5 second interval))
是否有任何 numpy 方法我遗漏了哪个 bin 并取了 bin 的平均值?
您可以使用 np.ufunc.reduceat
.您只需要填充断点所在的位置,即 floor(t/.5)
更改时:
说:
>>> t
array([ 0. , 0.025 , 0.2125, 0.2375, 0.2625, 0.3375, 0.475 , 0.6875, 0.7 , 0.7375, 0.8 , 0.9 ,
0.925 , 1.05 , 1.1375, 1.15 , 1.1625, 1.1875, 1.1875, 1.225 ])
>>> b
array([ 0.8144, 0.3734, 1.4734, 0.6307, -0.611 , -0.8762, 1.6064, 0.3863, -0.0103, -1.6889, -0.4328, -0.7373,
1.7856, 0.8938, -1.1574, -0.4029, -0.4352, -0.4412, -1.7819, -0.3298])
断点是:
>>> i = np.r_[0, 1 + np.nonzero(np.diff(np.floor(t / .5)))[0]]
>>> i
array([ 0, 7, 13])
每个区间的总和是:
>>> np.add.reduceat(b, i)
array([ 3.411 , -0.6975, -3.6545])
平均值将是区间长度的总和:
>>> np.add.reduceat(b, i) / np.diff(np.r_[i, len(b)])
array([ 0.4873, -0.1162, -0.5221])
我是一名优秀的程序员,十分优秀!