【问题标题】:matlab: extend matrices after union of their related time stampmatlab:在合并相关时间戳后扩展矩阵
【发布时间】:2019-07-23 18:24:11
【问题描述】:

我必须使用矩阵 A(n,2) 和 B(m,2)。它们都在定义的时刻显示信号的电压。在这两个矩阵中,第一列显示时间,第二列显示该时刻的电压。 为了便于演示,我在下图中以水平形式展示了它们:

我将在我的测试中比较这些信号,因此我需要使它们的时间戳彼此相似。 所以时间戳应该是A和B的时间戳的联合,即[1 2 3 4 5 10 11 13 15 16]

使用这个新的时间戳,我需要扩展 A 和 B,这样当有样本和那个时刻时,它的值必须反映,否则那个时刻的电压应该被视为 0,如图所示以下:

我的真实应用程序,我有数千个矩阵,如 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]

【问题讨论】:

    标签: matlab timestamp time-series


    【解决方案1】:

    这是一个简单的方法。这假设每个矩阵的第一行没有重复值,并利用扩展矩阵时缺失值自动设置为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,:);
    

    【讨论】:

    • 我确实知道ismember 会帮助我,但我不知道正确的语法和技巧!您的 sn-p 非常高效且非常简单。
    猜你喜欢
    • 2014-07-19
    • 1970-01-01
    • 2014-01-30
    • 2012-06-07
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    相关资源
    最近更新 更多