【发布时间】:2016-09-08 05:11:38
【问题描述】:
我有一个名为vectors[i][j]的矩阵。我想计算每一行之间的余弦相似度。例如对于这个矩阵
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
这是我定义和填充矩阵的代码部分;
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));
}
}
【问题讨论】:
-
删除 asp.net 标记,因为问题似乎与 asp.net 没有任何关系,添加 C#
标签: c# matrix cosine-similarity