Effacer les filtres
Effacer les filtres

How I can randomly divide my data

3 vues (au cours des 30 derniers jours)
Sehairi K.
Sehairi K. le 25 Sep 2017
Modifié(e) : Jan le 26 Sep 2017
I have a matrix X with size nxm, How I can choose randomly 70 percent of this data and put it in matrix A and the rest in matrix B. I have already selected the 70% (according to rows) using the 'datasample' function, is there any tip to select the rest 30% of the data with there indices
[n,m]=size(X);
[A,idx] = datasample(X,round(0.7*n));
Thanks in advance for your help

Réponse acceptée

Jan
Jan le 25 Sep 2017
Modifié(e) : Jan le 25 Sep 2017
[A, idxA] = datasample(X, round(0.7*n));
idxB = 1:n;
idxB(idxA) = [];
B = X(idxB);
This is slightly faster than:
idxB = setdiff(1:n, idxA);
  3 commentaires
Sehairi K.
Sehairi K. le 25 Sep 2017
I tride also that
row_idx = randperm(round(0.7*n))';
A_Idx = logical(zeros(size(X,1),1));
A_Idx(row_idx) = true;
B_Idx = ~A_Idx;
A_Data = Data(A_Idx,:);
B_Data = Data(B_Idx,:);
But I think your code is more optimized
Jan
Jan le 26 Sep 2017
Modifié(e) : Jan le 26 Sep 2017
In the 2nd line the vector 1:n is created, and in the third line the indices used to create A are removed, such that you get the indices required for B.
The approach with randperm:
row_idx = randperm(n, round(n * 0.7)); % 2 inputs!
A_idx = false(n, 1); % logical(zeros()) wastes time
A = X(A_idx, :);
B = X(~A_idx, :);
I assume that this is faster than with datasample and the index vector.

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by