矩阵中每行的余弦相似度

时间:2016-05-12 11:34:51

标签: c# matrix cosine-similarity

我有一个名为vectors [i] [j]的矩阵。我想计算每一行之间的余弦相似度。例如对于这个matrice

    1 0 1 0 1 0 0
v=  0 0 1 1 1 0 1
    1 1 0 0 1 0 1

我想在第1行和第2行,第1行和第3行,第2行和第3行之间进行相似度计算。如果第1行和第2行之间的相似性等于= 0.6而其他数据分别为0.5和0.4,则更多。我想将这些值添加到行的每个元素(e =!0)上,并得到像这样的最终矩阵。

    2.1    0    2.1   0   2.1    0    0
v=  0      0     2    2    2     0    2
    1.9   1.9    0    0   1.9    0   1.9

以下是我定义和填充我的matrice的代码部分;

string text = Request.Form["TextBox1"]; ; // text
            string[] textInArray = text.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
            int[,] vectors = new int[textInArray.Length, keywords.Length];

            for (int i = 0; i < textInArray.Length; i++)
            {
                string[] words = textInArray[i].Split(' ');
                for (int j = 0; j < keywords.Length; j++)
                {
                    foreach (var word in words)
                    {
                        if (word.Contains(keywords[j]))
                        {
                            vectors[i, j]++;
                        }
                    }
                }
            }

以下是我的计算相似度的代码,但我认为在某些地方我有错误并不完整,我不知道如何在当前两行的元素上添加此值。

for(i=1 i<matrix.GetLength(0) i++){
   for(j=1 j<matrix.GetLength(0) j++){
            dot += vectors[i] * vectors[j];
            mag1 += Math.Pow(vectors[i], 2);
            mag2 += Math.Pow(vectors[j], 2);
        }

        float M= dot / (Math.Sqrt(mag1) * Math.Sqrt(mag2));  

}
}

0 个答案:

没有答案