1

相互検証のために、ほぼ同じサイズの 5 つのセットにランダムに分割する必要がある大規模なデータセットがあります。以前は喜ん_crossvalind_でセットに分割していましたが、今回はデータのチャンクを一度にこれらのグループに分割する必要があります。

私のデータが次のようになっているとしましょう:

data = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18];

次に、それらを2つのチャンクで5つのグループにランダムに分割します。たとえば、このように

g1 = [3 4], [11 12]  
g2 = [9 10]  
g3 = [1 2], [15 16]  
g4 = [7 8], [17 18]  
g5 = [5 6], [13 14]

いくつかの for ループでこれを行うことができると思いますが、matlab でそれを行うには、はるかにコスト効率の高い方法が必要だと思います :-)

助言がありますか?

4

2 に答える 2

3

セットのランダムな順序付けが必要であると解釈していますが、各セット内では、要素の順序付けは親セットから変更されていません。を使用randpermしてセット数をランダムに並べ替え、要素に線形インデックスを使用できます。

dataElements=numel(data);%# get number of elements
totalGroups=5;
groupSize=dataElements/totalGroups;%# I'm assuming here that it's neatly divisible as in your example
randOrder=randperm(totalGroups);%# randomly order of numbers from 1 till totalGroups
g=reshape(data,groupSize,totalGroups)';             %'# SO formatting
g=g(randOrder,:);

の異なる行はg、異なるグループ化を提供します。

于 2011-04-02T19:46:59.047 に答える
0

配列 (randperm) をシャッフルしてから、連続した等分に分割できます。

data = [10 20 30 40 50 60 70 80 90 100 110 120 130 140 150];
permuted = data(randperm(length(data)));
% padding may be required if the length of data is not divisible by the size of chunks
k = 5;
g = reshape(permuted, k, length(data)/k);
于 2011-04-02T19:46:43.573 に答える