J'ai un très grand tableau 2D qui ressemble à ceci:
a=
[[a1, b1, c1],
[a2, b2, c2],
...,
[an, bn, cn]]
En utilisant numpy, existe-t-il un moyen simple d'obtenir un nouveau tableau 2D avec, par exemple, 2 lignes aléatoires du tableau initial a
(sans remplacement)?
par exemple
b=
[[a4, b4, c4],
[a99, b99, c99]]
Réponses:
Mettre en place pour un cas général:
Pour non remplacement (numpy 1.7.0+):
Je ne pense pas qu'il existe un bon moyen de générer une liste aléatoire sans remplacement avant la 1.7. Vous pouvez peut-être configurer une petite définition qui garantit que les deux valeurs ne sont pas les mêmes.
la source
np.random.choice
, et qui estnp.random.permutation(A.shape[0])[:2]
, en fait, ce n'est pas génial, mais c'est ce qui se passenp.random.choice
en ce moment ... ou si vous ne vous souciez pas de changer votre tableau en place,np.random.shuffle
C'est un ancien article, mais c'est ce qui fonctionne le mieux pour moi:
changez le replace = False en True pour obtenir la même chose, mais avec remplacement.
la source
replace=False
paramètre ajouté àchoice
.Une autre option consiste à créer un masque aléatoire si vous souhaitez simplement sous-échantillonner vos données d'un certain facteur. Dites que je veux sous-échantillonner à 25% de mon ensemble de données d'origine, qui est actuellement contenu dans le tableau
data_arr
:Vous pouvez désormais appeler
data_arr[mask]
et renvoyer ~ 25% des lignes, échantillonnées au hasard.la source
replace = False
si vous ne voulez pas d'échantillonnage avec remplacement.data_arr
. Dans mon exemple, environ 25% des positions seront aléatoiresTrue
et ces positions sont échantillonnéesdata_arr
.C'est une réponse similaire à celle fournie par Hezi Rasheff, mais simplifiée pour que les nouveaux utilisateurs de python comprennent ce qui se passe (j'ai remarqué que de nombreux nouveaux étudiants en science des données récupèrent des échantillons aléatoires de la manière la plus étrange car ils ne savent pas ce qu'ils font en python).
Vous pouvez obtenir un certain nombre d'indices aléatoires de votre tableau en utilisant:
Vous pouvez ensuite utiliser le découpage avec votre tableau numpy pour obtenir les échantillons à ces indices:
Cela vous permettra d'obtenir le nombre spécifié d'échantillons aléatoires à partir de vos données.
la source
Je vois que la permutation a été suggérée. En fait, il peut être composé d'une seule ligne:
la source
Si vous avez besoin des mêmes lignes mais juste d'un échantillon aléatoire, alors,
Ici, x doit être un 'int' définissant le nombre de lignes que vous souhaitez sélectionner au hasard.
la source
old_array
est une séquence ou un ensemble, pas un tableau numpy [lien] ( docs.python.org/3/library/random.html#functions-for-sequences )Si vous souhaitez générer plusieurs sous-ensembles aléatoires de lignes, par exemple si vous faites RANSAC.
la source