JavaScript 余弦相似度函数

Fut*_*ure 10 javascript trigonometry similarity

我正在尝试创建一个余弦相似度函数,然后在 HTML 元素中显示结果。我写了以下内容:

function cosinesim(A,B){
        var dotproduct=0;
        var mA=0;
        var mB=0;
        for(i = 0; i < A.length;){
            dotproduct += (A[i] * B[i]);
            mA += (A[i]*A[i]);
            mB += (B[i]*B[i]);
        }
        mA = Math.sqrt(mA);
        mB = Math.sqrt(mB);
        var similarity = (dotproduct)/(mA)*(mB)
        return similarity;
    }

//.....

var array1 = [1,0,0,1];
var array2 = [1,0,0,0];

var p = cosinesim(array1,array2);
document.getElementById("sim").innerHTML = String(p);
Run Code Online (Sandbox Code Playgroud)

我已经测试过,我输入的两个数组的长度相同,但是当我的代码运行到这个位时,它崩溃了,我似乎找不到问题所在。

如有任何帮助,我们将不胜感激,谢谢。

小智 11

function cosinesim(A, B) {
    var dotproduct = 0;
    var mA = 0;
    var mB = 0;

    for(var i = 0; i < A.length; i++) {
        dotproduct += A[i] * B[i];
        mA += A[i] * A[i];
        mB += B[i] * B[i];
    }

    mA = Math.sqrt(mA);
    mB = Math.sqrt(mB);
    var similarity = dotproduct / (mA * mB);

    return similarity;
}


var array1 = [1, 0, 0, 1];
var array2 = [1, 0, 0, 0];

var p = cosinesim(array1, array2);

console.log(p);
Run Code Online (Sandbox Code Playgroud)

这应该给出实际的余弦相似度。你失踪了:

  1. 如前所述,循环var ii++的and 。for
  2. (mA * mB)此行周围有额外的括号:var similarity = dotproduct / (mA * mB);如果没有它们,除法将在乘法之前完成。


use*_*238 3

i++在循环中错过了,这导致了无尽的循环

更换for(i = 0; i < A.length;)for(i = 0; i < A.length;i++)解决问题