Как найти несколько максимумов числовых временных рядов

Я думаю, вы пытаетесь сделать слишком много. У Django есть поддержка этого, он даже имеет большую поддержку при рендеринге списков и обеспечивает, чтобы пользователь вошел в систему.

Мы можем использовать класс на основе для этого : a ListView:

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import ListView

class PostListView(LoginRequiredMixin, ListView):
    model = Post
    template_name = 'dashboard/postlist.html'
    paginate_by = 5
    queryset = Post.objects.order_by('-date')

В вашем шаблоне dashboard/postlist.html вы можете добавить логику для отображения кнопок. Например,

<!-- render the list -->

{% if is_paginated %}
    {% if page_obj.has_previous %}
        <a href="?page={{ page_obj.previous_page_number }}">previous</a>
    {% endif %}
    {% if page_obj.has_next %}
        <a href="?page={{ page_obj.next_page_number }}">next</a>
    {% endif %}
{% endif %}

В urls.py вы можете использовать PostListView.as_view() вместо PostLists. Таким образом, ListView будет обрабатывать проверку подлинности, нарезку, разбиение на страницы и т. Д.

2
задан user35202 19 January 2019 в 19:14
поделиться

2 ответа

Событие, которое вы должны искать, - это когда первая производная v меняет знак. Для максимума проверьте, не отрицательна ли вторая производная a.

 yp, y = y, euler(y,dydt,h)
 if py[1]*y[1] < 0 and y[2] < 0:
      # do what you need to do to list the maximum

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


Если вы хотите получить серьезные результаты, используйте метод более высокого порядка для интеграции с ODE.

0
ответ дан LutzL 19 January 2019 в 19:14
поделиться

Я бы предложил использовать find_peaks из модуля scipy.signal. Эта функция принимает одномерный массив и находит все локальные максимумы путем простого сравнения соседних значений. Необязательно, подмножество этих пиков может быть выбрано путем указания условий для свойств пика.

Вот фрагмент кода, с которого можно начать:

import matplotlib.pyplot as plt
import numpy as np
from scipy.signal import find_peaks

Fs = 8000
f = 5
sample = 8000
x = np.arange(sample)
y = np.sin(2 * np.pi * f * x / Fs)
peaks = find_peaks(y)

plt.scatter(peaks[0], np.ones(f), c='red')
plt.plot(x, y)
plt.xlabel('sample(n)')
plt.ylabel('voltage(V)')
plt.show()

enter image description here

Ваши максимумы:

print(peaks[0])
[ 400 2000 3600 5200 6800]
0
ответ дан Lukasz Tracewski 19 January 2019 в 19:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: