gpt4 book ai didi

python - 如果间隔出现在多个容器中,如何将时间范围/间隔分成容器

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:39 25 4
gpt4 key购买 nike

我有一个数据集,其中包含记录时间段内发生的事件的成对开始结束时间(例如秒)。例如:

#each tuple includes (start, stop) of the event happening
data = [(0, 1), (5,8), (14,21), (29,30)]

我想量化这件事在我想要的任何大小的垃圾箱中发生的时间百分比。例如,如果我想要每个 5 秒的 bin,我想要一个函数:

  • 将所有交叉的元组拆分到多个容器中
  • 将事件发生的总时间相加,然后除以 bin 大小,以获得每个 bin 期间事件发生的时间

我主要在第一点上遇到困难。

理想情况下,它看起来像这样,其中 bin_times 是我需要帮助编写的函数,输出是函数将返回的内容:

data = [(0, 1), (5,8), (15,21), (29,30)]
bin_times(data, bin_size=5, total_length=40)

>> [20, 60, 0, 100, 20, 20, 0, 0]

最佳答案

如果您不介意使用numpy,这里有一个策略:

import numpy as np

def bin_times(data, bin_size, total_length):
times = np.zeros(total_length, dtype=np.bool)
for start, stop in data:
times[start:stop] = True
binned = 100 * np.average(times.reshape(-1, bin_size), axis=1)
return binned.tolist()

data = [(0, 1), (5,8), (15,21), (29,30)]
bin_times(data, 5, 40)
// => [20.0, 60.0, 0.0, 100.0, 20.0, 20.0, 0.0, 0.0]

为了解释bin_times()的逻辑,让我使用一个更小的例子:

data = [(0, 1), (3, 8)]
bin_times(data, 3, 9)
// => [33.3, 100.0, 66.6]
  1. times 数组对您的事件是否在每个单位时间间隔内发生进行编码。首先将每个条目设置为 False:

    [False, False, False, False, False, False, False, False, False]
  2. 读取传入的数据并将相应的条目设置为True:

    [True, False, False, True, True, True, True, True, False]
  3. 将其 reshape 为二维矩阵,其中行的长度为bin_size:

    [[True, False, False],
    [True, True, True],
    [True, True, False]]
  4. 取每行的平均值:

    [0.333, 1.000, 0.666]
  5. 乘以 100 将这些数字转换为百分比:

    [33.3, 100.0, 66.6]
  6. 要向函数使用者隐藏 numpy 的使用,请使用 .tolist() 方法来转换生成的 numpy code> 数组转换为普通 Python 列表。

需要注意的是:bin_size 需要均匀划分 total_length — 否则, reshape 将引发 ValueError

关于python - 如果间隔出现在多个容器中,如何将时间范围/间隔分成容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39710296/

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