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)
To embed this program on your website, copy the following code and paste it into your website's HTML: