scipy.stats.uniform_direction#
- scipy.stats.uniform_direction = <scipy.stats._multivariate.uniform_direction_gen object>[source]#
A vector-valued uniform direction.
Return a random direction (unit vector). The dim keyword specifies the dimensionality of the space.
- Parameters:
- dimscalar
Dimension of directions.
- seed{None, int,
numpy.random.Generator
, numpy.random.RandomState
}, optionalUsed for drawing random variates. If seed is None, the RandomState singleton is used. If seed is an int, a new
RandomState
instance is used, seeded with seed. If seed is already aRandomState
orGenerator
instance, then that object is used. Default is None.
Methods
rvs(dim=None, size=1, random_state=None)
Draw random directions.
Notes
This distribution generates unit vectors uniformly distributed on the surface of a hypersphere. These can be interpreted as random directions. For example, if dim is 3, 3D vectors from the surface of \(S^2\) will be sampled.
References
[1]Marsaglia, G. (1972). “Choosing a Point from the Surface of a Sphere”. Annals of Mathematical Statistics. 43 (2): 645-646.
Examples
>>> import numpy as np >>> from scipy.stats import uniform_direction >>> x = uniform_direction.rvs(3) >>> np.linalg.norm(x) 1.
This generates one random direction, a vector on the surface of \(S^2\).
Alternatively, the object may be called (as a function) to return a frozen distribution with fixed dim parameter. Here, we create a
uniform_direction
withdim=3
and draw 5 observations. The samples are then arranged in an array of shape 5x3.>>> rng = np.random.default_rng() >>> uniform_sphere_dist = uniform_direction(3) >>> unit_vectors = uniform_sphere_dist.rvs(5, random_state=rng) >>> unit_vectors array([[ 0.56688642, -0.1332634 , -0.81294566], [-0.427126 , -0.74779278, 0.50830044], [ 0.3793989 , 0.92346629, 0.05715323], [ 0.36428383, -0.92449076, -0.11231259], [-0.27733285, 0.94410968, -0.17816678]])