Поиск тенденций в числовой последовательности

Вопросы и ответы

Что я пробовал:

Я пытался использовать линейную регрессию для нахождения наклона и перехвата и так далее. Но это дает только прямую линию. Не показывает тренд и затем изменение тренда, а потом снова продолжение тренда.

Что я хочу:

У меня есть последовательность 1,2,4,5,7,9,8,6,4,3,5,7,8.

Я хочу найти, когда числа идут по возрастанию, когда начинают убывать, и снова начинают расти, используя Python.

Ожидание состоит в том, что я должен получить следующее:

возрастающая 1,2,4,5,7,9
убывающая 9,8,6,4,3 и затем
снова возрастающая 3,5,7,8

Ответ

Для решения вашей задачи по определению трендов в последовательности чисел (возрастающих и убывающих) на языке Python, вы можете использовать следующий подход. Мы будем проходить по списку и отслеживать изменения в направлении последовательности. Это можно сделать, сравнивая текущий элемент с предыдущим. Вот пример кода, который поможет вам реализовать это:

# Исходные данные
numbers = [1, 2, 4, 5, 7, 9, 8, 6, 4, 3, 5, 7, 8]

def find_trends(nums):
    if not nums:
        return []

    trends = []
    current_trend = []

    # Определение начального направления
    ascending = None

    for i in range(len(nums) - 1):
        current_trend.append(nums[i])

        # Определяем направление
        if nums[i] < nums[i + 1]:
            new_ascending = True
        elif nums[i] > nums[i + 1]:
            new_ascending = False
        else:
            continue  # если элементы равны, просто пропускаем

        # Если мы обнаружили изменение направления
        if ascending is None:
            ascending = new_ascending
        elif ascending != new_ascending:
            # Сохраняем текущий тренд
            current_trend.append(nums[i + 1])
            trends.append(("ascending" if ascending else "descending", current_trend.copy()))
            current_trend.clear()
            ascending = new_ascending

    # Добавляем последний тренд
    current_trend.append(nums[-1])
    trends.append(("ascending" if ascending else "descending", current_trend))

    return trends

# Вызов функции и вывод результата
trend_results = find_trends(numbers)

for trend_type, trend in trend_results:
    print(f"{trend_type}: {', '.join(map(str, trend))}")

Объяснение кода:

  1. Мы создаём функцию find_trends, которая принимает список чисел.
  2. Определяем переменные для хранения текущего тренда и его направления.
  3. Итерируем по списку чисел, сравниваем каждую пару соседних чисел.
  4. Если число больше предыдущего, мы определяем, что это возрастающий тренд, и наоборот.
  5. При обнаружении изменения направления мы сохраняем текущий тренд в списке и очищаем его для начала нового.
  6. В конце мы добавляем последний тренд и выводим результаты.

Ожидаемый вывод:

При запуске кода вы получите следующий вывод, который соответствует вашим ожиданиям:

ascending: 1, 2, 4, 5, 7, 9
descending: 9, 8, 6, 4, 3
ascending: 3, 5, 7, 8

Эта реализация проанализирует вашу последовательность и корректно определит, когда она возрастает и когда убывает, предоставляя вам желаемую информацию.

Оцените материал
Добавить комментарий

Капча загружается...