Question

Je suis sûr que le contraire a été demandé à plusieurs reprises, mais je ne pouvais pas trouver des réponses sur la façon de générer des nombres aléatoires mauvais.

Je veux écrire un petit programme pour l'analyse de cluster et que vous souhaitez générer des points aléatoires pour tester. Si je voudrais juste insérer 1000 points avec coordonnées aléatoires ils seraient dispersés sur tout le terrain qui ferait une analyse typologique sans valeur.

Y at-il un moyen simple de générer des nombres aléatoires qui amas de construction?

Je l'ai déjà pensé à ne pas utiliser soit random() mais random()*random() qui génère des nombres normalement distribués (je crois avoir lu cela quelque part ici sur Stack Overflow).

Deuxième approche serait choisir quelques zones au hasard et exécutez à nouveau la génération de points dans ce domaine qui de produire bien sûr un groupe dans ce domaine.

Avez-vous une meilleure idée?

Était-ce utile?

La solution

Si vous produisez délibérément des groupes bien formés (plutôt que des grappes complètement aléatoires), vous pouvez combiner les deux pour trouver un centre de cluster, puis lots mis de points autour dans une distribution normale.

fonctionne bien dans cartésiennes coords (x, y); vous pouvez utiliser une méthode radiale pour distribuer des points pour un groupe particulier. Choisissez un angle aléatoire (0-2PI radians), puis choisissez un rayon. Notez que la circonférence est le rayon proportionnel, la distribution des zones sera plus dense à proximité du centre - mais la répartition par rayon spécifique sera le même. Modifier la distribution radiale pour produire un faisceau emballé plus étroitement.

ou vous pouvez utiliser des données dérivées monde réel pour la répartition des points semi-aléatoires avec le regroupement naturel. Récemment, je l'ai fait un peu d'analyse de cluster géospatiale. Pour cela, je l'ai utilisé les données réelles du monde - centroïdes zipcode (qui forment des grappes naturelles autour des villes); et lieux de restauration. Une autre suggestion. Vous pouvez utiliser un catalogue stellaire ou catalogue galactiques

Autres conseils

Générer quelques points d'ancrage. Les vrais nombres aléatoires. Ensuite, générer du bruit autour d'eux:

anchor + dist * (random() - 0.5))

cela va générer des nombres en cluster, qui seront distribués de façon uniforme à une distance dist.

  • Ajoutez une dimension supplémentaire à votre modèle.
  • dessiner une surface irrégulière (à savoir pas plat).
  • Générer des nombres dans l'espace étendu.
  • Supprimer tous les numéros qui sont sur un côté de la surface.
  • De chaque numéro à gauche, déposez la dimension supplémentaire.

Peut-être que j'ai mal compris, mais la gnu bibliothèque scientifique (écrit en c) a de nombreuses distributions, il écrit en dedans - pourriez-vous pas prendre les coordonnées de la gaussienne / etc de cette poisson bibliothèque

http://www.gnu.org/ logiciel / GSL / manuel / html_node / Random-Numéro-Distributions.html

Ils fournissent un exemple simple avec la distribution de Poisson à partir du lien, aussi.

Si vous avez besoin de votre distribution bornée (par exemple y coordonnée pas inférieure à -1), vous pouvez obtenir que par échantillonnage de rejet de la distribution uniforme dans la GSL.

Blessings, Tom

Ma première pensée était que vous pourriez mettre en œuvre votre propre à l'aide d'un générateur congruence linéaire et d'expérimenter les coefficients jusqu'à ce que vous obtenez une période suffisamment bas pour répondre à vos besoins. Un coefficient de m vraiment bas devrait faire l'affaire.

Je aime aussi votre deuxième idée de courir un bon RNG autour de quelques points de pré-sélectionnés pour créer des clusters. Vous pouvez soit les zones cibles spécifiques pour les clusters avec cette méthode, ou ceux générons au hasard aussi bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top