{
const nIter = 10;
for(let i = 0; i < nIter; i++) {
data.forEach(d => {
d.cluster = d3.scan(centroids, (a, b) => distance(a, d) - distance(b, d));
});
d3.nest()
.key(d => d.cluster)
.sortKeys(d3.ascending)
.entries(data)
.forEach(n => {
let cx = n.values.map(v => v.petalWidth).reduce((a, b) => a + b) / n.values.length
let cy = n.values.map(v => v.petalLength).reduce((a, b) => a + b) / n.values.length
centroids[+n.key].petalWidth = cx;
centroids[+n.key].petalLength = cy;
});
update(svg);
yield md`Iteration: ${await Promises.delay(1000, i + 1)} / ${nIter}`;
}
}