是否有可能在列表中找到波动,从而使某个图达到某个峰值,它将开始在两个未知值之间波动。

我正在考虑关注阈值以上的所有数字

python - 在NumPy数组中查找波动-LMLPHP

我已经编写了一些python代码来模拟此问题。该图首先增加到n值,它将在两个值mk之间波动。
python - 在NumPy数组中查找波动-LMLPHP

背景:

该代码正在模拟时态网络上的隔离SIS模型。也就是说,每个节点都在隔室之一(易感-感染-易感)中。感染由每个受感染的节点传播,从而在每个时间步长以概率python - 在NumPy数组中查找波动-LMLPHP感染相邻节点并以概率python - 在NumPy数组中查找波动-LMLPHP恢复。

如果感染低于阈值python - 在NumPy数组中查找波动-LMLPHPpython - 在NumPy数组中查找波动-LMLPHP),则感染将消失。
因此,代码执行了什么操作,它在while(True)循环中运行,以检查感染是否消失,并且是否超过被感染的覆盖率的40%。在这两个if语句之间,感染进入稳定状态,即高于阈值但低于40%的覆盖率,并且在无限长的时间内波动。我正在尝试找到一种方法来查找列表中的波动。

用于模拟这种情况的代码(图形):

import random
import numpy as np
import matplotlib.pyplot as plt

n = 10
m = 11
k = 17

a = np.arange(0, n, 1)
a = np.asarray(a)
for i in range(100):
    a = np.append(a, random.randint(m, k))

plt.plot(a)
plt.show()

最佳答案

溶液的振荡区域可以通过相对最大值和最小值的存在来检测。 SciPy的信号处理模块具有several methods来查找那些信号。例:

from scipy.signal import argrelmin, argrelmax
extrema = np.concatenate((argrelmin(a)[0], argrelmax(a)[0]))
print((extrema.min(), extrema.max()))


打印(12、108)模拟数据,振荡的开始和结束。开始标志着从增长到振荡的转变,结束只是观测的结束。

这种简单的方法不适用于将振荡叠加在增长/衰减模式上的情况,例如函数f(x) = x + 2*sin(x)。但是从您对数据的描述来看,这似乎足够了。

关于python - 在NumPy数组中查找波动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50304296/

10-09 05:14