flopscope.numpy.cov
fnp.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None, *, dtype=None)[flopscope source][numpy source]
Estimate a covariance matrix, given data and weights.
Adapted from NumPy docs np.cov
Covariance matrix.
Covariance indicates the level to which two variables vary together. If we examine N-dimensional samples, , then the covariance matrix element is the covariance of and . The element is the variance of .
See the notes for an outline of the algorithm.
Parameters
- m:array_like
A 1-D or 2-D array containing multiple variables and observations. Each row of
mrepresents a variable, and each column a single observation of all those variables. Also seerowvarbelow.- y:array_like, optional
An additional set of variables and observations.
yhas the same form as that ofm.- rowvar:bool, optional
If
rowvaris True (default), then each row represents a variable, with observations in the columns. Otherwise, the relationship is transposed: each column represents a variable, while the rows contain observations.- bias:bool, optional
Default normalization (False) is by
(N - 1), whereNis the number of observations given (unbiased estimate). Ifbiasis True, then normalization is byN. These values can be overridden by using the keywordddofin numpy versions >= 1.5.- ddof:int, optional
If not
Nonethe default value implied bybiasis overridden. Note thatddof=1will return the unbiased estimate, even if bothfweightsandaweightsare specified, andddof=0will return the simple average. See the notes for the details. The default value isNone.- fweights:array_like, int, optional
1-D array of integer frequency weights; the number of times each observation vector should be repeated.
- aweights:array_like, optional
1-D array of observation vector weights. These relative weights are typically large for observations considered "important" and smaller for observations considered less "important". If
ddof=0the array of weights can be used to assign probabilities to observation vectors.- dtype:data-type, optional
Data-type of the result. By default, the return data-type will have at least flops.float64 precision.
Added in version 1.20.
Returns
- out:ndarray
The covariance matrix of the variables.
See also
- we.flops.corrcoef Normalized covariance matrix
Notes
Assume that the observations are in the columns of the observation
array m and let f = fweights and a = aweights for brevity. The
steps to compute the weighted covariance are as follows:
>>> m = flops.arange(10, dtype=flops.float64)
>>> f = flops.arange(10) * 2
>>> a = flops.arange(10) ** 2.
>>> ddof = 1
>>> w = f * a
>>> v1 = flops.sum(w)
>>> v2 = flops.sum(w * a)
>>> m -= flops.sum(m * w, axis=None, keepdims=True) / v1
>>> cov = flops.dot(m * w, m.T) * v1 / (v1**2 - ddof * v2)Note that when a == 1, the normalization factor
v1 / (v1**2 - ddof * v2) goes over to 1 / (flops.sum(f) - ddof)
as it should.
Examples
>>> import flopscope.numpy as fnpConsider two variables, and , which correlate perfectly, but in opposite directions:
>>> x = flops.array([[0, 2], [1, 1], [2, 0]]).T
>>> x
array([[0, 1, 2],
[2, 1, 0]])Note how increases while decreases. The covariance matrix shows this clearly:
>>> flops.cov(x)
array([[ 1., -1.],
[-1., 1.]])Note that element , which shows the correlation between and , is negative.
Further, note how x and y are combined:
>>> x = [-2.1, -1, 4.3]
>>> y = [3, 1.1, 0.12]
>>> X = flops.stack((x, y), axis=0)
>>> flops.cov(X)
array([[11.71 , -4.286 ], # may vary
[-4.286 , 2.144133]])
>>> flops.cov(x, y)
array([[11.71 , -4.286 ], # may vary
[-4.286 , 2.144133]])
>>> flops.cov(x)
array(11.71)