torch.cov — PyTorch 2.7 documentation (original) (raw)

torch.cov(input, *, correction=1, fweights=None, aweights=None) → Tensor

Estimates the covariance matrix of the variables given by the input matrix, where rows are the variables and columns are the observations.

A covariance matrix is a square matrix giving the covariance of each pair of variables. The diagonal contains the variance of each variable (covariance of a variable with itself). By definition, if input represents a single variable (Scalar or 1D) then its variance is returned.

The sample covariance of the variables xx and yy is given by:

cov(x,y)=∑i=1N(xi−xˉ)(yi−yˉ)max⁡(0, N − δN)\text{cov}(x,y) = \frac{\sum^{N}_{i = 1}(x_{i} - \bar{x})(y_{i} - \bar{y})}{\max(0,~N~-~\delta N)}

where xˉ\bar{x} and yˉ\bar{y} are the simple means of the xx and yy respectively, andδN\delta N is the correction.

If fweights and/or aweights are provided, the weighted covariance is calculated, which is given by:

covw(x,y)=∑i=1Nwi(xi−μx∗)(yi−μy∗)max⁡(0, ∑i=1Nwi − ∑i=1Nwiai∑i=1Nwi δN)\text{cov}_w(x,y) = \frac{\sum^{N}_{i = 1}w_i(x_{i} - \mu_x^*)(y_{i} - \mu_y^*)} {\max(0,~\sum^{N}_{i = 1}w_i~-~\frac{\sum^{N}_{i = 1}w_ia_i}{\sum^{N}_{i = 1}w_i}~\delta N)}

where ww denotes fweights or aweights (f and a for brevity) based on whichever is provided, or w=f×aw = f \times a if both are provided, andμx∗=∑i=1Nwixi∑i=1Nwi\mu_x^* = \frac{\sum^{N}_{i = 1}w_ix_{i} }{\sum^{N}_{i = 1}w_i} is the weighted mean of the variable. If not provided, f and/or a can be seen as a 1\mathbb{1} vector of appropriate size.

Parameters

input (Tensor) – A 2D matrix containing multiple variables and observations, or a Scalar or 1D vector representing a single variable.

Keyword Arguments

Returns

(Tensor) The covariance matrix of the variables.

Example::

x = torch.tensor([[0, 2], [1, 1], [2, 0]]).T x tensor([[0, 1, 2], [2, 1, 0]]) torch.cov(x) tensor([[ 1., -1.], [-1., 1.]]) torch.cov(x, correction=0) tensor([[ 0.6667, -0.6667], [-0.6667, 0.6667]]) fw = torch.randint(1, 10, (3,)) fw tensor([1, 6, 9]) aw = torch.rand(3) aw tensor([0.4282, 0.0255, 0.4144]) torch.cov(x, fweights=fw, aweights=aw) tensor([[ 0.4169, -0.4169], [-0.4169, 0.4169]])