Расчет коэффициента корреляции Мэтью для матрицы занимает слишком много времени - PullRequest
0 голосов
/ 17 сентября 2018

Я хотел бы рассчитать коэффициент корреляции Мэтью для двух матриц A и B. Цикл по столбцам A, вычислить MCC для этого столбца и всех 2000 строк матрицы B, а затем взять индекс max.Код:

import numpy as np
import pandas as pd
from sklearn.metrics import matthews_corrcoef as mcc

A = pd.read_csv('A.csv', squeeze=True)
B = pd.read_csv('B.csv', squeeze=True)

ind = {}
for col in A:
   ind[col] = np.argmax(list(mcc(B.iloc[i], A[col]) for i in range(2000)))
   print(ind[col])

Моя проблема в том, что это занимает очень много времени (одна секунда для каждого столбца).Я видел почти такой же код в R, работающий намного быстрее (примерно за 5 секунд).Как это может быть?Могу ли я улучшить свой код Python?


R Код:

A <- as.matrix(read.csv(file='A.csv'))
B <- t(as.matrix(read.csv(file='B.csv', check.names = FALSE)))
library('mccr')
C <- rep(NA, ncol(A))
for (query in 1:ncol(A)) {
    mcc <- sapply(1:ncol(B), function(i) 
           mccr(A[, query], B[, i]))
    C[query] <- which.max(mcc)
}
...