Skip to main content

HDIdx

pypi downloads_month license

HDIdx: Indexing High-Dimensional Data

What is HDIdx?

HDIdx is a python package for approximate nearest neighbor (ANN) search. Nearest neighbor (NN) search is very challenging in high-dimensional space because of the *Curse of Dimensionality* problem. The basic idea of HDIdx is to compress the original feature vectors into compact binary codes, and perform approximate NN search instead of extract NN search. This can largely reduce the storage requirements and can significantly speed up the search.

Architecture

https://raw.githubusercontent.com/wanji/hdidx/master/doc/framework.png

HDIdx has three main modules: 1) Encoder which can compress the original feature vectors into compact binary hash codes, 2) Indexer which can index the database items and search approximate nearest neighbor for a given query item, and 3) Storage module which encapsulates the underlying data storage, which can be memory or NoSQL database like LMDB, for the Indexer.

The current version implements following feature compressing algorithms:

  • Product Quantization[1].

  • Spectral Hashing[2].

To use HDIdx, first you should learn a Encoder from some learning vectors. Then you can map the base vectors into hash codes using the learned Encoder and building indexes over these hash codes by an Indexer, which will write the indexes to the specified storage medium. When a query vector comes, it will be mapped to hash codes by the same Encoder and the Indexer will find the similar items to this query vector.

Installation

HDIdx can be installed by pip:

[sudo] pip install cython
[sudo] pip install hdidx

By default, HDIdx use kmeans algorithm provided by *SciPy*. To be more efficient, you can install python extensions of *OpenCV*, which can be installed via apt-get on Ubuntu. For other Linux distributions, e.g. CentOS, you need to compile it from source.

[sudo] apt-get install python-opencv

HDIdx will use *OpenCV* automatically if it is available.

Windows Guide

General dependencies:

After install the above mentioned software, download `stdint.h <http://msinttypes.googlecode.com/svn/trunk/stdint.h>`__ and put it under the include folder of Visual C++, e.g. C:\Users\xxx\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\include. Then hdidx can be installed by pip from the Anaconda Command Prompt.

Example

Here is a simple example. See this notebook for more examples.

# import necessary packages

import hdidx
import numpy as np

# generating sample data
ndim = 16      # dimension of features
ndb = 10000    # number of dababase items
nqry = 10      # number of queries

X_db = np.random.random((ndb, ndim))
X_qry = np.random.random((nqry, ndim))

# create Product Quantization Indexer
idx = hdidx.indexer.IVFPQIndexer()
# build indexer
idx.build({'vals': X_db, 'nsubq': 8})
# add database items to the indexer
idx.add(X_db)
# searching in the database, and return top-10 items for each query
ids, dis = idx.search(X_qry, 10)
print ids
print dis

Reference

[1] Jegou, Herve, Matthijs Douze, and Cordelia Schmid.
    "Product quantization for nearest neighbor search."
    Pattern Analysis and Machine Intelligence, IEEE Transactions on 33.1 (2011): 117-128.
[2] Weiss, Yair, Antonio Torralba, and Rob Fergus.
    "Spectral hashing."
    In Advances in neural information processing systems, pp. 1753-1760. 2009.

Metadata

Release files for hdidx 0.2.8.2

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

Source distribution (sdist)

Source distribution for hdidx 0.2.8.2
File Size Uploaded Provenance
hdidx-0.2.8.2.tar.gz 24.4 kB Without provenance Details

Release files / hdidx-0.2.8.2.tar.gz

Download URL hdidx-0.2.8.2.tar.gz
Size 24.4 kB
Tags Source
SHA-256 checksum
How to use checksums
2243e2eb1b056a304578cca17cc88060e01dee4b031be462af730b659f3cf573
BLAKE2b-256 checksum
How to use checksums
695780d49610fa6656f229a37796db48247c8979154fa901884e0e2bb1fe8632
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for hdidx 0.2.8.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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