Random split of a vector of unequal lengths
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Adib Zaman
el 25 de Jun. de 2014
Editada: Image Analyst
el 25 de Jun. de 2014
How can I split a vector in k unequal subsets? For example, if I have 200 data, a random split might give us 63, 95 and 150. That is 1:63, 64:95, 96:150 and 151:200.
Apology for cross postings.
0 comentarios
Respuesta aceptada
Azzi Abdelmalek
el 25 de Jun. de 2014
k=4
v=1:200
m=numel(v);
idx=unique([randperm(m-2,k)+1 m]);
idx0=[1 idx(1:end-1)+1];
out=arrayfun(@(ii,jj) v(ii:jj),idx0,idx,'un',0);
celldisp(out)
Más respuestas (2)
Star Strider
el 25 de Jun. de 2014
One way to do it:
A = 1:200;
ndiv = 3; % NUMBER OF SUBMATRICES
idx = sort([1 randperm(length(A)-2, ndiv-1)+1 length(A)+1])
for k1 = 1:length(idx)-1
R{k1} = A(idx(k1):idx(k1+1)-1);
end
The logic guarantees that every element of R has at least two elements. Choose the number of sub-matrices with ndiv.
0 comentarios
John D'Errico
el 25 de Jun. de 2014
I don't see what is wrong with simply choosing k-1 values randomly between the min and max. Those points define a partition as you desire.
Ver también
Categorías
Más información sobre Random Number Generation 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!