Найти колебания в массиве NumPy - PullRequest
0 голосов
/ 12 мая 2018

Можно ли найти колебания в списке, чтобы график достиг определенного пика, и он начнет колебаться между двумя значениями, которые неизвестны.

Я собирался сосредоточиться на всех числах выше порога

sum of numbers above thershold

Я написал немного кода на Python для симуляции этогопроблемы.График сначала увеличивается до значения n, и он будет колебаться между двумя значениями m и k.enter image description here

Справочная информация:

Код имитирует раздельную модель SIS во временной сети.То есть каждый узел этого находится в одном из отсеков (восприимчивый - зараженный - восприимчивый).Инфекция распространяется на каждый зараженный узел, пытающийся заразить соседний узел с вероятностью enter image description here и выздороветь с вероятностью enter image description here на каждом временном шаге.

Заражениевымирание, если оно ниже порога enter image description here, где enter image description here.Итак, что делает код, он запускается в цикле 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()

1 Ответ

0 голосов
/ 12 мая 2018

Область, в которой колеблется решение, может быть обнаружена по наличию относительных максимумов и минимумов.Модуль обработки сигналов SciPy имеет несколько методов для их нахождения.Пример:

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),Но из твоего описания данных кажется достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...