brython start-up
Brython template to show brython snippets
HTML
<script src="https://www.brython.info/src/brython_dist.js"></script>
<script type="text/python">
from math import sqrt
from random import randint
from browser import document as doc
import math
class KMeans:
def __init__(self, x, y, n_clusters = 1, limit = 10):
self.x = x
self.x_min = min(x)
self.x_max = max(x)
self.y = y
self.y_min = min(y)
self.y_max = max(y)
self.n_clusters = n_clusters
self.limit = limit
self._init_centroids()
self.iterations = 0
def _init_centroids(self):
self.x_centroids = []
self.y_centroids = []
self.colors = []
for i in range(self.n_clusters):
self.x_centroids.append(randint(self.x_min, self.x_max))
self.y_centroids.append(randint(self.y_min, self.y_max))
r = randint(0,255)
g = randint(0,255)
b = randint(0,255)
color = 'rgb({0},{1},{2})'.format(r, g, b)
self.colors.append(color)
self._assign_centroids()
def _assign_centroids(self):
self.c = []
# Maximum possible distance to a centroid
dmax = sqrt((self.x_min - self.x_max)**2 +
(self.y_min - self.y_max)**2)
for xi, yi in zip(self.x, self.y):
cluster = 0
d0 = dmax
for i in range(self.n_clusters):
d = sqrt((xi - self.x_centroids[i])**2 +
(yi - self.y_centroids[i])**2)
if d < d0:
cluster = i
d0 = d
self.c.append(cluster)
def _recalculate_centroids(self):
self._x_centroids = self.x_centroids[:]
self._y_centroids = self.y_centroids[:]
for n in range(self.n_clusters):
x0 = 0
y0 = 0
cont = 0
for i, c in enumerate(self.c):
if c == n:
cont += 1
...