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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file spherical_harmonics_basis-0.0.2.tar.gz
.
File metadata
- Download URL: spherical_harmonics_basis-0.0.2.tar.gz
- Upload date:
- Size: 3.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.27.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cbc55e220167777126c9757407bb7069de8d5b10708467c5068fb89b56e01cdf |
|
MD5 | e92185798c07d35086191d9ae41c73aa |
|
BLAKE2b-256 | 86f22f5ab8a1b3acf576d778f5663c61789f620fac9ff1af9007b7779fea7bb9 |
File details
Details for the file spherical_harmonics_basis-0.0.2-py2.py3-none-any.whl
.
File metadata
- Download URL: spherical_harmonics_basis-0.0.2-py2.py3-none-any.whl
- Upload date:
- Size: 3.5 MB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.27.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bc21790db527be4e40bf63565586a6ff38feb3291ef4bb9667df6165f4846560 |
|
MD5 | bde51be25ca17102cb78c214a0fea76d |
|
BLAKE2b-256 | 36dd9b366721d84c900f03d7edf3d964cbde1bb6001186ac5aecf7fd2d2cd782 |