我有一个V
TF/IDF 向量的语料库,所以它们非常稀疏。
这是一个大约 2,500 x 150,000 的数组。
我想计算语料库中每个文档之间的余弦相似度。
这几乎是我能想到的最天真的方式。我已经知道三四个优化,但我不想假设答案。我想知道在此计算中使用 Chapel 的计算效率最高的方法。目标是得到X
一个对称矩阵diag(X) = 0
use Norm,
LinearAlgebra;
var ndocs = 2500,
nftrs = 150000,
docs = 1..ndocs,
ftrs = 1..nftrs,
V: [docs, ftrs] real,
X: [docs, docs] real;
for i in docs {
var n1 = norm(V[i,..]);
for j in (i+1)..ndocs {
var n2 = norm(V[j,..]);
var c = dot(V[i,..], V[j,..]) / (n1*n2);
X[i,j] = c;
X[j,i] = c;
}
}
编译使用
chpl -I/usr/local/Cellar/openblas/0.2.20/include -L/usr/local/Cellar/openblas/0.2.20/lib -lblas cosim.chpl
== 更新 ==
这实际上应该可以编译和运行。原始代码有以下@bradcray 建议的错误