私は非常に大きな (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 の類似度です。これは、行のペアワイズ コサイン類似度に非常に似ています。したがって、ペアワイズコサイン類似度を計算する効率的な並列アルゴリズムがあれば、それは私にとってもうまくいくでしょう。
問題: この内積は 1 つの CPU しか使用しないため、非常に低速です (サーバー上で 64 個の CPU にアクセスできます)。
また、A と AT をファイルにエクスポートし、乗算を並行して行う他の外部プログラムを実行して、結果を Python プログラムに戻すこともできます。
このドット積を行うより効率的な方法はありますか? または並列でペアごとの類似性を計算しますか?