scipy.spatial.distance.

correlation#

scipy.spatial.distance.correlation(u, v, w=None, centered=True)[source]#

Compute the correlation distance between two arrays.

The correlation distance between u and v, is defined as

\[1 - \frac{(u - \bar{u}) \cdot (v - \bar{v})} {{\|(u - \bar{u})\|}_2 {\|(v - \bar{v})\|}_2}\]

where \(\bar{u}\) is the mean of the elements of u and \(x \cdot y\) is the dot product of \(x\) and \(y\).

Parameters:
u(…, N) array_like of floats

Input array.

v(…, N) array_like of floats

Input array.

w(…, N) array_like of floats, optional

The weights for each value in u and v. Default is None, which gives each value a weight of 1.0

centeredbool, optional

If True, u and v will be centered. Default is True.

Returns:
correlationfloat or array

The correlation distance between arrays u and v.

Notes

Array API Standard Support

correlation has support for Python Array API Standard compatible backends in addition to NumPy. The following combinations of backend and device (or other capability) are supported.

Library

CPU

GPU

NumPy

✅

n/a

CuPy

n/a

✅

PyTorch

✅

✅

JAX

✅

✅

Dask

✅

n/a

See Support for the array API standard for more information.

Examples

Find the correlation between two arrays.

>>> from scipy.spatial.distance import correlation
>>> correlation([1, 0, 1], [1, 1, 0])
1.5

Using a weighting array, the correlation can be calculated as:

>>> correlation([1, 0, 1], [1, 1, 0], w=[0.9, 0.1, 0.1])
1.1

If centering is not needed, the correlation can be calculated as:

>>> correlation([1, 0, 1], [1, 1, 0], centered=False)
0.5