В настоящее время я работаю над сценарием, который принимает данные для матрицы корреляции и вычисляет набор значений. этот шаг очень дорог, и я хотел бы найти способы ускорить или распараллелить его. Я пытался использовать Parallel (из python 'joblib), однако из-за перегрузки процессора (по крайней мере, из-за способа, которым я его параметризовал), он значительно медленнее, чем последовательная l oop.
import time
import numpy as np
import itertools
from sklearn.datasets import make_blobs
N = 5000
data,_ = make_blobs(n_samples=N,n_features=500)
G = np.corrcoef(data)
''' the cluster function '''
def clus_lc(i, j, G, ns=2):
''' c_s'''
cs = 2*(G[i,j]+1)-1e-6
''' A and B'''
if cs<=ns:
return 0
return 0.5*( np.log(ns/cs) + (ns - 1)*np.log( (ns**2 - ns) / ( ns**2 - cs) ) )
''' merge and time '''
indices = list(itertools.combinations(range(N),2))
t0 = time.time()
costs = np.zeros(len(indices))
k=0
for i, j in indices:
costs[k] = clus_lc(i,j,G)
k+=1
t1 = time.time()
toseq = t1-t0
print(toseq)