Random split of a vector of unequal lengths
3 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
Azzi Abdelmalek
2014 年 6 月 25 日
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)
その他の回答 (2 件)
Star Strider
2014 年 6 月 25 日
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 件のコメント
John D'Errico
2014 年 6 月 25 日
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.
参考
カテゴリ
Help Center および File Exchange で Random Number Generation についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!