2017-06-04 4 views
-3

Angenommen, ich möchte 4 Cluster von Punkten nehmen. Jeder Cluster kann innerhalb eines gegebenen Satzes von x-y-Koordinaten sein. Jeder Punkt in einem Cluster ist ein zufällig generierter Punkt.Wie erzeugt man eine Menge von zufälligen Punkten innerhalb einer gegebenen (x, y) -Koordinate in einer x-y-Ebene?

Diese Cluster werden als Eingabe für mein K-Means-Clusterproblem dienen. Wie mache ich es mit Python?

+1

Haben Sie schon etwas probiert? – Mureinik

+0

Ist die von Ihren Punkten begrenzte Fläche regelmäßig in der Natur? –

+0

x = random(), y = random(), mache eine for-Schleife und speichere sie in einer Liste. – Seraf

Antwort

1

Dies könnte Ihnen einige Ideen:

from random import random 
import math 

def rand_cluster(n,c,r): 
    """returns n random points in disk of radius r centered at c""" 
    x,y = c 
    points = [] 
    for i in range(n): 
     theta = 2*math.pi*random() 
     s = r*random() 
     points.append((x+s*math.cos(theta), y+s*math.sin(theta))) 
    return points 

Diese Funktion auf verschiedene Weise verwendet werden können, zum Beispiel:

def rand_clusters(k,n,r, a,b,c,d): 
    """return k clusters of n points each in random disks of radius r 
where the centers of the disk are chosen randomly in [a,b]x[c,d]""" 
    clusters = [] 
    for _ in range(k): 
     x = a + (b-a)*random() 
     y = c + (d-c)*random() 
     clusters.extend(rand_cluster(n,(x,y),r)) 
    return clusters 

Ein typisches alle wie

clusters = rand_clusters(4,50,0.3,0,1,0,1) 

aussehen würde Dies erzeugt 4 Cluster der Größe 50 mit dem Radius 0.3 mit zufällig ausgewählten Zentren in der Einheitsquadrat. Punkte von einem typischen Lauf:

enter image description here

+0

Danke. Das hat geholfen. – shreyamondal

0

Wenn Sie Daten erzeugen mit

min + (max - min) * random() 

Dann werden sie zwischen min und max.

Tun Sie dies für x und y und für jeden Cluster.

Verwandte Themen