matlab - 如何在MATLAB中计算两个频率向量之间的余弦相似度?
问题描述
我需要在 MATLAB 中找到两个频率向量之间的余弦相似度。
示例向量:
a = [2,3,4,4,6,1]
b = [1,3,2,4,6,3]
如何在 MATLAB 中测量这些向量之间的余弦相似度?
解决方案
快速了解余弦相似度的数学定义。
根据定义,您只需要向量的点积除以这些向量的欧几里得范数的乘积。
% MATLAB 2018b
a = [2,3,4,4,6,1];
b = [1,3,2,4,6,3];
cosSim = sum(a.*b)/sqrt(sum(a.^2)*sum(b.^2)); % 0.9436
或者,您可以使用
cosSim = (a(:).'*b(:))/sqrt(sum(a.^2)*sum(b.^2)); % 0.9436
这给出了相同的结果。
阅读此正确答案后,为避免将您带到另一座城堡,我添加了另一种使用 MATLAB 内置线性代数函数的方法,dot()
并且norm()
.
cosSim = dot(a,b)/(norm(a)*norm(b)); % 0.9436
另请参阅tag-wiki以了解cosine-similarity。
方法性能:
sum(a.*b)/sqrt(sum(a.^2)*sum(b.^2))
(a(:).'*b(:))/sqrt(sum(a.^2)*sum(b.^2))
dot(a,b)/(norm(a)*norm(b))
每个点代表10 个随机生成的向量的计算时间的几何平均值。
推荐阅读
- flutter - 如何使用flutter Web在listview中动态添加下拉按钮或删除下拉列表?
- ruby - 如何从 IRB 控制台使用 RSpec?
- python - 从按钮功能更新 many2one 域过滤器 [odoo12]
- python - 如何监听传入的 jdbc 连接?
- arduino - 将 ESP-01S 刷入新固件,现在无法发送任何 AT 命令
- javascript - jQuery JavaScript 从聊天系统自动滚动到底部 $(element)[0] Vs $(element)
- puppeteer - Puppeteer js id 元素包含
- regex - 如果字符串不包含破折号,则修改此 yup 验证以将最大长度更改为 9
- github - github标签在不同时间创建和推送,github标签上的时间是什么时候
- jquery - 将类添加到父 div,然后将其删除