numpy.cov(m, y=None, rowvar=1, bias=0, ddof=None, fweights=None, aweights=None)[source]
Estimate a covariance matrix, given data and weights.
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 y : array_like, optional An additional set of variables and observations. rowvar : int, optional If bias : int, optional Default normalization is by ddof : int, optional If not New in version 1.5. fweights : array_like, int, optional 1-D array of integer freguency weights; the number of times each observation vector should be repeated. New in version 1.10. 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 New in version 1.10. |
---|---|
Returns: |
out : ndarray The covariance matrix of the variables. |
See also
corrcoef
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:
>>> w = f * a >>> v1 = np.sum(w) >>> v2 = np.sum(w * a) >>> m -= np.sum(m * w, axis=1, keepdims=True) / v1 >>> cov = np.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 / (np.sum(f) - ddof)
as it should.
Consider two variables, and , which correlate perfectly, but in opposite directions:
>>> x = np.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:
>>> np.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 = np.vstack((x,y)) >>> print np.cov(X) [[ 11.71 -4.286 ] [ -4.286 2.14413333]] >>> print np.cov(x, y) [[ 11.71 -4.286 ] [ -4.286 2.14413333]] >>> print np.cov(x) 11.71
© 2008–2016 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.cov.html