Корреляция дает вам нормализованное представление ковариационной матрицы между всеми "столбцами" кадра данных. Например, в случае наличия только двух переменных у вас получится матрица формы:
Rx = [[ 1, r_xy],
[r_yx, 1]]
Это довольно дорогое вычисление, так как оно включает в себя скалярное произведение каждого столбца с остальными, что приводит к коэффициенту корреляции для каждой комбинации.
Таким образом, в матричной записи, поскольку вы хотите получить матрицу 10x10
, вы хотите, чтобы фигуры были правильно выровнены. В этом случае вы хотите (10,1460)x(1460,10)
, поэтому вы получите матрицу 10,10
. Следовательно, вам нужно транспонировать 2D-массив таким образом, чтобы он имел форму (10,1460)
, когда вы подаете его на np.corrcoef
.
Хотя вы можете найти его немного проще, поиграв с ним самостоятельно и увидев, как фактическая вычисляется корреляция Пирсона :
X = np.random.randint(0,10,(500,2))
print(np.corrcoef(X.T))
array([[1. , 0.04400245],
[0.04400245, 1. ]])
, которая делает то же, что и:
mean_X = X.mean(axis=0)
std_X = X.std(axis=0)
n, _ = X.shape
print((X.T-mean_X[:,None]).dot(X-mean_X)/(n*std_X**2))
array([[1. , 0.04416552],
[0.04383998, 1. ]])
Обратите внимание, что, как уже упоминалось, это дает в результате нормализованный точечный продукт из X с самим собой, поэтому для каждого (1,1460)x(1460,1)
продукта вы получаете один номер. Поэтому X
здесь, как и в вашем примере, необходимо транспонировать, чтобы размеры были правильно выровнены.