为了账号安全,请及时绑定邮箱和手机立即绑定

在python中计算图中的峰值数量

在python中计算图中的峰值数量

Qyouu 2022-07-19 15:14:38
使用数据集df,我绘制了如下图:dfTime    Temperature8:23:04     18.58:23:04     199:12:57     199:12:57     209:12:58     209:12:58     219:12:59     219:12:59     239:13:00     239:13:00     259:13:01     259:13:01     279:13:02     279:13:02     289:13:03     28图表(整体)放大数据时,我们可以看到更多细节:我想计算这个温度测量设备的激活次数,这会导致温度急剧上升。我已经定义了一个激活如下:令 T0, T1, T2, T3 为时间 t=0,t=1,t=2,t=3 的温度,d0= T1-T0, d1= T2-T1, d2= T3-T2, ...是 2 个相邻值的差。如果1) d0 ≥ 0 且 d1 ≥ 0 且 d2 ≥ 0,并且2) T2-T0 > max(d0, d1, d2),并且3) T2-T0 < 30 秒它被认为是一种激活。我想计算总共有多少次激活。有什么好方法可以做到这一点?谢谢。
查看完整描述

1 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

取决于如何定义尖峰,可能会有许多不同的有效答案。


假设您只想要温度显着升高的指数。一种简单的方法是只寻找超过某个阈值的非常大的值跳跃。阈值可以从数据的平均差中计算出来,这应该粗略估计值发生显着变化的位置。这是一个基本的实现:


import numpy as np


# Data

x = np.array([0, 1, 2, 50, 51, 52, 53, 100, 99, 98, 97, 96, 10, 9, 8, 80])


# Data diff

xdiff = x[1:] - x[0:-1]


# Find mean change

xdiff_mean = np.abs(xdiff).mean()


# Identify all indices greater than the mean

spikes = xdiff > abs(xdiff_mean)+1

print(x[1:][spikes])  # prints 50, 100, 80

print(np.where(spikes)[0]+1)  # prints 3, 7, 15

您也可以使用异常值拒绝,这比与均值差的基本比较要聪明得多。


查看完整回答
反对 回复 2022-07-19
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信