scipy.sparse.random#
- scipy.sparse.random(m, n, density=0.01, format='coo', dtype=None, random_state=None, data_rvs=None)[source]#
Generate a sparse matrix of the given shape and density with randomly distributed values.
Warning
Since numpy 1.17, passing a
np.random.Generator
(e.g.np.random.default_rng
) forrandom_state
will lead to much faster execution times.A much slower implementation is used by default for backwards compatibility.
- Parameters:
- m, nint
shape of the matrix
- densityreal, optional
density of the generated matrix: density equal to one means a full matrix, density of 0 means a matrix with no non-zero items.
- formatstr, optional
sparse matrix format.
- dtypedtype, optional
type of the returned matrix values.
- random_state{None, int,
numpy.random.Generator
, numpy.random.RandomState
}, optionalIf seed is None (or np.random), the
numpy.random.RandomState
singleton is used.If seed is an int, a new
RandomState
instance is used, seeded with seed.If seed is already a
Generator
orRandomState
instance then that instance is used.
This random state will be used for sampling the sparsity structure, but not necessarily for sampling the values of the structurally nonzero entries of the matrix.
- data_rvscallable, optional
Samples a requested number of random values. This function should take a single argument specifying the length of the ndarray that it will return. The structurally nonzero entries of the sparse random matrix will be taken from the array sampled by this function. By default, uniform [0, 1) random values will be sampled using the same random state as is used for sampling the sparsity structure.
- Returns:
- ressparse matrix
Examples
Passing a
np.random.Generator
instance for better performance:>>> from scipy.sparse import random >>> from scipy import stats >>> from numpy.random import default_rng >>> rng = default_rng() >>> S = random(3, 4, density=0.25, random_state=rng)
Proving a sampler for the values:
>>> rvs = stats.poisson(25, loc=10).rvs >>> S = random(3, 4, density=0.25, random_state=rng, data_rvs=rvs) >>> S.A array([[ 36., 0., 33., 0.], # random [ 0., 0., 0., 0.], [ 0., 0., 36., 0.]])
Using a custom distribution:
>>> class CustomDistribution(stats.rv_continuous): ... def _rvs(self, size=None, random_state=None): ... return random_state.standard_normal(size) >>> X = CustomDistribution(seed=rng) >>> Y = X() # get a frozen version of the distribution >>> S = random(3, 4, density=0.25, random_state=rng, data_rvs=Y.rvs) >>> S.A array([[ 0. , 0. , 0. , 0. ], # random [ 0.13569738, 1.9467163 , -0.81205367, 0. ], [ 0. , 0. , 0. , 0. ]])