How I can randomly divide my data

5 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)

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by