Skip to main content

Python Implementation of Spherical harmonics in dimension >= 3

Project description

Spherical Harmonics

This package implements spherical harmonics in d-dimensions in Python. The spherical harmonics are defined as zonal functions through the Gegenbauer polynomials and a fundamental system of points (see Dai and Xu (2013), defintion 3.1). The spherical harmonics form a ortho-normal set on the hypersphere. This package implements a greedy algorithm to compute the fundamental set for dimensions up to 20.

The computations of this package can be carried out in either TensorFlow, Pytorch, Jax or NumPy. A specific backend can be chosen by simply importing it as follows

import spherical_harmonics.tensorflow  # noqa

Example

3 Dimensional

import tensorflow as tf
import spherical_harmonics.tensorflow  # run computation in TensorFlow

from spherical_harmonics import SphericalHarmonics
from spherical_harmonics.utils import l2norm

dimension = 3
max_degree = 10
# Returns all the spherical harmonics in dimension 3 up to degree 10.
Phi = SphericalHarmonics(dimension, max_degree)

x = tf.random.normal((101, dimension))  # Create random points to evaluate Phi
x = x / tf.norm(x, axis=1, keepdims=True)  # Normalize vectors
out = Phi(x)  # Evaluate spherical harmonics at `x`

# In 3D there are (2 * degree + 1) spherical harmonics per degree,
# so in total we have 400 spherical harmonics of degree 20 and smaller.
num_harmonics = 0
for degree in range(max_degree):
    num_harmonics += 2 * degree + 1
assert num_harmonics == 100

assert out.shape == (101, num_harmonics)

4 Dimensional

The setup for 4 dimensional spherical harmonics is very similar to the 3D case. Note that there are more spherical harmonics now of degree smaller than 20.

import numpy as np
from spherical_harmonics import SphericalHarmonics
from spherical_harmonics.utils import l2norm

dimension = 4
max_degree = 10
# Returns all the spherical harmonics of degree 4 up to degree 10.
Phi = SphericalHarmonics(dimension, max_degree)

x = np.random.randn(101, dimension)  # Create random points to evaluation Phi
x = x / l2norm(x)  # normalize vectors
out = Phi(x)  # Evaluate spherical harmonics at `x`

# In 4D there are (degree + 1)**2 spherical harmonics per degree,
# so in total we have 385 spherical harmonics of degree 20 and smaller.
num_harmonics = 0
for degree in range(max_degree):
    num_harmonics += (degree + 1) ** 2
assert num_harmonics == 385

assert out.shape == (101, num_harmonics)

NOTE

The fundamental systems up to dimensions 20 are precomputed and stored in spherical_harmonics/fundamental_system. For each dimension we precompute the first amount of spherical harmonics. This means that in each dimension we support a varying number of maximum degree (max_degree) and number of spherical harmonics:

Dimension Max Degree Number Harmonics
3 34 1156
4 20 2870
5 10 16170
6 8 1254
7 7 1386
8 6 1122
9 6 1782
10 6 2717
11 5 1287
12 5 1729
13 5 2275
14 5 2940
15 5 3740
16 4 952
17 4 1122
18 4 1311
19 4 1520
20 4 1750

To precompute a larger fundamental system for a dimension run the following script

cd spherical_harmonics
python fundament_set.py

after specifying the desired options in the file.


Installation

The package is now available on PyPI under the name of spherical-harmonics-basis.

Simply run

pip install spherical-harmonics-basis

Citation

If this code was useful for your research, please consider citing the following paper:

@inproceedings{Dutordoir2020spherical,
  title     = {{Sparse Gaussian Processes with Spherical Harmonic Features}},
  author    = {Dutordoir, Vincent and Durrande, Nicolas and Hensman, James},
  booktitle = {Proceedings of the 37th International Conference on Machine Learning (ICML)},
  date      = {2020},
}

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

spherical_harmonics_basis-0.0.2.tar.gz (3.5 MB view details)

Uploaded Source

Built Distribution

spherical_harmonics_basis-0.0.2-py2.py3-none-any.whl (3.5 MB view details)

Uploaded Python 2 Python 3

File details

Details for the file spherical_harmonics_basis-0.0.2.tar.gz.

File metadata

File hashes

Hashes for spherical_harmonics_basis-0.0.2.tar.gz
Algorithm Hash digest
SHA256 cbc55e220167777126c9757407bb7069de8d5b10708467c5068fb89b56e01cdf
MD5 e92185798c07d35086191d9ae41c73aa
BLAKE2b-256 86f22f5ab8a1b3acf576d778f5663c61789f620fac9ff1af9007b7779fea7bb9

See more details on using hashes here.

File details

Details for the file spherical_harmonics_basis-0.0.2-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for spherical_harmonics_basis-0.0.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 bc21790db527be4e40bf63565586a6ff38feb3291ef4bb9667df6165f4846560
MD5 bde51be25ca17102cb78c214a0fea76d
BLAKE2b-256 36dd9b366721d84c900f03d7edf3d964cbde1bb6001186ac5aecf7fd2d2cd782

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