Arrays 创建元素数组的非重叠拆分

Arrays 创建元素数组的非重叠拆分,arrays,matlab,time-series,Arrays,Matlab,Time Series,我有一个数据数组X,其中包含N时间记录的元素数。所以元素数组代表一个时间序列。我想分割时间序列以创建固定长度的非重叠序列L=500。这可以视为窗口大小。手动操作是非常乏味的,我在下面试着这么做。另一个问题是,X中的元素可以具有不同的长度,即,N可以有90000个元素,然后又可以有1400个元素。但是N>L。我如何才能为所有不同的X创建长度为L的序列,这种优雅的方式适用于所有长度的X?这就是我试图做的,但在计算中迷失了方向。我将感谢你的帮助 N = 90000; %this varies for

我有一个数据数组
X
,其中包含
N
时间记录的元素数。所以元素数组代表一个时间序列。我想分割时间序列以创建固定长度的非重叠序列
L=500
。这可以视为窗口大小。手动操作是非常乏味的,我在下面试着这么做。另一个问题是,
X
中的元素可以具有不同的长度,即,
N
可以有90000个元素,然后又可以有1400个元素。但是
N>L
。我如何才能为所有不同的
X
创建长度为
L
的序列,这种优雅的方式适用于所有长度的
X
?这就是我试图做的,但在计算中迷失了方向。我将感谢你的帮助

N = 90000;  %this varies for different data X

L = 500; % this is fixed
X = rand(N,1);
nSplits = N/L;

%Worked out example
X1 = X(1:L,:);
X2 = X(L+1:2L,:);
X3 = X(2L+1:2L+1+L,:); %AND SO ON TILL nSplit number of data vectors are created from X

您可以使用
mat2cell
拆分向量

N = 9023;  %this varies for different data X
L = 500; % this is fixed
X = rand(N,1);
nSplits = ceil(N/L); % we need nSplit segments
sz=L*ones(nSplits,1); % assume all are full, sizes for the segments
sz(end)=N-(nSplits-1)*L %Fix size of last one, in case less than L are left over
Y=mat2cell(X,sz); %Split it