latest (dev)
Copy
Latest development documentation · Updated 2026-10-08
LowRankMultivariateNormal
- class tensorplay.distributions.LowRankMultivariateNormal(loc: Tensor, cov_factor: Tensor, cov_diag: Tensor, validate_args: bool | None = None)[source]
Creates a multivariate normal distribution with covariance matrix having a low-rank form parameterized by
cov_factorandcov_diag:covariance_matrix = cov_factor @ cov_factor.T + cov_diagExample
>>> # xdoctest: +REQUIRES(env:TENSORPLAY_DOCTEST_LAPACK) >>> # xdoctest: +IGNORE_WANT("non-deterministic") >>> m = LowRankMultivariateNormal( ... tensorplay.zeros(2), tensorplay.tensor([[1.0], [0.0]]), tensorplay.ones(2) ... ) >>> m.sample() # normally distributed with mean=`[0,0]`, cov_factor=`[[1],[0]]`, cov_diag=`[1,1]` tensor([-0.2102, -0.5429])- Parameters:
loc (Tensor) – mean of the distribution with shape batch_shape + event_shape
cov_factor (Tensor) – factor part of low-rank form of covariance matrix with shape batch_shape + event_shape + (rank,)
cov_diag (Tensor) – diagonal part of low-rank form of covariance matrix with shape batch_shape + event_shape
Note
The computation for determinant and inverse of covariance matrix is avoided when cov_factor.shape[1] << cov_factor.shape[0] thanks to Woodbury matrix identity and matrix determinant lemma. Thanks to these formulas, we just need to compute the determinant and inverse of the small size “capacitance” matrix:
capacitance = I + cov_factor.T @ inv(cov_diag) @ cov_factor- property batch_shape: Size
Returns the shape over which parameters are batched.
- cdf(value: Tensor) Tensor
Returns the cumulative density/mass function evaluated at value.
- Parameters:
value (Tensor)
- enumerate_support(expand: bool = True) Tensor
Returns tensor containing all values supported by a discrete distribution. The result will enumerate over dimension 0, so the shape of the result will be (cardinality,) + batch_shape + event_shape (where event_shape = () for univariate distributions).
Note that this enumerates over all batched tensors in lock-step [[0, 0], [1, 1], …]. With expand=False, enumeration happens along dim 0, but with the remaining batch dimensions being singleton dimensions, [[0], [1], ...
To iterate over the full Cartesian product use itertools.product(m.enumerate_support()).
- Parameters:
expand (bool) – whether to expand the support over the batch dims to match the distribution’s batch_shape.
- Returns:
Tensor iterating over dimension 0.
- property event_shape: Size
Returns the shape of a single sample (without batching).
- icdf(value: Tensor) Tensor
Returns the inverse cumulative density/mass function evaluated at value.
- Parameters:
value (Tensor)
- perplexity() Tensor
Returns perplexity of distribution, batched over batch_shape.
- Returns:
Tensor of shape batch_shape.
- sample(sample_shape: Size | Sequence[int] = ()) Tensor
Generates a sample_shape shaped sample or sample_shape shaped batch of samples if the distribution parameters are batched.
- sample_n(n: int) Tensor
Generates n samples or n batches of samples if the distribution parameters are batched.
- static set_default_validate_args(value: bool) None
Sets whether validation is enabled or disabled.
The default behavior mimics Python’s
assertstatement: validation is on by default, but is disabled if Python is run in optimized mode (viapython -O). Validation may be expensive, so you may want to disable it once a model is working.- Parameters:
value (bool) – Whether to enable validation.
- property stddev: Tensor
Returns the standard deviation of the distribution.
Help improve this page
Found an error, an unclear step, or a missing example?

