finding sub sequences of a data set
Show older comments
clc
clear
ts = xlsread('SwedishLeaf_TRAIN.xlsx');
l=length(ts);
for i = 1:500
p=ts(i,:)
for ii = 1:129
subSequence(ii,:) = p((ii-1)*30+ 1:ii*30);
end
I used the above code for finding the subsequences,but it not working.How can I find the subsequence of this.
4 Comments
Star Strider
on 8 Nov 2019
How do you define ‘subsequence’?
Silpa K
on 8 Nov 2019
Star Strider
on 8 Nov 2019
You need to describe in detail what your data are, and what you want to do.
Silpa K
on 8 Nov 2019
Answers (1)
Ajay Pattassery
on 11 Nov 2019
I assume you want to extract a sub-vector of length 30 from each row. But the total length of the column is 129 which is not divisible by 30. Hence the 5th sub-vector will take 21 elements from the second row and it goes on.
subsequence = (reshape(ts',30,[]))'
If you have a constraint to keep the column length 129 and wish to have sub-parts elements from the same row together, you could split the matrix into two parts. One exactly divisible by 30.
ts1 = ts(:,1:120);
Subsequence1 = (reshape(ts1',30,[]))';
Subsequence2 = ts(:,121:end);
Here Subsequence1 will be 2000x30 and Subsequence2 will have the remaining elements of each row.
9 Comments
Silpa K
on 11 Nov 2019
Ajay Pattassery
on 11 Nov 2019
Edited: Ajay Pattassery
on 11 Nov 2019
please post the error message you are getting when using
subsequence = (reshape(ts',30,[]))'
Note, the transpose operator " ' " used in the above code.
Also post the output of
size(ts)
Silpa K
on 11 Nov 2019
Silpa K
on 11 Nov 2019
Image Analyst
on 11 Nov 2019
So what would you LIKE to do when you have only a partial set (not the full 30)?
Silpa K
on 11 Nov 2019
Ajay Pattassery
on 12 Nov 2019
1.So say your row comprises of 40 numbers ([1 2 . . . 40]), you want two subsequence.
Seq1 = [1 2 . . . 30] and Seq2 = [31 32 . . . 40], am I right?
2. You can not store the subsequence in a matrix as you were doing above since the subsequece length is not fixed. If the order of the subsequence does not matters you could try my second suggestion in the above answer. (Split the matrix into two, one with number of coulumns equals to mulitple of 30 and second matrix with remaining elements)
Walter Roberson
on 12 Nov 2019
buffer() from the signal processing toolbox is useful. But otherwise mat2cell()
L = length(Ts1);
BL = 30;
if mod(L, BL)
Sequences = cell2mat(Ts1, 1, [BL * ones(1, floor(L/BL)), mod(L,BL)]);
else
Sequences = cell2mat(Ts1, 1, BL * ones(1, floor(L/BL)));
end
Silpa K
on 12 Nov 2019
Categories
Find more on Startup and Shutdown in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!