# How I can randomly divide my data

6 visualizaciones (últimos 30 días)
Sehairi K. el 25 de Sept. de 2017
Editada: Jan el 26 de Sept. de 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));
##### 0 comentariosMostrar -2 comentarios más antiguosOcultar -2 comentarios más antiguos

Iniciar sesión para comentar.

Jan el 25 de Sept. de 2017
Editada: Jan el 25 de Sept. de 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 comentariosMostrar 1 comentario más antiguoOcultar 1 comentario más antiguo
Sehairi K. el 25 de Sept. de 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 el 26 de Sept. de 2017
Editada: Jan el 26 de Sept. de 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.

Iniciar sesión para comentar.

### Categorías

Más información sobre Linear Algebra en Help Center y File Exchange.

### Community Treasure Hunt

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

Start Hunting!

Translated by