Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MATLAB中计算两个频率向量之间的余弦相似性?_Matlab_Vector_Cosine Similarity - Fatal编程技术网

如何在MATLAB中计算两个频率向量之间的余弦相似性?

如何在MATLAB中计算两个频率向量之间的余弦相似性?,matlab,vector,cosine-similarity,Matlab,Vector,Cosine Similarity,我需要在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.9

我需要在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内置线性代数函数的方法,以及

有关详细信息,请参见


方法性能:

  • 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个随机生成的向量的计算时间

    快速浏览一下的数学定义

    % 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
    
    从定义上讲,你只需要向量的平方除以向量的乘积

    % 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内置线性代数函数的方法,以及

    有关详细信息,请参见


    方法性能:

  • 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个随机生成的向量的计算时间

    如果您有统计工具箱,您可以使用带有输入标志的函数,输入标志为1减去余弦相似性:

    % 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
    
    a = [2,3,4,4,6,1];
    b = [1,3,2,4,6,3];
    result = 1-pdist2(a, b, 'cosine');
    

    如果您有统计工具箱,可以使用带有输入标志的函数,输入标志为1减去余弦相似性:

    a = [2,3,4,4,6,1];
    b = [1,3,2,4,6,3];
    result = 1-pdist2(a, b, 'cosine');
    

    @quart ul ainabid我正在测试以验证,但我猜测使用&的方法对于大向量(许多元素)将更快,但任何合理的向量长度在运行时都不会显示差异。@quart ul ainabid我正在测试以验证,但我猜测使用&的方法对于大向量(许多元素)将更快但是任何合理的向量长度都不会在运行时显示出差异。我这里不再有Matlab供您测试,但我相信下面链接中的函数可以快速帮助您实现所需功能(请参见选项卡“函数”):我这里不再有Matlab供您测试,但是我相信下面链接中的函数可以为您提供所需的快速帮助(请参见选项卡“函数”):非常聪明-我不会想到
    pdist2
    函数(+1)。在阅读了文档之后,它是一个非常通用的工具。非常聪明-我不会想到
    pdist2
    函数(+1)。在阅读了文档之后,它是一个非常通用的工具。