我有一个TF/IDF向量的语料库V
,所以它们很稀疏。
这是一个数组大约2,500到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下面
给定一个数学任务(函数最大化),标准函数是什么?对此没有明确的说明。 *(cit。)*是“计算最有效的方法**(在此计算中使用Chapel)”的定量度量是什么?感谢Brian添加了这样一个清晰明了的声明,以使这种优化工作不会在移动的沙子上运行。 – user3666197
@ brian-dolan:上面的代码中有一些错误,我试图编辑,但它被拒绝,说我需要将编辑信息传达给你。问题在于ndocs和nftrs被声明为域,但随后用于声明一个数组(需要范围)以及内部for循环(需要一个整数)的绑定。这里是我提出的修正: 使用Norm,LinearAlgebra; VAR ndocs = 2500, nftrs = 150000, 文档= 1..ndocs, FTRS = 1..nftrs, 五:[文档,FTRS]真实, X:[文档,文档]真实; 我在文档{ – Brad
@布拉德请不要觉得被拒绝!好吧,我会看看,并可能要求更多的帮助。啊,很久以前,当我对编程一无所知时...... –