Предположим, что матрицы X и Y имеют размер 2x3 и 2x2 соответственно. Функция cor в R возвращает матрицу 3x2, а функция numpy.corrcoef в Python возвращает матрицу 5x5. Примеры ниже:
Р:
X<-matrix(c(0.2,0.5,0.1,0.7,0.5,0.3), nrow=2, ncol=3)
Y<-matrix(c(0.2,0.3,0.6,0.7), nrow=2)
cor(X,Y)
[,1] [,2]
[1,] 1 1
[2,] 1 1
[3,] -1 -1
Питон:
X = np.array([[0.2,0.5], [0.1, 0.7], [0.5,0.3]], ndmin=2).T
Y = np.array([[0.2,0.3],[0.6,0.7]], ndmin=2).T
corr = np.corrcoef(X, Y, rowvar=False)
array([[ 1., 1., -1., 1., 1.],
[ 1., 1., -1., 1., 1.],
[-1., -1., 1., -1., -1.],
[ 1., 1., -1., 1., 1.],
[ 1., 1., -1., 1., 1.]])
Как заставить python возвращать матрицу 3x2, как в R? Или как мне выбрать правильные значения в матрице Python 5x5, чтобы они соответствовали результату R?
Я предполагаю, что причина упоминается здесь. Возможный дубликат
В R, когда x
и y
являются матрицами, cor(x,y)
вернет корреляцию столбцов x
(n = 3) со столбцами y
(n = 2). В python вы можете нарезать результат np.corrcoef()
, используя правильные индексы, которые в данном случае равны 3 и 2, для x
(строки) и y
(столбцы) соответственно результата.
np.corrcoef(X,Y)[0:3,0:2]
array([[ 1., 1.],
[ 1., 1.],
[-1., -1.]])
Возможно, это делает как
cor(cbind(X, Y))