【发布时间】:2018-06-14 13:17:52
【问题描述】:
我想在 matlab 中计算矩阵的不同行之间的余弦相似度。我在matlab中写了如下代码:
for i = 1:n_row
for j = i:n_row
S2(i,j) = dot(S1(i,:), S1(j,:)) / (norm_r(i) * norm_r(j));
S2(j,i) = S2(i,j);
矩阵S1为11000*11000,代码执行非常耗时。所以,我想知道matlab中是否有任何函数可以比上面的代码更快地计算矩阵行之间的余弦相似度?
【问题讨论】:
-
我想你在找
S2 = 1 - pdist(S1, 'cosine'), ch.mathworks.com/help/stats/pdist.html -
S2 = 1 - pdist(S1, 'cosine')返回一个数字,而我需要一个 n×n 矩阵,它的每个元素都包含S2(i,j) =dot(S1(i,:), S1(j,:)) / (norm_r(i) * norm_r(j)) -
什么是
norm_r? -
@Cris Luengo
norm_r = sqrt(sum(abs(S1).^2,2));
标签: matlab matrix cosine-similarity