`numpy.corrcoef` возвращает массив, имеющий неожиданную форму - PullRequest
0 голосов
/ 25 сентября 2018

Я делаю следующее:

from numpy import corrcoef
R= corrcoef(X, X, rowvar=False)

, где X имеет форму (M, N).(Есть M наблюдений, каждое из которых состоит из вектора длины N).Я ожидал получить массив, имеющий форму (N, N), но вместо этого я получил массив, имеющий форму (2 * N, 2 * N).Любое объяснение будет оценено.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Да, по какой-то причине np.cov и np.corrcoef оба объединяют входы, а затем всегда делают автоковариацию конкатенированного массива.К счастью, вы можете просто не давать второй массив, и вы получите автоковариантность первого параметра (поскольку по умолчанию y = None.)

R = corrcoef(X, rowvar = False)

Если вы нене делайте автоковариацию, лучше всего было бы либо использовать scipy.spatial.distance.cdist с metric = 'correlation', либо просто выполнить расчет в произвольном порядке:

X_ = X - X.mean(-1)
Y_ = Y - Y.mean(-1)
X_var = np.einsum('ij, ij -> j', X_, X_)
Y_var = np.einsum('ij, ij -> j', Y_, Y_)
R = (X_.T @ Y_) / (X_var[:, None] * Y_var)
0 голосов
/ 25 сентября 2018

Каждый квадрант NxN является ковариационной матрицей.

a3 = corrcoeff(a1,a2,rowvar = False)

a1 и a2, очевидно, имеют одинаковый размер.

  1. верхний левый квадрант - это вариация каждой переменной a1 по отношению кa1
  2. верхний правый квадрант - это изменение a1 относительно a2
  3. нижний левый угол - это изменение a2 относительно a1
  4. нижний правый угол - это изменение a2 относительно a2

Если a1 и a2 одинаковы, вы найдете диагонали каждого квадранта своими.

Если вы просто хотите увидеть, как меняется каждая переменная:

a3 = numpy.cov(a1,a1,rowvar=False)[:N,:N]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...