算法的相似性?

| 如果这看起来像是重复的话,我深表歉意,但是由于前面的问题似乎引起了一些困惑,因此这是另一回事。 我有2个基本数组:
float[] baseArr1 = new float[3] {0.430651724, 0.137407839, 0.177024469};
float[] baseArr2 = new float[3] {0.718210936, 0.001312795, 0.009634903};
和另外两个数组进行比较:
float[] compArr1 = new float[3] {1, 1, 1};
float[] compArr2 = new float[3] {1, 0, 0};
然后将compArr1和compArr2与baseArr1和baseArr2比较。我知道我应该得到的答案,但是我很难提出一种算法来给出答案。与baseArr1比较时,答案应为compArr1;与baseArr2比较时,答案应为compArr2。 请注意,两个baseArrs的值不一定必须加起来为1。此外,这里还有两个简洁的数组可以使我的观点更清楚:
float[] extraArr1 = new float[3] {.5, .3, .3};
float[] extraArr2 = new float[3] {.75, 0, 0};
其中extraArr1是compArr1的\'closer \'和extraArr2是compArr2的\'closer \'。我已经按照某些人的建议尝试了余弦相似度算法,但是有时答案是错误的。 标准是每个元素的值具有“更多”值。例如,compArr1的\'more \'值比compArr2更接近baseArr1,而compArr2的对baseArr2的'closeness \'比compArr1对baseArr2的亲近。 谢谢! 更新: 我得到了答案!我将其张贴在这里以供将来参考,我承认我遇到了很多麻烦,也使其他人感到困惑,但也感谢您尝试帮助我!这是我做的:
float[] pbaseArrX = new float[3];
float[] pcompArrX = new float[3];

float dist1 = 0, dist2 = 0;

for (int i = 0; i < baseArrX.Count; i++)
{
  pbaseArrX[i] = baseArrX[i] / (baseArrX[0] + baseArrX[1] + baseArrX[2]);
}

//Do the following for both compArr1 and compArr2;
for (int i = 0; i < compArrX.Count; i++)
{
  pcompArrX[i] = pcompArrX[i] / (pcompArrX[0] + pcompArrX[1] + pcompArr[2]);
}

//Get distance for both
for (int i = 0; i < pcompArrX.Count; i++)
{
  distX = distX + ((pcompArrX[i] - pbaseArrX[i])^2);
}

//Then just use conditional to determine which is \'closer\'
    
已邀请:
        您想从所有compArrX数组中找到最接近baseArr1的数组。 可以使用各种距离。最常见的是: 欧氏距离 明可夫斯基距离 出租车或曼哈顿的距离(这是Minkowski的
p=1
) Chebysev距离(这是Minkowski,
p=infinity
) 和其他许多人一样: Mahalanobis_distance是尺度不变的。如果您搜索统计信息和相关性,则会发现更复杂的算法,可能适合您的问题。参见维基百科的Correlation_and_dependence 我们无法确定哪一种最适合您的数据模型。     
        另一个相似(或不相似)的度量-地球移动者的距离     

要回复问题请先登录注册