jax.numpy.corrcoef#

jax.numpy.corrcoef(x, y=None, rowvar=True, dtype=None)[源代码]#

计算 Pearson 相关系数。

JAX 实现 numpy.corrcoef()

这是由 jax.numpy.cov() 计算的样本协方差的归一化版本。对于样本协方差 \(C_{ij}\),相关系数为

\[R_{ij} = \frac{C_{ij}}{\sqrt{C_{ii}C_{jj}}}\]

它们的构造方式使得值满足 \(-1 \le R_{ij} \le 1\)

参数:
  • x (ArrayLike) – 形状为 (M, N) (如果 rowvar 为 True) 或 (N, M) (如果 rowvar 为 False) 的数组,表示 M 个变量的 N 个观测值。x 也可以是一维的,表示单个变量的 N 个观测值。

  • y (ArrayLike | None) – 可选的附加观测集,形式与 m 相同。如果指定,则 y 将与 m 合并,即对于默认的 rowvar = True 情况,m 将变为 jnp.vstack([m, y])

  • rowvar (bool) – 如果为 True (默认),则 m 的每一行代表一个变量。如果为 False,则每一列代表一个变量。

  • dtype (DTypeLike | None) – 结果的可选数据类型。必须是浮点或复数类型;如果未指定,则将根据输入的 dtype 确定。

返回:

形状为 (M, M) 的协方差矩阵。

返回类型:

Array

另请参阅

示例

考虑这两个变量完美相关的观测值。在这种情况下,相关矩阵是一个 2x2 的全 1 矩阵。

>>> x = jnp.array([[0, 1, 2],
...                [0, 1, 2]])
>>> jnp.corrcoef(x)
Array([[1., 1.],
       [1., 1.]], dtype=float32)

现在考虑这两个变量完美反相关的观测值。在这种情况下,相关矩阵的非对角线元素为 -1

>>> x = jnp.array([[-1,  0,  1],
...                [ 1,  0, -1]])
>>> jnp.corrcoef(x)
Array([[ 1., -1.],
       [-1.,  1.]], dtype=float32)

等效地,这些序列可以作为单独的参数指定,在这种情况下,在继续计算之前会将它们堆叠起来。

>>> x = jnp.array([-1, 0, 1])
>>> y = jnp.array([1, 0, -1])
>>> jnp.corrcoef(x, y)
Array([[ 1., -1.],
       [-1.,  1.]], dtype=float32)

相关矩阵的条目经过归一化,使其位于 -1 到 +1 的范围内,其中 +1 表示完全相关,-1 表示完全反相关。例如,这是从三维标准正态分布中提取的 100 个点的相关性。

>>> key = jax.random.key(0)
>>> x = jax.random.normal(key, shape=(3, 100))
>>> with jnp.printoptions(precision=2):
...   print(jnp.corrcoef(x))
[[1.   0.03 0.12]
 [0.03 1.   0.01]
 [0.12 0.01 1.  ]]