matlab: расширить матрицы после объединения их связанной отметки времени - PullRequest
0 голосов
/ 01 марта 2019

У меня есть матрицы A (n, 2) и B (m, 2).Оба они показывают напряжение сигнала в определенный момент времени.В обеих этих матрицах первый столбец показывает время , а второй столбец показывает напряжение в этот момент времени.Для простоты демонстрации я показал их в горизонтальной форме на рисунке ниже: enter image description here

Я собираюсь сравнить эти сигналы в своих тестах, поэтому мне нужно, чтобы их временные метки были похожи друг на друга,Таким образом, отметки времени должны быть объединением отметок времени A и B, то есть [1 2 3 4 5 10 11 13 15 16]

Используя эти новые отметки времени, мне нужно расширить A иВ такой, что когда есть образец и этот момент, его значения должны быть отражены, в противном случае напряжение в этот момент времени следует считать 0 , как показано ниже: enter image description here

В моем реальном приложении у меня есть тысячи матриц, таких как A и B, поэтому я использовал unique над матрицей, которая состояла из всех временных меток, чтобы у меня были все временные метки.В моей предыдущей задаче я использовал interp1 для обработки ситуации с отсутствующими временными метками, и это интерполировало бы отсутствующую выборку, однако в настоящее время мне нужно поставить 0 для значения напряжения всякий раз, когда выборка отсутствует.Я хочу знать, как я могу справиться с делом?

Ввод:

A= [1   2   3   4   10  11  15; 1.01    1.02    1.03    1.04    1.10    1.11    1.15]


B= [1   3   5   10  13  16;2.01 2.03    2.05    2.10    2.13    2.16]

Выход:

Ax  = [1    2   3   4   5   10  11  13  15  16; 1.01    1.02    1.03    1.04    0   1.10    1.11    0   1.15    0]
Bx = [1  2  3   4   5   10  11  13  15  16;2.01 0   2.03    0   2.05    2.10    0   2.13    0   2.16]

1 Ответ

0 голосов
/ 01 марта 2019

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

u = unique([A(1,:) B(1,:)]);
Ax = u;
Ax(2, ismember(u, A(1,:))) = A(2,:);
Bx = u;
Bx(2, ismember(u, B(1,:))) = B(2,:);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...