创建元素数组的非重叠拆分
Posted
技术标签:
【中文标题】创建元素数组的非重叠拆分【英文标题】:Create non-overlapping split of an array of elements 【发布时间】:2020-06-20 18:48:31 【问题描述】:我有一个数据数组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
【问题讨论】:
【参考方案1】:您可以使用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
【讨论】:
以上是关于创建元素数组的非重叠拆分的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据框拆分为与 R 大小相同的元素,由另一个大小重叠,保留每个元素?