Il y a quelque temps, j'ai utilisé un outil de type seq pour imprimer une séquence de nombres générés pseudo-aléatoires sur stdout. Vous pouvez spécifier une plage, une graine et le nombre d'échantillons et bien plus encore.
Je viens d'oublier le nom de cet outil. Quelqu'un peut m'aider?
Peut-être connaissez-vous même un outil plus avancé qui, par exemple, prend en charge différentes distributions de probabilité ou même la génération d'une séquence de mots aléatoires sous différents alphabets et distributions de longueur / caractère.
shell
command-line
maxschlepzig
la source
la source
Si cela ne vous dérange pas d'écrire un petit script pour faire ce dont vous avez besoin, je vous recommande de le faire dans R , le système de statistiques open-source.
Par exemple, considérez ce one-liner pour obtenir une liste de 100 nombres distribués en gaussien:
Décomposons cela.
La
R
commande standard vous amène dans un environnement de programmation interactif, ce qui est bien si vous essayez de savoir comment faire quelque chose à la main ou si vous construisez quelque chose de manière incrémentielle, mais d'après votre question, il semble que vous ayez juste besoin d'une liste de nombres pour envoyer à un autre programme. Donc, à la place, nous utilisonsRscript
, qui se comporte plus comme un interpréteur de script Unix traditionnel: vous pouvez lui passer le nom d'un fichier contenant un script R, ou utiliser l'-e
indicateur standard pour passer tout le texte du programme sur la ligne de commande.rnorm()
est la fonction R pour obtenir une liste de nombres aléatoires avec la distribution "normale" ou gaussienne. Il prend jusqu'à trois paramètres, seul le premier est requis, combien de nombres vous voulez. Nous avons demandé 100. En prenant les valeurs par défaut pour les deux autres paramètres facultatifs, nous obtenons une moyenne de 0 et un écart-type de 1.L'arithmétique après cela montre juste une fonctionnalité intéressante du langage R: vous pouvez faire de l'arithmétique sur des tables de données entières, des matrices, etc., tout aussi facilement qu'une valeur scalaire dans un langage plus typique. J'ai multiplié toutes les valeurs générées par 100 et j'y ai ajouté 100, juste parce que je le peux. Parce que R est un langage de programmation à part entière, il n'y a aucune limite à ce que vous pourriez faire avec cette liste de nombres. C'est l'avantage d'utiliser un tel système au lieu d'une commande à usage fixe comme
jot
.Nous transmettons le résultat de cette opération précédente à la
write()
fonction, qui écrit les données dans un fichier par défaut, mais nous l'avons remplacé en transmettant une chaîne vide pour le deuxième paramètre, le nom du fichier, de sorte qu'il écrit le tableau dans le terminal à la place. Le paramètre suivant,,1
indique simplement que nous voulons notre sortie au format à colonne unique.R a de nombreuses autres fonctions de génération de nombres aléatoires intégrées au système de base. Par exemple, nous pouvons imiter la
jot
commande dans la réponse de lcpriani avec ce script:Ici, nous utilisons
runif()
pour obtenir 10 nombres aléatoires uniformément distribués de 12 à 27. Commernorm()
, que nous avons utilisé ci-dessus, cette fonction renvoie des valeurs à virgule flottante, nous devons donc lesround()
affecter à leurs valeurs entières les plus proches avant de les écrire à l'écran.R dispose également d'un riche ensemble de modules complémentaires dans CRAN , un référentiel de packages modélisé sur le CPAN de Perl. Celui qui pourrait vous intéresser est simplement appelé random , qui sert d'interface à random.org , un service qui renvoie de vrais nombres aléatoires générés à partir du bruit atmosphérique.
R est un environnement de programmation complet, il se peut donc que vous n'ayez pas réellement besoin de sortir vos numéros de R au format texte. Vous pourrez peut-être résoudre votre problème entièrement dans R. Essayez-le.
la source
jot
commande de lcpriani à la réponse ci-dessus. Quant aux valeurs limites pourrnorm()
, ce n'est pas ainsi que fonctionne la distribution normale. Si vous prenez la moyenne par défaut de 0 et SD de 1, alors 1000 est toujours une valeur de retour possible, c'est juste extrêmement improbable. R vous permettrait d'écrire quelque chose qui bloquerait les valeurs pour supprimer des choses en dehors d'une plage donnée, mais vous abuseriez probablement de la distribution normale.