【问题标题】:Add a element to a 2D time series in Matlab在 Matlab 中将元素添加到二维时间序列
【发布时间】:2017-07-15 02:12:54
【问题描述】:

我有一个非常简单的问题,但我想知道是否有更简单的方法来解决它(它们一定是)。

我有一个 10 x 10 的矩阵,包含双精度。我需要用这些数据点创建一个时间序列。

我这样做的方式如下。我创建了一个 3D 数组,第三维是时间。每天我都会通过将时间维度增加一来在数组中添加新数据。

代码如下:

    TS_updated = zeros(size(TS_Current)+[0,0,1]);
    TS_updated(:,:,1:end-1) = TS_Current;
    TS_updated(:,:,end) = TS_New;

其中 TS_Current 是表示时间序列的现有 3D 数组,而 TS_New 是我需要添加到时间序列中的今天的新数据。

是否有更快的方法来追加最后一个元素,例如使用 2D 表格:

TS_updated = [TS_Current;TS_New];

或者甚至可能是存储时间序列的更聪明的方式?

【问题讨论】:

    标签: arrays matlab append time-series


    【解决方案1】:

    你也可以使用

    TS(:,:,end+1) = TS_new;
    

    如果您打算每天多次扩展系列,您可能还需要预先分配。当达到该限制时,您可以从任意长度和双倍空格开始。

    我可以看到没有明显更好的数据排列方式。您可以将其展平为 100xTime 而不是 10x10xTime,但这取决于它是否有帮助。

    【讨论】:

      【解决方案2】:

      在三维使用cat函数(documentation):

      TS_updated = cat(3, TS_Current, TS_New);
      

      您可以使用

      首先包含错误检查
      % Check dimensions 1 and 2 are consistent first
      if size(TS_Current,1) == size(TS_New,1) && size(TS_Current,2) == size(TS_New,2) 
          % Now concatenate
          TS_updated = cat(2, TS_Current, TS_New);
      else
          error('New time series has incorrect dimensions')
      end
      

      【讨论】:

        【解决方案3】:

        您想在第 3 维中连接吗?

        A=ones(3,3,2)
        B=rand(3,3);
        C=cat(3,A,B)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-21
          • 1970-01-01
          • 1970-01-01
          • 2021-02-15
          • 2012-08-19
          • 2014-10-03
          • 1970-01-01
          相关资源
          最近更新 更多