import numpy as np
from sklearn.cluster import KMeans
from math import log
from itertools import groupby

bits = "0000000011011010011100000110000001111110100111110011111100000000000111011111111011111011111000000101100011111100000111110011101100000100000"


import numpy as np
from sklearn.cluster import KMeans

# your run-length lists (example)
ones_runs = np.array([len(list(v)) for k, v in groupby(bits.strip('0')) if k == '1'])
zeros_runs = np.array([len(list(v)) for k, v in groupby(bits.strip('0')) if k == '0'])

def kmeans_1d(values, k, random_state=0):
    X = values.reshape(-1,1).astype(float)
    km = KMeans(n_clusters=k, init='k-means++', n_init=50, random_state=random_state)
    km.fit(X)
    centers = np.sort(km.cluster_centers_.ravel())
    labels = km.labels_
    return centers, labels, km.inertia_

# run for ones (k=2) and zeros (k=3)
centers_ones, labels_ones, inertia_ones = kmeans_1d(ones_runs, 2, random_state=42)
centers_zeros, labels_zeros, inertia_zeros = kmeans_1d(zeros_runs, 3, random_state=42)

print("ones centers:", centers_ones)

print("zeros centers", centers_zeros)

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: