Создать неперекрывающееся разбиение массива элементов - PullRequest
0 голосов
/ 08 марта 2020

У меня есть массив данных X, который содержит N количество элементов, записанных во времени. Таким образом, массив элементов представляет собой временной ряд. Я хочу разделить временной ряд, чтобы создать непересекающиеся последовательности фиксированной длины L=500. Это можно рассматривать как размер окна. Делать это вручную очень утомительно, что я пытался сделать ниже. Другая проблема состоит в том, что элементы в X могут иметь различную длину, т. Е. N может иметь 90000 элементов, затем снова может иметь 1400 элементов. Но N >L. Как я могу создать последовательности длины L для всех различных X элегантным способом, который работает для всех длин 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 Ответ

1 голос
/ 08 марта 2020

Вы можете использовать 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
...