gpt4 book ai didi

python - Numpy:在每个时间步平均多个数据点

转载 作者:太空宇宙 更新时间:2023-11-03 12:21:15 26 4
gpt4 key购买 nike

这个问题可能在某个地方有答案,但我找不到答案,所以我会在这里问:

我有一组数据,每个时间步包含多个样本。所以,我基本上有两个数组,“时间”,看起来像:(0,0,0,1,1,1,1,1,2,2,3,4,4,4,4,.. .) 和我的数据,这是每次的值(value)。每个时间步都有随机数量的样本。我想以有效的方式在每个时间步获取数据的平均值。

我准备了以下示例代码来展示我的数据是什么样子的。基本上,我想知道是否有更有效的方法来编写“average_values”函数。

import numpy as np
import matplotlib.pyplot as plt

def average_values(x,y):
unique_x = np.unique(x)
averaged_y = [np.mean(y[x==ux]) for ux in unique_x]
return unique_x, averaged_y

#generate our data
times = []
samples = []

#we have some timesteps:
for time in np.linspace(0,10,101):

#and a random number of samples at each timestep:
num_samples = np.random.random_integers(1,10)

for i in range(0,num_samples):
times.append(time)
samples.append(np.sin(time)+np.random.random()*0.5)

times = np.array(times)
samples = np.array(samples)

plt.plot(times,samples,'bo',ms=3,mec=None,alpha=0.5)
plt.plot(*average_values(times,samples),color='r')
plt.show()

这是它的样子: enter image description here

最佳答案

执行此操作的通用代码将执行以下操作:

def average_values_bis(x, y):
unq_x, idx = np.unique(x, return_inverse=True)
count_x = np.bincount(idx)
sum_y = np.bincount(idx, weights=y)

return unq_x, sum_y / count_x

将用于绘图的函数添加到脚本的上方和下方

plt.plot(*average_values_bis(times, samples),color='g')

产生这个输出,红线隐藏在绿线后面:

enter image description here

但是对这两种方法进行计时揭示了使用 bincount 的好处,速度提高了 30 倍:

%timeit average_values(times, samples)
100 loops, best of 3: 2.83 ms per loop

%timeit average_values_bis(times, samples)
10000 loops, best of 3: 85.9 us per loop

关于python - Numpy:在每个时间步平均多个数据点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18727686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com