在Matlab中将元素添加到2D时间序列

时间:2017-02-24 09:45:20

标签: arrays matlab append time-series

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

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

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

以下是代码:

    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];

甚至可能是一种更智能的方式来存储时间系列?

3 个答案:

答案 0 :(得分:2)

您也可以使用

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

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

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

答案 1 :(得分:1)

在第三维中使用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

答案 2 :(得分:0)

你想在第三维中连接吗?

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