Как найти индексы схожих значений для каждой строки в массиве Nx2?

Вопрос или проблема

Предположим, что непрерывная переменная A медленно изменяется во времени, ее значение и шум фиксируются в каждой строке массива Nx2. Как найти значения, которые принадлежат A из каждой строки?

Например, matrix = [[-7, 3],[3.9, 8],[-3, 5.5],[5.2, 10]] , ожидаемые индексы [1,0,1,1], что соответствует [3, 3.9, 5.5, 5.2], которые принадлежат A.

Спасибо заранее!

  • Предполагаю, что вы знаете позицию A в первой строке.
  • Затем просто найдите минимальное значение в абсолютных различиях в каждом цикле for.
import numpy as np

def find_continuous_variable(matrix,A_pos):
    data = np.array(matrix)
    indexes = []
    current_A = data[0, A_pos] 
    
    for row in data:
        differences = np.abs(row - current_A)
        min_index = np.argmin(differences)
        indexes.append(min_index)
        current_A = row[min_index]
    
    return indexes


matrix = [[-7, 3, 5], [3.9, 8, 6], [-3, 5.5, 0], [5.2, 10, 4]]
result = find_continuous_variable(matrix,1)
print(result)
# [1, 0, 1, 0]
matrix = [[-7, 3], [3.9, 8], [-3, 5.5], [5.2, 10]]
result = find_continuous_variable(matrix,1)
print(result)
# [1, 0, 1, 0]

.

Ответ или решение

Для решения задачи поиска индексов схожих значений для каждой строки в двумерном массиве (N x 2), нам потребуется алгоритм, который эффективно сопоставляет значения между строками. Давайте рассмотрим, как это можно сделать на Python, используя библиотеку NumPy, что значительно упростит обработку массивов.

Задача

У вас есть массив, где одна из колонок (например, В) представляет собой шумовые значения, а другая (A) — значения переменной, которая меняется медленно во времени. Необходимо выявить индексы значений, которые принадлежат переменной A, основываясь на этих данных.

Пример

Изначальный массив:

matrix = [[-7, 3], [3.9, 8], [-3, 5.5], [5.2, 10]]

Ожидаемая выходная информация:

Индексы, соответствующие переменной A:

# Результат: [1, 0, 1, 0]

Подход к решению

Для реализации нам нужно будет сделать следующее:

  1. Задать начальное значение переменной A (в данной задаче оно будет задано в первой строке).
  2. Для каждой строки: вычислить разницу между текущим значением A и значениями строки, а затем найти индекс минимальной разницы.
  3. Обновить текущее значение A согласно найденному индексу.
  4. Сохранить индексы в итоговый список для дальнейшей обработки.

Реализация

Вот как это можно реализовать в коде:

import numpy as np

def find_continuous_variable(matrix, A_pos):
    # Преобразуем входной массив в формат NumPy для удобства
    data = np.array(matrix)
    indexes = []
    current_A = data[0, A_pos]  # Начальное значение A

    for row in data:
        # Вычисляем абсолютные различия
        differences = np.abs(row - current_A)
        # Находим индекс минимальной разницы
        min_index = np.argmin(differences)
        indexes.append(min_index)
        # Обновляем текущее значение A
        current_A = row[min_index]

    return indexes

# Проверка функции с исходными данными
matrix = [[-7, 3], [3.9, 8], [-3, 5.5], [5.2, 10]]
result = find_continuous_variable(matrix, 1)
print(result)  # Ожидается: [1, 0, 1, 0]

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

  • Импорт библиотеки: Здесь мы используем NumPy для упрощения работы с массивами.
  • Функция find_continuous_variable: включает в себя логику определения индексов для переменной A.
  • Цикл: проходит по каждой строке выборки, вычисляет абсолютные различия и находит индекс с минимальной разницей.

Заключение

Данный алгоритм позволяет эффективно находить индексы значений переменной A из двумерного массива, приспосабливаясь к изменениям в последовательных строках. Это решение может быть полезным в различных областях, таких как анализ временных рядов, обработка сигналов и др. Если у вас есть дополнительные вопросы или требуется дальнейшая помощь, не стесняйтесь обращаться!

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

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