Skip to content


Repository files navigation

# knor for Python


These are Python 2.7+ and Python 3 bindings for the standalone
machine in-memory portion of the clustering NUMA Optimized Routines. See the
full C++ library for details:

## Supported OSes

The `knor` python package has been tested on the following OSes:
- Mac OSX Sierra, Mojave
- Ubuntu LTS 14.04, 16.04, 18.04
- Debian Linux

## Python Dependencies

- Numpy: `pip install -U numpy`
- Setuptools: `pip install -U setuptools`
- pybind11: `pip install -U pybind11`

## Mac Installation

pip install knor

## Linux installation

### Best Performance configuration

For the best performance make sure the `numa` system package is installed via

apt-get install -y libnuma-dbg libnuma-dev libnuma1

Then simply install the package via pip:

pip install knor

## Installation Errors


  File “/Library/Python/2.7/site-packages/pip/utils/”, line X, in
      % (command_desc, proc.returncode, cwd))
      InstallationError: Command “python egg_info” failed with error
      code 1 in /private/tmp/pip-build-vaASFl/knor/

### Solution

Update your `python` version to at least `2.7.10`


    In file included from knor/cknor/libkcommon/clusters.cpp:23:
    knor/cknor/libkcommon/util.hpp:29:10: fatal error: ‘random’ file not found
    #include <random>
    1 error generated.
    error: command ‘/usr/bin/clang’ failed with exit status 1
### Solution
This usually occurs on Mac when your Xcode and Xcode command line tools are out of
date. Update then to at least Version 8


unable to execute 'x86_64-linux-gnu-gcc': No such file or directory
  error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

### Solution
Install the `gcc` compiler via `apt-get install build-essential`


 fatal error: Python.h: No such file or directory compilation terminated.

### Solution
Install the development headers for the version on Python you intend to install knor e.g

apt-get install python-dev  # for python2.x installs
apt-get install python3-dev  # for python3.x installs

fatal error: 'pybind11/pybind11.h' file not found
#include <pybind11/pybind11.h>
ImportError: No module named pybind11

### Solution

This occurs on Mac and is best solved by utilizing virtual environments as

sudo pip install virtualenv
virtualenv -p <python-version> <desired-path>
source <desired-path>/bin/activate

Where `python-version` is either `python2.7` or `python3`.

Then install `pybind11` by `pip install pybind11` then attempt to install `knor`

ImportError: No module named 'setuptools'

### Solution

Use a recent version of `setuptools` from `pip`

sudo apt remove python-setuptools python3-setuptool
pip install -U setuptools
pip3 install -U setuptools

## Documentation

from knor import *

## Example

import knor
import numpy as np
data = np.random.random((100, 10))
km = knor.Kmeans(k=5)
ret =

## The `cluster_t` return object

The `cluster_t` return object has the following attributes:

- `k`: The number of clusters requested
- `nrow`: The number of rows/samples in the dataset
- `ncol`: Then number of columns/features in the dataset
- `sizes`: The number of samples in each cluster/centroid
- `iters`: The number of iterations performed
- `centroids`: A `list` where each row is a cluster center
- `clusters`: A `list` index for which cluster each sample falls into