Domanda

Sono sicuro che l'opposto è stato chiesto molte volte, ma non ho trovato nessun risposte su come generare numeri casuali cattivi.

Voglio scrivere un piccolo programma per l'analisi cluster e vuole generare alcuni punti casuali per il test. Se vorrei solo inserto 1000 punti con coordinate casuali sarebbero stati sparsi in tutto il campo che renderebbe inutile una cluster analysis.

C'è un modo semplice per generare numeri casuali che ammassi di build?

I già pensato o non utilizzando random() ma random()*random() che genera i numeri normalmente distribuite (Penso che ho letto da qualche parte qui su Stack Overflow).

Secondo approccio sarebbe raccogliere alcune zone a caso e eseguire nuovamente la generazione punto in questa zona che naturalmente produrre un cluster in questo settore.

Hai un'idea migliore?

È stato utile?

Soluzione

Se si sta deliberatamente producendo grappoli ben formati (piuttosto che gruppi del tutto casuali), è possibile combinare i due per trovare un centro cluster e quindi mettere un sacco di punti intorno ad esso in una distribuzione normale.

Oltre lavorare in coordinate cartesiane (x, y); è possibile utilizzare un metodo per distribuire radiale punti per un particolare cluster. Scegli un angolo casuale (0-2PI radianti), quindi scegliere un raggio. Si noti che come circonferenza di raggio proporzionale, la distribuzione dell'area sarà più densa vicino al centro - ma la distribuzione a raggio specifico sarà lo stesso. Modificare la distribuzione radiale per produrre un cluster più fitto.

Oppure si potrebbe usare mondo reale derivato dati per le distribuzioni di punti semi-casuali con il clustering naturale. Recentemente ho fatto un po 'di analisi dei cluster geospaziali. Per questo ho usato i dati del mondo reale - baricentri CAP (che formano ammassi naturali in tutto le città); e posizioni del ristorante. Un altro suggerimento:. Si potrebbe usare un catalogo stellare o il catalogo galattico

Altri suggerimenti

Genera poche ancore. numeri casuali vero. Poi generare rumore intorno a loro:

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

questo genererà numeri in cluster, che verranno distribuiti in modo uniforme in lontananza dist.

  • Aggiungi una dimensione supplementare al vostro modello.
  • Disegnare un irregolare (cioè non piatta) superficie.
  • Genera numeri nello spazio esteso.
  • Elimina tutti i numeri che sono su un lato della superficie.
  • Da ogni numero a sinistra, cadere la dimensione aggiuntiva.
:

Forse ho frainteso, ma la biblioteca scientifica GNU (scritto in C) ha molte distribuzioni scritto al suo interno -? Non si poteva scegliere coordinate dalla gaussiana / poisson ecc da quella biblioteca

http://www.gnu.org/ software / GSL / manuale / html_node / Random-numero-Distributions.html

Essi forniscono un semplice esempio con la distribuzione di Poisson dal link, anche.

Se avete bisogno della vostra distribuzione da delimitata (ad esempio coordinata y non inferiore a -1), allora si può ottenere che il campionamento rifiuto dalla distribuzione uniforme nel GSL.

Benedizioni, Tom

Il mio primo pensiero è stato che è possibile implementare il proprio utilizzando un lineare congruenziale generatore e sperimentare i coefficienti, fino a ottenere un periodo abbastanza basso per soddisfare le vostre esigenze. Un coefficiente m veramente basso dovrebbe fare il trucco.

Mi piace anche la tua seconda idea di correre una buona RNG intorno a pochi punti di pre-selezionati per creare cluster. Si potrebbe o specifiche aree di destinazione per i cluster con questo metodo, o generare casualmente quelli pure.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top