gpt4 book ai didi

python - 减少用于绘制图表的 numpy 数组

转载 作者:行者123 更新时间:2023-11-28 16:48:28 25 4
gpt4 key购买 nike

我想在我的 python 应用程序中绘制图表,但源 numpy 数组太大而无法执行此操作(大约 1'000'000+)。我想取相邻元素的平均值。第一个想法是用 C++ 风格来实现:

step = 19000 # every 19 seconds (for example) make new point with neam value
dt = <ordered array with time stamps>
value = <some random data that we want to draw>

index = dt - dt % step
cur = 0
res = []

while cur < len(index):
next = cur
while next < len(index) and index[next] == index[cur]:
next += 1
res.append(np.mean(value[cur:next]))
cur = next

但是这个解决方案工作起来很慢。我试着做 this :

step = 19000 # every 19 seconds (for example) make new point with neam value
dt = <ordered array with time stamps>
value = <some random data that we want to draw>

index = dt - dt % step
data = np.arange(index[0], index[-1] + 1, step)
res = [value[index == i].mean() for i in data]
pass

这个解决方案比第一个慢。这个问题的最佳解决方案是什么?

最佳答案

np.histogram 可以提供任意 bin 的总和。如果您有时间序列,例如:

import numpy as np

data = np.random.rand(1000) # Random numbers between 0 and 1
t = np.cumsum(np.random.rand(1000)) # Random time series, from about 1 to 500

然后您可以使用 np.histogram 计算 5 秒间隔内的合并总和:

t_bins = np.arange(0., 500., 5.)       # Or whatever range you want
sums = np.histogram(t, t_bins, weights=data)[0]

如果您想要平均值而不是总和,请删除权重并使用 bin 计数:

means = sums / np.histogram(t, t_bins)][0]

此方法类似于this answer中的方法。 .

关于python - 减少用于绘制图表的 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11114566/

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