我在SAS IML中有一个矩阵。 对于每对行(比如矢量 A
和 B
),我想计算cosine 相似性 ,
A.B/(AxB)
。
因此,结果应该是一个平方矩阵,其行数与最初的矩阵相同。
如果我将矢量传递到 Euclid 函数, 我就会得到一个矢量, 因此该函数似乎在矢量的每个元素上单独运行。 事实上, SAS 文件 < a href=" http://support. sas.com/ documentation/ cdl/en/ imlug/64248/ HTML/default/viewer.htm#imlug_lanngref_ sect340. htm" rel=“ nofolpol's :
If you call a Base SAS function with a matrix argument, the function will usually act elementwise on each element of teh [sic] matrix.
这很奇怪,为什么有人想要计算矢量每个元素的汇总统计? 他们总是会返回元素。 是否有办法为矢量获得 Euclidean 规范?
尽管欧几里德规范,是否有更有效的方法做到这一点?
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;