This Question is supposed to gather techniques on how to uniformly sample points on $\mathbb S^{d-1}$ for large $d$. There are a few things to keep in mind for this problem, mainly as the dimension $d$ increases:
- The computation of the norm of vectors in $\mathbb R^d$ becomes increasingly expensive. Hence methods relying on normalization of vectors become less efficient.
- The volume of the $d$-ball in relation to larger sets containing the $d$-ball decreases. As a consequence, acceptance-rejection sampling methods become less efficient as we reject too many samples.
To give two examples of "naive" methods one might try, which do work well in low dimensions but not in large dimensions, consider the following:
Normalizing a symmetric distribution:
First, sample a random vector $X\in\mathbb R^d$ from a distribution which is invariant under symmetry transformations of $\mathbb S^{d-1}$, then normalize $X$, i.e. compute $X/\Vert X\Vert$. This normalized vector will be uniformly distributed on $\mathbb S^{d-1}$. This method suffers from Problem 1.
Rejecting points from the unit cube:
Sample a random vector $X$ uniformly in $[-1,1]^d$. If the random vector lies inside the $d$-ball, keep the sample, if not, discard the sample. This will generate a uniform distribution on the $d$-ball. A uniform distribution on $\mathbb S^{d-1}$ can then be achieved by normalizing the samples. This acceptance-rejection method suffers from Problem 2, since as $d$ increases, fewer points in the unit cube are located in the unit $d$-ball and hence we will reject a lot of samples. (This method also suffers from Problem 1, but that's beside the point.)
Question:
What are sampling techniques that achieve a uniform distribution on $\mathbb S^{d-1}$ but avoid Problems 1 and 2 for large $d$?