【问题标题】:Expand an array by filling in with current values in MATLAB通过在 MATLAB 中填充当前值来扩展数组
【发布时间】:2014-08-18 17:48:12
【问题描述】:

我有一个相当简单的问题,我只想知道在 MATLAB 中是否有一种简单的方法可以做到这一点(即一个函数来做到这一点,而不是自己写出循环或其他东西)。

假设我有一个时间序列,其中 Time 是 1:1:1000,Data 是 2 * (1:1:1000),我想通过使 Time 和 Data 向量更精细来扩展数组。假设我希望时间为1:0.1:1000,数据为2 * (1:0.1:1000)。有没有一种简单的方法可以告诉 MATLAB 重复每个向量的值 10 次(来自 1 / 0.1 = 10),这样我就可以拥有这样的东西?:

Time: [1, 2, 3, 4, ...]

Data: [2, 4, 6, 8, ...]

到:

Time: [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, ...]

Data: [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, ...]

【问题讨论】:

标签: matlab


【解决方案1】:

您可以使用reshape()repmat() 的组合,如下所示:

Data = [2, 4, 6, 8, ...] % As stated in the question. 
Data = reshape(repmat(Data, 10, 1), 1, []);

这比kron()sort()repmat() 的组合等其他方法更省时。

做了两次模拟,结果如下图所示。

第一:模拟时间与Data 的长度。这里我使用 N=100 而不是 10。

第二:模拟时间与重复因子。 Data 的长度为 10000。

所以你可以根据模拟结果选择最好的一个。

【讨论】:

    【解决方案2】:

    按照 seb 的建议,您可以使用函数repmat。这是我要做的:

    Data = [2, 4, 6, 8, ...];
    Data = sort(repmat(Data,1,10));
    

    【讨论】:

    • 如果我想通过行重复它,如何将其扩展为数据矩阵而不是向量?
    • @celestialorb 你的意思是像Data = [2, 2, 2, 2, 2, 2, 2, 2, 2, 2; ... 4, 4, 4, 4, 4, 4, 4, 4, 4, 4; ...??
    • 假设我有对应于每个时间实例的位置数据。例如data = [1 2 3; 4 5 6] 代表time = [1 2 3],我想将其扩展为data = [1 2 3; 1 2 3; 1 2 3; 4 5 6; 4 5 6; 4 5 6]time = [1 1 1 2 2 2 3 3 3]。基本上是一种通过某个整数 X 重复数据行和时间元素的方法(在此注释中给出的情况下 X = 3)。
    • 您将再次使用repmat 并指定您希望重复多少矩阵图块。
    • @m_power:您的方法假设数据单调递增-> 不是很通用的解决方案。请改用Data = repmat(Data,1,10); Data = Data(:);。它也更快。
    【解决方案3】:

    你可以使用 repmat

    interval_size = 10;
    Data = 2*(1:1:1000);
    
    out_data = repmat(Data,interval_size,1);
    out_data = out_data(:)';
    

    【讨论】:

      【解决方案4】:

      示例数据:

      time=1:50
      data=2:2:100
      t2=1:.1:50.9
      

      对于 time=1:n 这很简单:

      data(:,floor(t2))
      

      如果您的原始数据有其他时间尺度,请使用:

      [a,b]=ismember(floor(t2),time)
      data(:,b)
      

      【讨论】:

        猜你喜欢
        • 2014-07-19
        • 1970-01-01
        • 1970-01-01
        • 2019-05-02
        • 1970-01-01
        • 2011-12-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-07
        相关资源
        最近更新 更多