{ "info": { "author": "Justin Shenk", "author_email": "shenkjustin@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Topic :: Scientific/Engineering :: Mathematics", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# Closest Pairs :triangular_ruler:\n\nFind the closest pairs in an array.\n\n### Getting Started\n\n```bash\npip install closest_pairs\n```\n\nor install from source:\n```bash\ngit clone https://github.com/justinshenk/closest-pairs\ncd closest_pairs\npip install .\n```\n\n### How to use\n\n```python\nimport closest_pairs\n\n# X is an n x m numpy array\npairs, distances = closest_pairs.solve(X, n=1)\n\n```\n\nYou can specify how many pairs you want to identify with `n`.\n\n\n### Example\n```python\nimport closest_pairs\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# Create dataset\nX = np.random.random((100,2))\npairs, distance = closest_pairs.solve(X, n=1)\n\n# Plot points\nz, y = np.split(X, 2, axis=1)\nfig, ax = plt.subplots()\nax.scatter(z, y) \n\nfor i, txt in enumerate(X): \n if i in pairs: \n ax.annotate(i, (z[i], y[i]), color='red') \n else: \n ax.annotate(i, (z[i], y[i])) \n```\n\nCheck pairs:\n```ipython\nIn [10]: pairs \nOut[10]: \narray([[[ 7],\n [16]],\n\n [[96],\n [50]]])\n\n```\n\nOutput:\n![example_plot](example_plot.png)\n\n\n### Caveats\n`closest_pairs` will reduce the dimensionality with PCA of your data to two-dimensions for faster processing.\n\nIt 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.\n\n\n### Credit and Explanation\n\nPython code modified from [Andriy Lazorenko](https://medium.com/@andriylazorenko/closest-pair-of-points-in-python-79e2409fc0b2), packaged and made useful for >2 features by Justin Shenk.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/justinshenk/closest_pairs", "keywords": "mathematics geometry", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "closest-pairs", "package_url": "https://pypi.org/project/closest-pairs/", "platform": "", "project_url": "https://pypi.org/project/closest-pairs/", "project_urls": { "Homepage": "https://github.com/justinshenk/closest_pairs" }, "release_url": "https://pypi.org/project/closest-pairs/0.1.5/", "requires_dist": [ "numpy", "scikit-learn" ], "requires_python": ">= 3.6", "summary": "closest_pairs finds the closest pairs of points in a dataset", "version": "0.1.5" }, "last_serial": 5302758, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "89586d8632e61fbabd1a5d0afcc99d91", "sha256": "995c1055cf8cb11aa53ef439d840a9bb9cb709da530a7534a796eecbf0ffbbd7" }, "downloads": -1, "filename": "closest_pairs-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "89586d8632e61fbabd1a5d0afcc99d91", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">= 3.6", "size": 4463, "upload_time": "2019-05-22T10:08:02", "url": "https://files.pythonhosted.org/packages/af/08/a1e98484573a0a4981903666c11b1952b227a156123cd0a009aa1cdd86d5/closest_pairs-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0612821b41d3e7f7f25a408b8754c7c7", "sha256": "bbf09c01d3431d0317d3807ea9ac819649be65500c8265ed3c8eee96d18673e9" }, "downloads": -1, "filename": "closest_pairs-0.1.0.tar.gz", "has_sig": false, "md5_digest": "0612821b41d3e7f7f25a408b8754c7c7", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6", "size": 3653, "upload_time": "2019-05-22T10:08:05", "url": "https://files.pythonhosted.org/packages/6e/96/b427f75e9646b47e67c44358fa3905175940424b6062e81829a01c0dd008/closest_pairs-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "eefe51e9a86d78e01ba5aca6f3bd2c1f", "sha256": "da18052399215f01ab440d4113ef008e86e96067957f9f61353cfd57ecb317e7" }, "downloads": -1, "filename": "closest_pairs-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "eefe51e9a86d78e01ba5aca6f3bd2c1f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">= 3.6", "size": 4649, "upload_time": "2019-05-22T10:08:04", "url": "https://files.pythonhosted.org/packages/cd/7f/aec754b30918549b4b7735ed7bcc33505b3f3f86fe5890c2a43641a5f597/closest_pairs-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f7c57068f8ff4ba996067db39475b4c8", "sha256": "f5454c4e16393921fac790316efc7c61057f323ec424bed25616cc54279926ac" }, "downloads": -1, "filename": "closest_pairs-0.1.1.tar.gz", "has_sig": false, "md5_digest": "f7c57068f8ff4ba996067db39475b4c8", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6", "size": 3878, "upload_time": "2019-05-22T10:08:07", "url": "https://files.pythonhosted.org/packages/0a/c0/902d5b91279fd41655127378ad9a2398d65685601248d06fb349ad1636d7/closest_pairs-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "c8cebfe4fbc253cdd3cb6cf399fcabbe", "sha256": "0efbb881856f5e17bb5ec187e4e33afa8fa7f73a3115117e23f3b4910f79a67a" }, "downloads": -1, "filename": "closest_pairs-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c8cebfe4fbc253cdd3cb6cf399fcabbe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">= 3.6", "size": 4707, "upload_time": "2019-05-22T12:22:58", "url": "https://files.pythonhosted.org/packages/45/59/8de3be61430399585146a7f18354d46b601b74de3871a0499c892a96d375/closest_pairs-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e92ba9e44f6f061a5fd67b611133e110", "sha256": "61d70d5d3bc488b6ade6dbac9dc48ee684236f5374871dfb3b77223e275e994a" }, "downloads": -1, "filename": "closest_pairs-0.1.2.tar.gz", "has_sig": false, "md5_digest": "e92ba9e44f6f061a5fd67b611133e110", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6", "size": 3956, "upload_time": "2019-05-22T12:22:59", "url": "https://files.pythonhosted.org/packages/73/89/f558d95850ed0b8a9c23a24619a0a403286d992dc4dd99aacfc7b2bb6c70/closest_pairs-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "c088ceeda92c9b5a444b75923ce4425a", "sha256": "bebf0cb42f5b74044c1f93118d67d01a45d7d6da3ed30bfa9c2ae0fd35973205" }, "downloads": -1, "filename": "closest_pairs-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "c088ceeda92c9b5a444b75923ce4425a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">= 3.6", "size": 4721, "upload_time": "2019-05-22T12:52:52", "url": "https://files.pythonhosted.org/packages/73/c8/6ff602bf4b8d8defd5513deb97cbe6096d6e2e9d9c116fd8715ed7c24f09/closest_pairs-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cdb894bf289849669236afe227900e3e", "sha256": "64daa574f4b5fc5a04e5530a7081013c3a1207f952e068226742be46b4cae932" }, "downloads": -1, "filename": "closest_pairs-0.1.3.tar.gz", "has_sig": false, "md5_digest": "cdb894bf289849669236afe227900e3e", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6", "size": 3970, "upload_time": "2019-05-22T12:52:54", "url": "https://files.pythonhosted.org/packages/50/d3/2a8051c279622bdd45c13f2c9489eb9a9669fd46cf5321113a0cc8c81453/closest_pairs-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "30c0d5f6c3f1d3156d33ba21d8f6b6ad", "sha256": "db607b878965704deaa13e4719c4068bb806d0222fddb4ad0c79d10cfe9ffc95" }, "downloads": -1, "filename": "closest_pairs-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "30c0d5f6c3f1d3156d33ba21d8f6b6ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">= 3.6", "size": 4728, "upload_time": "2019-05-22T13:35:43", "url": "https://files.pythonhosted.org/packages/53/e7/4bd3e495465faa9c90192ed0aa88c435a302168aac512845ce191120aa84/closest_pairs-0.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "08156dfbbc2e2858462e261562b924e8", "sha256": "4e4bd6a0361d7cbf5711706548719cd6372c1c88c742b2247b089a57c50cab96" }, "downloads": -1, "filename": "closest_pairs-0.1.4.tar.gz", "has_sig": false, "md5_digest": "08156dfbbc2e2858462e261562b924e8", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6", "size": 3975, "upload_time": "2019-05-22T13:35:44", "url": "https://files.pythonhosted.org/packages/ee/3f/26986d5e8a9e927ed4db00121b27cc0923f4f08f0326553df14286df460a/closest_pairs-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "a2ba88ee3dd3df98493f11be53efdbf5", "sha256": "cc5c2900761931f962c459655e72e1415d3da76c44c8dc399625799aca33059c" }, "downloads": -1, "filename": "closest_pairs-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "a2ba88ee3dd3df98493f11be53efdbf5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">= 3.6", "size": 4727, "upload_time": "2019-05-22T13:40:29", "url": "https://files.pythonhosted.org/packages/c2/c2/9b75f8b78dae9ebd9e8e697c28b4de0097f70640c6ffb3ce03cace188c28/closest_pairs-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "25978db8b2eae362844b65d2d4e5e7b1", "sha256": "7f6d3e8834aa0979e86db16cc1d442c47bbb9a71f5348173aa3563687cfb4f5e" }, "downloads": -1, "filename": "closest_pairs-0.1.5.tar.gz", "has_sig": false, "md5_digest": "25978db8b2eae362844b65d2d4e5e7b1", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6", "size": 3971, "upload_time": "2019-05-22T13:40:31", "url": "https://files.pythonhosted.org/packages/45/80/45956b4ef04984d3397037d9304da2aa559874ded2216087c344fff3d895/closest_pairs-0.1.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a2ba88ee3dd3df98493f11be53efdbf5", "sha256": "cc5c2900761931f962c459655e72e1415d3da76c44c8dc399625799aca33059c" }, "downloads": -1, "filename": "closest_pairs-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "a2ba88ee3dd3df98493f11be53efdbf5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">= 3.6", "size": 4727, "upload_time": "2019-05-22T13:40:29", "url": "https://files.pythonhosted.org/packages/c2/c2/9b75f8b78dae9ebd9e8e697c28b4de0097f70640c6ffb3ce03cace188c28/closest_pairs-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "25978db8b2eae362844b65d2d4e5e7b1", "sha256": "7f6d3e8834aa0979e86db16cc1d442c47bbb9a71f5348173aa3563687cfb4f5e" }, "downloads": -1, "filename": "closest_pairs-0.1.5.tar.gz", "has_sig": false, "md5_digest": "25978db8b2eae362844b65d2d4e5e7b1", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6", "size": 3971, "upload_time": "2019-05-22T13:40:31", "url": "https://files.pythonhosted.org/packages/45/80/45956b4ef04984d3397037d9304da2aa559874ded2216087c344fff3d895/closest_pairs-0.1.5.tar.gz" } ] }