Duplicata possible:
Comment puis-je sélectionner au hasard k points parmi N points dans MATLAB?
Disons que j'ai un ensemble de données qui comprend 10 000 lignes de données. Quelle est la meilleure façon de créer un sous-ensemble comprenant 1 000 lignes choisies au hasard?
Vous pouvez utiliser randperm pour cette tâche:
Échantillonnage sans remplacement:
nRows = 10000; % number of rows
nSample = 1000; % number of samples
rndIDX = randperm(nRows);
newSample = data(rndIDX(1:nSample), :);
Échantillonnage avec remplacement:
nRows = 10000; % number of rows
nSample = 1000; % number of samples
rndIDX = randi(nRows, nSample, 1);
newSample = data(rndIDX, :);
Utilisez randperm
en combinaison avec le nombre de lignes. Si x
est votre matrice:
nrows = size(x,1);
nrand = 1000; % Choose 1000 rows
assert(nrand<=nrows, 'You cannot choose more rows than exist in the matrix');
Rand_rows = randperm(nrows, nrand);
xx = x(Rand_rows,:); % Select the random rows from x
Si vous disposez de la boîte à outils de statistiques R2012 +, vous pouvez utiliser échantillon de données .
subset = datasample(data,1000)
subset
sera un sous-ensemble de données sélectionné au hasard composé de 1000 échantillons.
Pour échantillonner sans remplacement, utilisez:
subset = datasample(data,1000,'Replace',false)
Si vous avez une ancienne version de la boîte à outils, vous pouvez utiliser randsample :
rndIdx = randsample(size(data,1),1000,true); % with replacement
subset = samples(rndIdx(1:1000), :);
rndIdx = randsample(size(data,1),1000,false); % without replacement
subset = samples(rndIdx(1:1000), :);
Mais l'utilisation de randsample est plus ou moins la même que la réponse de H.Muster (que j'ai acceptée comme la meilleure car elle ne nécessite aucune boîte à outils).
Remarque: Pour plus d'informations sur la différence entre l'échantillonnage avec remplacement et l'échantillonnage sans remplacement, voir cette page .
Je ne sais pas si vous avez écrit du code jusqu'à présent. Le lien mathworks suivant montre des exemples d'échantillonnage aléatoire. Jetez-y un œil pour trouver des idées.
Également un code ici avec randsample de la boîte à outils de statistiques. Juste une logique et vous devrez peut-être l'ajuster en conséquence.
la matrice m de N lignes extrait un échantillon aléatoire de n lignes de m
Sample = m(randsample(1:N,n),:)
randsample(1:N,n)
Ci-dessus résulte en une séquence de n nombres entiers aléatoires de 1 à N.