我需要计算包含数字行的巨大文件的余弦相似度,例如:
6 3 574
11 1 6 575 576 321
4 577 6 64
69 11 6 55
11 218 6 578 579 580 581 229 582 583 155 100 584 148 446 585
我已经将它存储在一个字符串矩阵中,这使得分割和每个数字都是不同的单元格。
string[] lines = FileBuff.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
FileMatrix = new string[lines.Length][];
for (int i = 0; i < lines.Length; i++)
{
FileMatrix[i] = lines[i].Split(new string[] { "\t", " " }, StringSplitOptions.None);
}
我的问题是如何计算行中的行的余弦相似度
不同尺寸?
对于分子,它必须是相同的大小(A [i] * B [i] + A [i + 1] * B [i + 1] + .....)
我找到了这个例子,就像我的字母一样,它也是同样的问题:
Document 1: The quick brown fox jumped over the lazy dog.
Global order: The quick brown fox jumped over the lazy dog
Vector for Doc 1: 1 1 1 1 1 1 1 1 1
Document 2: The runner was quick.
Global order: The quick brown fox jumped over the lazy dog runner was
Vector for Doc 1: 1 1 1 1 1 1 1 1 1
Vector for Doc 2: 1 1 0 0 0 0 0 0 0 1 1
在这种情况下,理论上我需要在末尾填充带有零的Document 1向量。我需要一些代码的帮助
答案 0 :(得分:0)
矢量必须具有相同的长度。如果不是,则必须用零填充具有较小维度的那个。基本上逻辑如下:
考虑2个向量:(0,1)和(0,0,1)。
第一个是2D,第二个是3D。您可以将2D矢量视为3D矢量,但位于(x,y)平面中。所以(0,1)相当于(0,1,0)。
另请参阅the Python section中对此问题的回答。
答案 1 :(得分:0)
取决于。
如果你的数据应该是一个连续的向量空间,那么向量必须是相同的长度。
如果您的数据是稀疏向量,那么根据定义,缺失值为0(通常)。
您的数据看起来好像只有1s的索引。
然后余弦归结为计算交叉点大小(除以几何平均长度);我会在这些数据上与Jaccard一起使用。
您需要知道输入格式 - 除非您提供数据编码的基本信息以及的含义,否则有多个答案。 强>