randomly divide vector into 2 parts.
3 views (last 30 days)
Show older comments
i have vector 100000*1 .i want to randomly divide data of it into 80% and 20% and store them into 2 vector.Divide of data must be random.
"non_zero_entry" is total how many entry in the vector.i tried to do this but it show me error "Index exceeds the number of array elements (80000)".
training_data=.8;
tf = false(length(non_zero_entry),1);
tf(1:round(training_data*non_zero_entry)) = true;
tf = tf(randperm(non_zero_entry)); % error occur in this line "Index exceeds the number of array elements (80000)".
dataTraining = index_rating(tf,:);
dataTesting = index_rating(~tf,:);
Thanks in advance for your help.
0 Comments
Accepted Answer
Rik
on 15 Sep 2019
I don't fully understand every step of your code, so I rewrote it:
index_rating=rand(100000,5);%generate example data
training_data=.8;
s=rand(size(index_rating,1),1);
sorted=sort(s);
cutoff=sorted(round(training_data*numel(s)));
tf=s<=cutoff;
dataTraining = index_rating(tf,:);
dataTesting = index_rating(~tf,:);
0 Comments
More Answers (2)
Bruno Luong
on 15 Sep 2019
Edited: Bruno Luong
on 15 Sep 2019
For the record, here is how I would do:
n = size(index_rating,1);
i = randperm(n,round(training_data*n));
dataTraining = index_rating(i,:);
dataTesting = index_rating(setdiff(1:n,i),:);
0 Comments
Bruno Luong
on 15 Sep 2019
Edited: Bruno Luong
on 15 Sep 2019
Always post complete code that can run. don't less us geuss what is the size/class of the inputs
First assumption: non_zero_entry is a integer scalar, then change the allocation to
tf = false(non_zero_entry,1);
Second assumption non_zero_entry is a vector then change
tf = tf(randperm(non_zero_entry));
to
tf = tf(randperm(end))
Similarly correction must be applied for the earlier instruction
tf(1:round(training_data*end)) = true
0 Comments
See Also
Categories
Find more on Statistics and Machine Learning Toolbox 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!