【问题标题】:Creating an annotation list using time stamps使用时间戳创建注释列表
【发布时间】:2021-06-02 20:29:28
【问题描述】:

我有长度为 230897 且采样频率为 100hz 的心电图数据。我想创建一个注释列表(长度为 230897),对应于心律失常事件(1 的序列)的时间戳和持续时间(以秒为单位):

timestamps                                  duration
2014-09-10T22:10:20.000000000                 3.5
2014-09-10T23:10:10.000000000                 4
2014-09-10T23:50:20.000000000                 6

例如:注释列表的长度应为 230897,并且在 '2014-09-10T22:10:20.000000000' 处应为 1,持续 3.5 秒;在'2014-09-10T23:10:10.000000000' 1 持续 4 秒,依此类推。这是我迄今为止尝试过的,不幸的是,它不起作用:

start_time= '2014-09-10T21:01:10.000000000'
data_length=230897
annot_list = np.zeros(data_length)

prev=0, fs=100
for t in timestamps:
        time_diff = t - prev
        seconds = time_diff.astype('timedelta64[s]').astype(np.int32)
        total_cov = seconds*fs
        i1 = i0 + total_cov
        i0, i1 = int(i0), int(i1)
        annot_list[i0:i1] = 1.0
        i0 = i1
        prev = t

有人可以帮我吗?

【问题讨论】:

  • 你介意提供预期的annot_list吗,只是前几个元素
  • 00001111110000011111000 ......直到数据长度(data_length)......在2014-09-10T22:10:20.000000000,应该有1的持续时间3.5秒,在2014-09- 10T23:10:10.000000000 1 的 4 等等。
  • 我真的发现很难用 3.5 秒映射 6 个,用 4 秒映射 5 个。请描述得更详细一些。总共有多少个时间戳?如果它是 230897,那么你怎么能期望单个索引有多个值而不将其转换为列表或其他东西。
  • @YashvanderBamel :最初 annot_list 是一个形状为零的数组 (230897,1)。然后在每个时间戳(即事件的开始时间)处,应该有相应持续时间的 1。我只是举了一个例子,但是有 350 个 1(3.5 秒x100Hz)和 400 个 1(4x100Hz)等等。代码中start_time为心电记录的开始时间。
  • 您确定开始时间吗?您的第一个时间戳和开始时间之间的 10 毫秒(尊重您的 100Hz 频率)的时间差超过 400 000,这比您的数组的大小更大。

标签: python tensorflow keras time-series pytorch


【解决方案1】:

假设您的数据如下所示:

timestamps = [np.datetime64("2014-09-10T22:10:20.000000000"),
    np.datetime64("2014-09-10T23:10:10.000000000"),
    np.datetime64("2014-09-10T23:50:20.000000000")]

durations = [3.5,4,6]

然后,您可以简单地遍历您的列表并根据您的开始时间、时间戳和持续时间计算您的开始索引和停止索引,如下所示:

start_time = np.datetime64("2014-09-10T21:01:10.000000000")
data_length = 2308970
annot_list = np.zeros(data_length)
freq = 100

for timestamp, duration in zip(timestamps, durations):
    time_from_start = int(
        freq * (np.timedelta64(timestamp - start_time, "s").astype("float32"))
    )
    duration = int(freq * duration)
    annot_list[time_from_start : time_from_start + duration] = 1

【讨论】:

    猜你喜欢
    • 2020-03-28
    • 2011-10-18
    • 2011-09-05
    • 2022-11-02
    • 2019-09-19
    • 2018-04-12
    • 2014-10-25
    • 2016-03-28
    • 2020-03-01
    相关资源
    最近更新 更多