Skip to main content

Closely :triangular_ruler:

PyPI version Build Status

Find the closest pairs in an array.

Closely uses principal component analysis (PCA) to reduce the dimensions to 2 and a divide and conquer algorithm to find the closest pair of points.

Getting Started

pip install closely

or install from source:

git clone https://github.com/justinshenk/closely
cd closely
pip install .

How to use

import closely

# X is an n x m numpy array
pairs, distances = closely.solve(X, n=1)

You can specify how many pairs you want to identify with n.

Example

import closely
import numpy as np
import matplotlib.pyplot as plt

# Create dataset
X = np.random.random((100,2))
pairs, distance = closely.solve(X, n=1)

# Plot points
z, y = np.split(X, 2, axis=1)
fig, ax = plt.subplots()
ax.scatter(z, y) 

for i, txt in enumerate(X): 
    if i in pairs: 
        ax.annotate(i, (z[i], y[i]), color='red') 
    else: 
        ax.annotate(i, (z[i], y[i]))

plt.show() 

Check pairs:

In [10]: pairs                                                                                                                                
Out[10]: 
array([[ 7, 16],
       [96, 50]])

Output: example_plot

Caveats

If your data has more than 3 features, closely will reduce the dimensionality by projecting it onto two directions that explain most of the variance. This speeds up processing, but is not 100% precise. In other words, if your data has four columns (eg, x, y, z, a), it will apply divide-and-conquer on the new projection bases P1 and P2.

It also removes the first point in a pair if n>1. In rare cases this leads to false negatives if the data is highly overlapping.

Credit and Explanation

Python code modified from Andriy Lazorenko, packaged and made useful for >2 features by Justin Shenk.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

closely-19.0.2.tar.gz (6.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

closely-19.0.2-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

Details for the file closely-19.0.2.tar.gz.

File metadata

  • Download URL: closely-19.0.2.tar.gz
  • Upload date:
  • Size: 6.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for closely-19.0.2.tar.gz
Algorithm Hash digest
SHA256 848ab89b9d6958c938ca83225c26cae476fb5ebba86f054eaedb77513498dff4
MD5 3ce3ef61a954b1cd02ba69fa8cf04c4a
BLAKE2b-256 8e4682d1d9d0b2a42af880c7dda3f57d1b065681d9f1b2c51c7519347cb776ae

See more details on using hashes here.

File details

Details for the file closely-19.0.2-py3-none-any.whl.

File metadata

  • Download URL: closely-19.0.2-py3-none-any.whl
  • Upload date:
  • Size: 6.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for closely-19.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 739365668d6beeed40137d28b937abeaa1ca2e6dd15d71eced9750c819b73125
MD5 d4e32a05bfd2f5b4741bd2e2772e1ac0
BLAKE2b-256 39c1126873342cd0ea249321adbaf3766a771a986d1b09d935a578116e890aaa

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

19.0.2 This release

2 files

19.0.1

2 files

19.0.0

2 files

0.1.8

1 file

0.1.6

2 files

0.1.5

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page