gpt4 book ai didi

performance - Scipy Python 中的高效并行稀疏矩阵点积

转载 作者:行者123 更新时间:2023-12-01 19:33:00 24 4
gpt4 key购买 nike

我有一个非常大的(1.5M x 16M)稀疏csr scipy矩阵A。我需要计算的是每对行的相似度。我将相似度定义为:

Assume a and b are two rows of matrix A
a = (0, 1, 0, 4)
b = (1, 0, 2, 3)
Similarity (a, b) = 0*1 + 1*0 + 0*2 + 4*3 = 12

为了计算所有成对行相似度,我使用这个(或余弦相似度):

AT = np.transpose(A)
pairs = A.dot(AT)

现在,pairs[i, j] 是所有此类 i 和 j 的行 i 和行 j 的相似度。这与行的成对余弦相似度非常相似。因此,如果有一种有效的并行算法来计算成对余弦相似度,它也适合我。

问题:这个点积非常慢,因为它只使用一个 cpu(我可以访问我的服务器上的 64 个 cpu)。

我还可以将 A 和 AT 导出到文件中,并运行任何其他并行执行乘法的外部程序,并将结果返回给 Python 程序。

有没有更有效的方法来完成这个点积?或者并行计算成对相似度?

最佳答案

我最终使用了 scikit-learn 的“余弦”距离度量及其支持稀疏矩阵且高度并行化的pairwise_distances 函数。

sklearn.metrics.pairwise.pairwise_distances(X, Y=None, metric='euclidean', n_jobs=1, **kwds)

我还可以将 A 分成 n 个水平部分,并使用并行 python 包运行多个乘法,并稍后水平堆叠结果。

关于performance - Scipy Python 中的高效并行稀疏矩阵点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28184191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com