Random split of a vector of unequal lengths
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Adib Zaman
il 25 Giu 2014
Modificato: Image Analyst
il 25 Giu 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 Commenti
Risposta accettata
Azzi Abdelmalek
il 25 Giu 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)
Più risposte (2)
Star Strider
il 25 Giu 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 Commenti
John D'Errico
il 25 Giu 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.
Vedere anche
Categorie
Scopri di più su Random Number Generation in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!