Skip to main content

CKmeans: Optimal Univariate Clustering

Ckmeans clustering is an improvement on 1-dimensional (univariate) heuristic-based clustering approaches such as Jenks. The algorithm was developed by Haizhou Wang and Mingzhou Song (2011) as a dynamic programming approach to the problem of clustering numeric data into groups with the least within-group sum-of-squared-deviations.

Minimising the difference within groups – what Wang & Song refer to as withinss, or within sum-of-squares – means that groups are optimally homogeneous within and the data is split into representative groups. This is useful for visualisation, where one may wish to represent a continuous variable in discrete colour or style groups.

Being a dynamic approach, this algorithm is based on two matrices that store incrementally-computed values for squared deviations and backtracking indexes.

If you do not know the number of clusters, ckmeans_optimal chooses it with the Bayesian Information Criterion (BIC), following Song & Zhong (2020).

Implementation

This library uses the ckmeans Rust crate, by the same author.

All functions accept any one-dimensional array-like input (a NumPy array of any numeric dtype, a list or a tuple), and convert it to float64. They release the GIL during the calculation.

ckmeans(data, k)

Cluster data into k groups with the least within-group sum of squares. Returns a list of float64 arrays, one for each cluster, in ascending order of value. Each cluster is sorted.

If data has fewer than k distinct values, there is one cluster for each distinct value.

breaks(data, k)

Calculate the breaks between k clusters, for labels and legends. Returns one break fewer than the number of clusters.

The lower bounds of the clusters from ckmeans can have many decimal places, which makes them unsuitable for a legend. Rounding them can be too loose (spurious decimal places) or too strict (classes ranging "from x to x"). Each break b is instead the roundest number between the highest value of a cluster (last) and the lowest value of the next cluster (first), so that last < b <= first. It is a multiple of the largest power of ten that has a multiple in that interval; of those multiples, it is the one nearest the midpoint.

This method is based on the visionscarto method of the same name.

ckmeans_optimal(data, k_min=1, k_max=9)

Find the best number of clusters for data, and cluster the data. Use this function when you do not know how many clusters the data has.

The function clusters data for each number of clusters k from k_min to k_max. It then chooses the k with the lowest Bayesian Information Criterion (BIC), which balances how closely the clusters fit the data against the number of clusters. The BIC is that of a Gaussian mixture with one component for each cluster. k_max is capped at the number of distinct values in data.

ckmeans_optimal chooses the same k as the R package Ckmeans.1d.dp. That package reports the negative of the BIC values in OptimalResult.bic.

The default range of 1 to 9 is the same as in the R package Ckmeans.1d.dp. If the data can have more than 9 clusters, set a higher k_max (up to 255).

Returns an OptimalResult, with these attributes:

Attribute Type Content
k int The chosen number of clusters
clusters list of float64 arrays The clusters, as returned by ckmeans
centers float64 array The mean of each cluster
sizes intp array The number of values in each cluster
withinss float64 array The within-cluster sum of squares of each cluster
ks intp array The candidate numbers of clusters
bic float64 array The BIC of each candidate number of clusters

Errors

All functions raise CkmeansError, a subclass of ValueError, if:

  • k (or k_min) is less than 1
  • k, k_min or k_max is greater than 255
  • k is greater than the number of values, or k_min is greater than the number of distinct values
  • k_min is greater than k_max
  • data contains NaN

Numerical limits

  • Infinite values are accepted, but a cluster that contains one has no finite sum of squares. The result is then a partition of the input with no optimality guarantee. ckmeans_optimal returns NaN BIC values for such input and uses k_min.
  • The costs are calculated in float64 from cumulative sums. If the data spans a very large range (for example, values that differ by 1 alongside values of order 1e8), cost differences below float64 resolution are lost. The result can then be sub-optimal by that amount, and equal values can be put in adjacent clusters. breaks then returns the first value of the upper cluster as the break.

Upgrading from 1.0

  • ckmeans_optimal uses version 2.1 of the crate. Version 1.0 chose k_max, or a value near it, for most input. The k and bic values of the result change for most input.
  • ckmeans_optimal is approximately 3.5 times faster for the default range of k.

Upgrading from 0.2

  • Invalid input raises CkmeansError, a subclass of ValueError. Version 0.2 raised RuntimeError, or PanicException for NaN input, k greater than 255 and non-contiguous arrays.
  • breaks uses the method of version 2.0 of the crate, and can return different values. For example, breaks([1.0, 2.0, 3.0, 4.0, 100.0, 101.0, 102.0, 103.0], 2) returns [100.0], not [50.0].
  • The clusters from ckmeans are views of one sorted copy of the input.
  • data and k can be given as keyword arguments.
  • Python 3.11 or later is required.

Install for local development

  1. Ensure that maturin and a recent Rust toolchain are installed
  2. maturin develop --release (you will need to re-run this command if you're hacking on the source and want to e.g. benchmark your changes). uv run rebuilds the extension when the Rust sources change.

Benchmarks

Benchmarks can be run using uv run pytest --benchmark-only.

The benchmarks compare this Rust implementation against ckmeans-1d-dp (C++ implementation) across different data sizes and cluster counts:

  • 110k samples with 5 or 20 clusters
  • 1M samples with 5 or 20 clusters
  • 110k and 1M samples with ckmeans_optimal, for k from 1 to 9

Results are grouped for meaningful comparison between implementations with identical parameters. Benchmark results also generate histogram visualisations saved as SVG files.

Results

ckmeans takes 49 to 54 % less time than ckmeans-1d-dp, and 51 to 57 % less time than the original R package that wraps the same C++ library.

Mean times on an Apple M2 Pro, with Uniform(1, 3) input:

Samples Clusters ckmeans ckmeans-1d-dp 4.3.4.4 R Ckmeans.1d.dp 4.3.5
110k 5 12.4 ms 25.2 ms 28.1 ms
110k 20 48.5 ms 104.6 ms 109.1 ms
1M 5 124.7 ms 260.8 ms 289.8 ms
1M 20 514.5 ms 1011.8 ms 1043.8 ms

The R times are the mean of 20 calls (110k) or 5 calls (1M) of Ckmeans.1d.dp(x, k), measured with system.time. The bench_cpp crate in the ckmeans repository compares the Rust and C++ code without the Python layer, and gives similar results.

ckmeans_optimal takes 44 to 47 % less time than ckmeans-1d-dp and 46 to 47 % less time than R Ckmeans.1d.dp when they choose k from 1 to 9 by BIC:

Samples ckmeans_optimal ckmeans-1d-dp 4.3.4.4 R Ckmeans.1d.dp 4.3.5
110k 36.2 ms 67.9 ms 67.1 ms
1M 345.4 ms 614.6 ms 646.6 ms

The R times are the mean of 20 calls (110k) or 5 calls (1M) of Ckmeans.1d.dp(x, k = c(1, 9)).

Note: The ckmeans-1d-dp Python package only returns indices identifying each cluster to which the input belongs. If you want to cluster your data, you need to do that yourself.

Examples

import numpy as np
from ckmeans import ckmeans

data = np.array([1.0, 2.0, 3.0, 4.0, 100.0, 101.0, 102.0, 103.0])
result = ckmeans(data, 2)
np.testing.assert_array_equal(result[0], [1.0, 2.0, 3.0, 4.0])
np.testing.assert_array_equal(result[1], [100.0, 101.0, 102.0, 103.0])
from ckmeans import breaks

result = breaks([0.12, 0.13, 0.21, 0.24, 0.87, 0.91], k=2)
assert result.tolist() == [0.6]
from ckmeans import ckmeans_optimal

data = [1.0, 1.1, 1.2, 50.0, 51.0, 52.0, 100.0, 101.0, 102.0]
result = ckmeans_optimal(data)
assert result.k == 3
assert result.sizes.tolist() == [3, 3, 3]

License

Blue Oak Model License 1.0.0

Metadata

Release files for ckmeans 1.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ckmeans 1.2.0
File Size Uploaded
ckmeans-1.2.0.tar.gz 25.3 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for ckmeans 1.2.0
File
ckmeans-1.2.0-cp314-cp314t-win_arm64.whl CPython 3.14 CPython 3.14 free-threading Windows ARM64 Details
ckmeans-1.2.0-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
ckmeans-1.2.0-cp314-cp314t-win32.whl CPython 3.14 CPython 3.14 free-threading Windows x86-32 Details
ckmeans-1.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Details
ckmeans-1.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 Details
ckmeans-1.2.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.5+ x86-32 Details
ckmeans-1.2.0-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
ckmeans-1.2.0-cp314-cp314t-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 Details
ckmeans-1.2.0-cp311-abi3-win_arm64.whl CPython 3.11 abi3 Windows ARM64 Details
ckmeans-1.2.0-cp311-abi3-win_amd64.whl CPython 3.11 abi3 Windows x86-64 Details
ckmeans-1.2.0-cp311-abi3-win32.whl CPython 3.11 abi3 Windows x86-32 Details
ckmeans-1.2.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 abi3 Linux glibc 2.17+ x86-64 Details
ckmeans-1.2.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 abi3 Linux glibc 2.17+ ARM64 Details
ckmeans-1.2.0-cp311-abi3-manylinux_2_5_i686.manylinux1_i686.whl CPython 3.11 abi3 Linux glibc 2.5+ x86-32 Details
ckmeans-1.2.0-cp311-abi3-macosx_11_0_arm64.whl CPython 3.11 abi3 macOS 11.0+ ARM64 Details
ckmeans-1.2.0-cp311-abi3-macosx_10_12_x86_64.whl CPython 3.11 abi3 macOS 10.12+ x86-64 Details

Total release size: 4.1 MB

Release files / ckmeans-1.2.0.tar.gz

Download URL ckmeans-1.2.0.tar.gz
Size 25.3 kB
Tags Source
SHA-256 checksum
How to use checksums
cd031397cee2fe4cf4647b8d04635ed6a76b58159009c9b02a17bac1425550f1
BLAKE2b-256 checksum
How to use checksums
71b12060b19d6550a296439fa13d2368d10b42d71136e80415113ea09815a8e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ckmeans-1.2.0-cp314-cp314t-win_arm64.whl

Download URL ckmeans-1.2.0-cp314-cp314t-win_arm64.whl
Size 169.6 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows ARM64
SHA-256 checksum
How to use checksums
281cd9ac4d71153d6f83d85b1ca3c432cfd1cdfa3c1d8255fe56a651d345f681
BLAKE2b-256 checksum
How to use checksums
97d572ef521d2dcb6623ce3b6e4b306b8bb34351494b0697d5564a60e0812b06
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ckmeans-1.2.0-cp314-cp314t-win_amd64.whl

Download URL ckmeans-1.2.0-cp314-cp314t-win_amd64.whl
Size 199.9 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
42a62bf82a5325daf105133ce0e7e848de8987bb4620c3294831d31a89bfbb8c
BLAKE2b-256 checksum
How to use checksums
590939f8d0cd3f4d883814123901ba186de5ef457cd545f4b5ee17fd307e038c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ckmeans-1.2.0-cp314-cp314t-win32.whl

Download URL ckmeans-1.2.0-cp314-cp314t-win32.whl
Size 185.3 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-32
SHA-256 checksum
How to use checksums
61018d5042331a848a1eee61607ac9ad9aca6aa14cc4488b866b679c138cf674
BLAKE2b-256 checksum
How to use checksums
8929769c3caae74f93ae4a54cca344dae96f07c1a61f5351108ea26154c958a7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ckmeans-1.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL ckmeans-1.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 311.1 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
5bda5d6cc988abf4db13b70cb2f38d26841944fbeef1c72fafc59b93e132d30a
BLAKE2b-256 checksum
How to use checksums
21981575b5e44df1abe0e2452cbb44df4916a523f2bad5d237980b13d04ae01a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ckmeans-1.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL ckmeans-1.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 286.2 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
8d58ff6c180391391b4e0995af350e647ab55576b6abdc6fcf42eaa2e8d76cd2
BLAKE2b-256 checksum
How to use checksums
e2ace6729a631af5773a6bc514859b5f204e1d2942fa7072a3d28c4fcfe60880
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ckmeans-1.2.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl

Download URL ckmeans-1.2.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl
Size 328.7 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.5+ x86-32
SHA-256 checksum
How to use checksums
478af56cd95d6d9a85a0c5d79da3b996e0c9fbf9d75836ebe5117ea1298875a2
BLAKE2b-256 checksum
How to use checksums
e2f056b14fd05a6b2d1d22f0e116ccd46be346d4d6f84841b075e3c32e686185
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ckmeans-1.2.0-cp314-cp314t-macosx_11_0_arm64.whl

Download URL ckmeans-1.2.0-cp314-cp314t-macosx_11_0_arm64.whl
Size 265.7 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
86f426c4bb3346447441c1c1009ec3100b0f0ff6eb12ab085b9b888ed2d6fa05
BLAKE2b-256 checksum
How to use checksums
c63d899f785d3e5f33da62e8e248266b6180282f9d6f3b42c73bf38520c53806
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ckmeans-1.2.0-cp314-cp314t-macosx_10_12_x86_64.whl

Download URL ckmeans-1.2.0-cp314-cp314t-macosx_10_12_x86_64.whl
Size 297.7 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
e0299d045636179b5372a8332e67fb672ae1efc66c16fbf15767e41809a4df9e
BLAKE2b-256 checksum
How to use checksums
e41c6b95c7d005f28fe2e6a341f6af56df60f01eb32095330cee38040c0a5cde
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ckmeans-1.2.0-cp311-abi3-win_arm64.whl

Download URL ckmeans-1.2.0-cp311-abi3-win_arm64.whl
Size 172.7 kB
Tags CPython 3.11 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
6021dfbad84c92f54e5d03d2a8c018fd4eb128c66681ee5ff1f65e86ad0d973f
BLAKE2b-256 checksum
How to use checksums
1de97a6252902bc21f5efdb011a9c3918e0aa2c62fa9634773545044dab189b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ckmeans-1.2.0-cp311-abi3-win_amd64.whl

Download URL ckmeans-1.2.0-cp311-abi3-win_amd64.whl
Size 203.1 kB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
30b8223f4ee736e52530eb85931c707c79a757fb100e27c5d66dceaf88805803
BLAKE2b-256 checksum
How to use checksums
012463e77a81aafb40fe2688a68c7b9e6d43a86e9dfc542225a7a420ba46d24d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ckmeans-1.2.0-cp311-abi3-win32.whl

Download URL ckmeans-1.2.0-cp311-abi3-win32.whl
Size 187.7 kB
Tags CPython 3.11 Windows x86-32 abi3
SHA-256 checksum
How to use checksums
8aa6da068482e265d70e019ed739a4ff17f439525106e30ab09fc3f13a5c8c13
BLAKE2b-256 checksum
How to use checksums
5bdba63bd52d91195d94abff9a4ce2a8685b590cd90868e30ab686a93268d91e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ckmeans-1.2.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL ckmeans-1.2.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 312.8 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
62b8e122be039ed5b5ef9fbebdf21b154338d7b5b89c405d322933ccfa95b040
BLAKE2b-256 checksum
How to use checksums
fc592cb37157d539e6fcb56d495b5eeab1425cd8097fd46bd6b64e267c549d77
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ckmeans-1.2.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL ckmeans-1.2.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 288.1 kB
Tags CPython 3.11 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
079ae3ecf27aaafeee586a051456136ecf73d62cb767def0c475730b1ac38af0
BLAKE2b-256 checksum
How to use checksums
827cf8bc8e31dd8d9dfbfbfe0787f2bd8e0325b689ae3a5f32c229616392cd2f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ckmeans-1.2.0-cp311-abi3-manylinux_2_5_i686.manylinux1_i686.whl

Download URL ckmeans-1.2.0-cp311-abi3-manylinux_2_5_i686.manylinux1_i686.whl
Size 331.7 kB
Tags CPython 3.11 Linux glibc 2.5+ x86-32 abi3
SHA-256 checksum
How to use checksums
73ea0ff57b4f03c66669c8d3d6ed04ec5bb812bb0385dc25a8dd33a8d2b8aa6f
BLAKE2b-256 checksum
How to use checksums
4c2688e8d51943178866946b4d94fe855080a3b89a4a43ebef92e8c6bea1dfbc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ckmeans-1.2.0-cp311-abi3-macosx_11_0_arm64.whl

Download URL ckmeans-1.2.0-cp311-abi3-macosx_11_0_arm64.whl
Size 269.6 kB
Tags CPython 3.11 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2694d5ee67aa99f04bf77419e3da8daa2997f907791cc63c2fea4aa35213b19d
BLAKE2b-256 checksum
How to use checksums
e0c67aa13f5368f17cfe8c2efef1c8b1353d1acb4636591ace92776bdcf1d110
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ckmeans-1.2.0-cp311-abi3-macosx_10_12_x86_64.whl

Download URL ckmeans-1.2.0-cp311-abi3-macosx_10_12_x86_64.whl
Size 297.5 kB
Tags CPython 3.11 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
4745b08a14a9094c0bd06ae474aa3abf50a6b9c154d4a931eecb57bda7cb4ff6
BLAKE2b-256 checksum
How to use checksums
beafabe76ae25a6b378adca7d1a579f5703fe4e944c5676712da56915f17cea3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

1.2.0 This release

17 release files

1.0.1

17 release files

1.0.0

17 release files

0.2.10

7 release files

0.2.7

8 release files

0.2.6

8 release files

0.2.5

8 release files

0.2.3

65 release files

0.2.2

65 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page