Как отфильтровать данные в MATLAB, чтобы сопоставить значения?

Как в MATLAB отфильтровать данные, чтобы строки с временными метками в двусторонних массивах совпадали друг с другом?

У меня есть два набора данных в MATLAB, каждый из которых представляет собой массив 2xn, где в первой строке содержатся временные метки. Однако не каждая временная метка имеет соответствующую точку данных. Мне нужно сравнить эти точки данных, но я не могу использовать их индексы без фильтрации тех точек данных, которые не являются общими для обоих массивов. Используя пример:

A = [ 1, 2, 3, 5, 6;
      3, 4, 5, 7, 8 ]

B = [ 1, 2, 4, 5, 6;
      9, 8, 6, 5, 4 ]

Как с помощью операций или набора операций можно получить следующие массивы:

A = [1, 2, 5, 6;
     3, 4, 7, 8 ]

B = [ 1, 2, 5, 6;
9, 8, 5, 4 ]

Чтобы времена и точки данных совпадали по индексам?

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

Конечно, давай посмотрим, как можно реализовать такую фильтрацию в MATLAB. Ты правильно отметил, что ismember — это хороший способ найти пересекающиеся временные метки. Далее нужно использовать полученные индексы, чтобы отфильтровать исходные массивы.

Вот как это сделать:

% Исходные массивы
A = [1, 2, 3, 5, 6;
     3, 4, 5, 7, 8];

B = [1, 2, 4, 5, 6;
     9, 8, 6, 5, 4];

% Использование ismember для нахождения общих временных меток
[commonTimestamps, idxA, idxB] = intersect(A(1,:), B(1,:));

% Фильтрация массивов, чтобы оставить только общие временные метки
A_filtered = A(:, idxA);
B_filtered = B(:, idxB);

% Вывод отфильтрованных массивов
A_filtered
B_filtered

Что здесь происходит:

  1. intersect находит общие временные метки и возвращает их и индексы, по которым они находятся в каждом из массивов.
  2. Затем, используя индексы idxA и idxB, мы можем выделить только те элементы из массивов A и B, которые имеют общие временные метки.
  3. В результате мы получаем массивы A_filtered и B_filtered, где временные метки и соответствующие значения теперь совпадают по индексам.

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

Спасибо, что это сработало!Спасибо, что это сработало!

Конечно! Рад, что всё получилось. Если будут ещё вопросы или что-то понадобится, дай знать. :blush: . Я ответил на ваш вопрос?