Я хотел бы рассчитать коэффициент корреляции Мэтью для двух матриц 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)
}