Tôi làm việc trên phân cụm kết tụ phân cấp trên số lượng lớn vectơ đa chiều, và tôi nhận thấy rằng nút cổ chai lớn nhất là việc xây dựng ma trận khoảng cách. Một thực hiện ngây thơ cho nhiệm vụ này là như sau (ở đây trong Python):Xây dựng song song ma trận khoảng cách
''' v = an array (N,d), where rows are the observations
and columns the dimensions'''
def create_dist_matrix(v):
N = v.shape[0]
D = np.zeros((N,N))
for i in range(N):
for j in range(i+1):
D[i,j] = cosine(v[i,:],v[j,:]) # scipy.spatial.distance.cosine()
return D
tôi đã tự hỏi đó là cách tốt nhất để thêm một số xử lý song song để thói quen này. Một cách dễ dàng là phá vỡ và gán vòng lặp ngoài cho một số công việc, ví dụ: nếu bạn có 10 bộ vi xử lý, hãy tạo 10 công việc khác nhau cho các phạm vi khác nhau của i
và sau đó ghép nối các kết quả. Tuy nhiên giải pháp "ngang" này có vẻ không đúng. Có bất kỳ thuật toán song song nào khác (hoặc các thư viện hiện có) cho tác vụ này không? Bất cứ sự giúp đỡ nào cũng được đánh giá cao.
Đây không phải là những gì được thực hiện bởi 'scipy.spatial.distance.cdist (XA, XB, 'cosine')' – TJD
Nó thực sự là những phương pháp song song? Tôi hiện đang sử dụng 'pdist' nhưng phải mất quá nhiều thời gian. – dkar
Không song song, nhưng có lẽ nhanh hơn nhiều vì bạn sẽ làm nhiều công việc hơn trong mã C gốc hơn là python. – TJD