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(ork_min) is less than 1k,k_minork_maxis greater than 255kis greater than the number of values, ork_minis greater than the number of distinct valuesk_minis greater thank_maxdatacontains 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_optimalreturns NaN BIC values for such input and usesk_min. - The costs are calculated in
float64from cumulative sums. If the data spans a very large range (for example, values that differ by 1 alongside values of order 1e8), cost differences belowfloat64resolution are lost. The result can then be sub-optimal by that amount, and equal values can be put in adjacent clusters.breaksthen returns the first value of the upper cluster as the break.
Upgrading from 1.0
ckmeans_optimaluses version 2.1 of the crate. Version 1.0 chosek_max, or a value near it, for most input. Thekandbicvalues of the result change for most input.ckmeans_optimalis approximately 3.5 times faster for the default range ofk.
Upgrading from 0.2
- Invalid input raises
CkmeansError, a subclass ofValueError. Version 0.2 raisedRuntimeError, orPanicExceptionfor NaN input,kgreater than 255 and non-contiguous arrays. breaksuses 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
ckmeansare views of one sorted copy of the input. dataandkcan be given as keyword arguments.- Python 3.11 or later is required.
Install for local development
- Ensure that
maturinand a recent Rust toolchain are installed 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 runrebuilds 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, forkfrom 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 32 to 42 % less time than ckmeans-1d-dp, and 37 to 45 % 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 | 16.0 ms | 25.2 ms | 28.1 ms |
| 110k | 20 | 59.7 ms | 102.9 ms | 109.1 ms |
| 1M | 5 | 167.3 ms | 257.2 ms | 289.8 ms |
| 1M | 20 | 660.3 ms | 974.4 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 24 % less time than ckmeans-1d-dp and 29 % 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 | 47.6 ms | 62.6 ms | 67.1 ms |
| 1M | 458.0 ms | 609.0 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
Metadata
Release files for ckmeans 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ckmeans-1.1.0.tar.gz | 25.2 kB | Details |
Built distributions (wheels)
Total release size: 3.9 MB
Release files / ckmeans-1.1.0.tar.gz
| Download URL | ckmeans-1.1.0.tar.gz |
|---|---|
| Size | 25.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4a72602f677679dcb323ccf14efbc3fc3b9482ab9c6046773cb69fc108632257
|
|
BLAKE2b-256 checksum How to use checksums |
415bc8fafd5b5139474fe591bf4bc15376f5642bd3bf8ddccb1a4107ab4571cf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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.1.0-cp314-cp314t-win_arm64.whl
| Download URL | ckmeans-1.1.0-cp314-cp314t-win_arm64.whl |
|---|---|
| Size | 165.9 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows ARM64 |
|
SHA-256 checksum How to use checksums |
512bfcb7326bc1f43989e32390f35dda44d87af24f572514f668cda9dfe581f8
|
|
BLAKE2b-256 checksum How to use checksums |
ed452ef380f13d47feceafaf3f8ecb4f61d771495dd849c13f3e960971ad00ef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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.1.0-cp314-cp314t-win_amd64.whl
| Download URL | ckmeans-1.1.0-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 173.7 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2a37a86824b43ef4a1581fc3af46cc271bd7d7908bae8d44a1c076cd8cc7f985
|
|
BLAKE2b-256 checksum How to use checksums |
a4259d1b13597ca2f6f2cad38dfc2a4d77c313e53e20b4579d697bb89ceb4e70
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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.1.0-cp314-cp314t-win32.whl
| Download URL | ckmeans-1.1.0-cp314-cp314t-win32.whl |
|---|---|
| Size | 162.1 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-32 |
|
SHA-256 checksum How to use checksums |
1a09dc8667328d5c98bfb159b2638729a4b7d98958a65287980cc8ddbacb089d
|
|
BLAKE2b-256 checksum How to use checksums |
04d8835a4a855e8f04444ff659133c8183cfe5dff2be0a3b2c62f9ce60f8a344
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | ckmeans-1.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 289.6 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
2cadf6cf10c352377a609098787a400dd7fb828352c3f8ccd11136e158aecb1e
|
|
BLAKE2b-256 checksum How to use checksums |
c2d2eb123f7f829274e4a0b1d4cecd24abb2b49fee55e49d0c3629c524354d94
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | ckmeans-1.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 285.0 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
413facf26bd82f9e461610b014f9d5e80f5bca8f1a3decc747a73289f39f6299
|
|
BLAKE2b-256 checksum How to use checksums |
ea5c601c43a8934391a952f7fffe39d8c846c25a9ecd9ad84133d68a5645c6ba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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.1.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl
| Download URL | ckmeans-1.1.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl |
|---|---|
| Size | 307.9 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.5+ x86-32 |
|
SHA-256 checksum How to use checksums |
f92b875b6f4f32141967f3d1150ee2b17a7a487ca15125659122df2c23e00286
|
|
BLAKE2b-256 checksum How to use checksums |
6211c22d8fd1e82bafdaa003ed23b8dfe5da657e0b353f24e5d5975181dd3fe8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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.1.0-cp314-cp314t-macosx_11_0_arm64.whl
| Download URL | ckmeans-1.1.0-cp314-cp314t-macosx_11_0_arm64.whl |
|---|---|
| Size | 262.0 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
c39ae4d36c7dff2c2a2c295b662b2567e1d6429ebcb94639a7fe682d349ee340
|
|
BLAKE2b-256 checksum How to use checksums |
f768f2fa8a13e1f87867962a696c7b6759d8e63cdc0859d58eae1d6fa9e09478
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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.1.0-cp314-cp314t-macosx_10_12_x86_64.whl
| Download URL | ckmeans-1.1.0-cp314-cp314t-macosx_10_12_x86_64.whl |
|---|---|
| Size | 273.0 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
3e649f534264e5c902814ae1bce2328991c3700a274809c7c2fa4eebcd3ae0c4
|
|
BLAKE2b-256 checksum How to use checksums |
5c1c18efb7729cb450c4bf4577697a8433618be72f93f810a013fd1e34e71b7e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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.1.0-cp311-abi3-win_arm64.whl
| Download URL | ckmeans-1.1.0-cp311-abi3-win_arm64.whl |
|---|---|
| Size | 169.2 kB |
| Tags | CPython 3.11 Windows ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
8a1320b1d19cf72aa152d85774e1772b7bae94a51d2c3bb5e28c6ea47700b45e
|
|
BLAKE2b-256 checksum How to use checksums |
edf73e4474d4581da0db17b144f2abe0659ec9576f636f1645f6fa2005aa614c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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.1.0-cp311-abi3-win_amd64.whl
| Download URL | ckmeans-1.1.0-cp311-abi3-win_amd64.whl |
|---|---|
| Size | 176.8 kB |
| Tags | CPython 3.11 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
8eb42de4c5feae9e336e7b22cd220ff9b27f72d9ea3970090b29128b9f60fa25
|
|
BLAKE2b-256 checksum How to use checksums |
5b615ede01c2b01e6d28345752b2e637aeed55c9b0d517e5ecee6901febe3b61
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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.1.0-cp311-abi3-win32.whl
| Download URL | ckmeans-1.1.0-cp311-abi3-win32.whl |
|---|---|
| Size | 164.8 kB |
| Tags | CPython 3.11 Windows x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
66201ffcb0f0f9b85bf06becb7b6621ff72a5a001bd8350ce480cfb5bdcac735
|
|
BLAKE2b-256 checksum How to use checksums |
1f04dc70c6e1d4be386f1813cd47a0d02746090bd2db7c32137425c0fe2fe673
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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.1.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | ckmeans-1.1.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 291.3 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
82bb1440f90ec1566799ed39d710c43ef2a94f73e687e4aee036be84a17d3229
|
|
BLAKE2b-256 checksum How to use checksums |
82b75609a351238ab6700b13ec92086bc0e903d59ca272836ef2fc3c9a2ec6db
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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.1.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | ckmeans-1.1.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 286.3 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
66c16d8c7fe036cd32832da3711f72631b1f9e41ebb083dbd65a5c959992b443
|
|
BLAKE2b-256 checksum How to use checksums |
5bb73ef9591d81b80abca75b01b580f6f1ebbb3916e54ce736fa4cca3da6c2fb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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.1.0-cp311-abi3-manylinux_2_5_i686.manylinux1_i686.whl
| Download URL | ckmeans-1.1.0-cp311-abi3-manylinux_2_5_i686.manylinux1_i686.whl |
|---|---|
| Size | 310.8 kB |
| Tags | CPython 3.11 Linux glibc 2.5+ x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
f2c7667086a38a81fdb77bf6a741372ca2585d2c4cef9c4aa261dd5c2f67b7ef
|
|
BLAKE2b-256 checksum How to use checksums |
f3afd8708403cc49512153642d04626810c4cf050865cd9a0ca0c2baf04d8f81
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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.1.0-cp311-abi3-macosx_11_0_arm64.whl
| Download URL | ckmeans-1.1.0-cp311-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 265.9 kB |
| Tags | CPython 3.11 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
78d9f43a164cce2adc140af2b34ab0ebea2dae08f9d34e881da258d19591efd8
|
|
BLAKE2b-256 checksum How to use checksums |
5f309000a30c1675a5d40e9afdceb3a17a18bd46e8e4f59455e42d4d2bb9fd0c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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.1.0-cp311-abi3-macosx_10_12_x86_64.whl
| Download URL | ckmeans-1.1.0-cp311-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 273.2 kB |
| Tags | CPython 3.11 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
33974e2ad6ff6401218d02ac03f450a820e529ad90d8707eb71d1a460cbd1a02
|
|
BLAKE2b-256 checksum How to use checksums |
65ae242909b28fff5b50caf0e89c0e3b47c3d1877a50f146bfee5bbbad3be839
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","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}
|