У меня есть матрица с именем 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));
}
}