我在SAS IML中有一個矩陣。對於每一對行(說矢量A
和B
),我想計算的cosine similarity,計算SAS/IML中的餘弦相似度
A . B/(||A|| x ||B||)
。
所以結果應該是一個與初始矩陣行數相同的方陣。
如果我將一個向量傳遞給Euclid函數,我得到一個向量,所以函數似乎分別作用於向量的每個元素。事實上,SAS文檔says:
如果你調用一個基地,以矩陣 說法SAS功能,該功能通常會 德[原文]矩陣中的每個元素採取行動的elementwise。
這很奇怪 - 爲什麼會有人想爲矢量的每個元素計算彙總統計?他們將始終只返回元素。有一種方法可以獲得矢量的歐幾里德準則嗎?
我的代碼如下。儘管歐幾里得規範,是否有更有效的方法來做到這一點?
proc iml;
use fundstr;
read all var _all_ into wgts;
nrows=nrow(wgts);
d=j(nrows,nrows,0);
do i = 1 to nrows;
do j = i to nrows;
tmp = wgts[i,]*wgts[j,]`; /** need to divide by norms each vector **/
d[i,j] = tmp;
d[j,i] = tmp;
end;
end;
quit;