Как сравнить сходство между двумя массивами? Скажи, что у меня есть:
Base Array: [.5,0,0,0,.25,0,0,.25,0,0,0,0]
Array 1: [1,0,0,0,1,0,0,1,0,0,0,0]
Array 2: [0,0,1,0,0,0,1,0,0,1,0,0]
Array 3: [1,0,0,0,0,0,0,0,0,0,0,0]
Что касается приведенных выше массивов, ответ должен быть Array 1. Ответ - Array 1, потому что элементы массива «ближе» по структуре к элементам массива базового массива. В отличие от массива 3, .25 ближе к 1, чем к 0. Другой пример:
Base Array: [.75,0,0,0,0,0,0,0,.25,0,0,0]
Array 1: [1,0,0,0,1,0,0,1,0,0,0,0]
Array 2: [0,0,1,0,0,0,1,0,0,1,0,0]
Array 3: [1,0,0,0,0,0,0,0,0,0,0,0]
Какой в этом случае ответом должен быть Array 3.
Однако, используя мой текущий алгоритм (который я дам позже), ответ становится Массив 3. Вот что я использую:
for (int i = 0; i < basearray.Length; i++)
{
temp = (basearray[i] - arrayX[i]);
dist += temp * temp;
}
Итак, я думаю, что-то не так с моим алгоритмом? Или, может быть, мне нужно использовать «другой» алгоритм, а не расстояние (поскольку, по сути, .25 ближе к 0, чем к 1, но я хочу иначе).
Спасибо!
UPDATE:
Я нашел ответ! Спасибо всем за помощь. Вот оно:
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'