Skip to main content

A spatial decomposition tool for sorting or indexing N-D data.

Project description

Despace

Tests Python Open In Colab PyPI version DOI

Introduction

Hierarchical spatial decomposition has been shown to be super useful in many geometric problems like geological analysis and N-body simulations. The general goal is to index multi-dimensional data points while keeping spatially proximal points as close as possible. Traditionally, k-D trees and space filling curves (Hilbert/Peano and Morton curves) are constructed to divide the k dimensional space first. For k-D trees, every data point will be assigned to the tree leaves and leaves close to each other in the tree structure are also spatially close to each other. For space filling curves, each data point in the space is assigned to the nearest space filling curve vertex. The whole data set can therefore be sorted along the space filling curve direction.

Constructing and traversing the k-D trees and k-dimensional space filling curves can be annoying in some certain cases. Here I am instead trying to use a simple sorting scheme to index or sort k dimensional data so that close data points are stored closely in the final data structure.

Note: 'dimension' here means physical dimensions like in 2D and 3D cartesian coordinates. It's different from the definition of 'dimension' in numpy.ndarray which refers to number of axes to describe the data layout. Mostly we can think of the 'dimension' in this repo as the number of columns in a 2d numpy array (matrix).

Algorithm

  1. Sort the entire data points in the first dimension.
  2. Divide the data into two halves and sort each half in the second dimension.
  3. For each sorted half data, divide it into two halves and sort it in the third dimension.
  4. Continue the above procedure by circulating the dimension indices until dividing into single data points.
  5. Reconstruct the whole data set with the above pseudo-sorted data

Install

pip install despace

Current status

For a 8X8 grid, we get a Morton curve if we init the sort_type as Morton (the default):

We get a Hilbert curve if we init the sort_type as Hilbert:

k-D cases are primarily done for the Morton type. Visualization for 2D and 3D cases is supported. Below shows plots of N=10000 random points in a 2D square space and a 3D cube. The data points are blue-->red colored according to their indices from 0 to 9999.

For the Hilbert type, only 1D and 2D cases have been implemented.

Try it out

  1. You can play with the python script generate_random.py in the examples folder like changing the number of data points
python generate_random.py 50 2 # use 50 data points for 2D.

And we get a figure like below:

  1. Use in your code
from despace import SortND
import numpy as np

s = SortND()
s(np.random.rand(50, 2))
s.plot(show_plot=False)  # Set show_plot=True in jupyter-notebook

We shall get a similar figure as the above example.

  1. Try in Google Colab

Click the button Open In Colab and follow the examples in the Google Colab file.

Project details


Download files

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

Source Distribution

despace-0.3.1.tar.gz (15.2 kB view details)

Uploaded Source

Built Distribution

despace-0.3.1-py3-none-any.whl (14.0 kB view details)

Uploaded Python 3

File details

Details for the file despace-0.3.1.tar.gz.

File metadata

  • Download URL: despace-0.3.1.tar.gz
  • Upload date:
  • Size: 15.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2

File hashes

Hashes for despace-0.3.1.tar.gz
Algorithm Hash digest
SHA256 580c32cbc60c0d947bac0564c213bef633f783af67261be19ec236c9181dd624
MD5 25d3d333ddd9b3f5a64bcbf7ee8526f4
BLAKE2b-256 9209afda9e2c2ffee987de4e55d28df1d9ca37aa750f87854200f8e09a41bb22

See more details on using hashes here.

File details

Details for the file despace-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: despace-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 14.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2

File hashes

Hashes for despace-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f08a697cdd9f3f8da21c9c621d4108d46b8538bec2097bb8ba7da86b223e83eb
MD5 a2ff31a6fc11cd8a4e0d001163bce1e2
BLAKE2b-256 c829fe342df4c6fcae888fc9e27685e9883178dede546d8e26267a5849637d34

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page