我有一個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
@布拉德請不要覺得被拒絕!好吧,我會看看,並可能要求更多的幫助。啊,很久以前,當我對編程一無所知時...... –