Как посчитать процент схожести двух массивов разной длины в php

Я получил записи двух пользователей из базы данных в двух массивах соответственно. Записи людей, которые следят за другими людьми, как в твиттере. Так как два пользователя могут быть подписаны на разное количество людей. Таким образом, длина двух массивов различна. я создал новый массив, в котором хранятся обычные люди (люди, за которыми следуют оба пользователя). Как я могу получить % сходства двух пользователей. Допустим, если у двух пользователей есть 5 общих подписчиков, у них больше общего, чем у 2 пользователей, имеющих 2 общих.

foreach($common as $row){
//do events
echo $row['name']."<br>";
$count_common++;
}
echo "total common ".$count_common;
$similarity = (count($common)/(count($user1_follows))*100);

Приведенная выше формула не дает правильного результата, поскольку она основана на массивах одинаковой длины. Вот связанный с моим вопросом вопрос получить процент сходства из двух массивов в php


person Faizan    schedule 02.01.2013    source источник


Ответы (1)


$p1 = array("foo", "bar", "grep");
$p2 = array("foo", "buzz", "fizz", "bar");
$similar = array_intersect($p1, $p2);
$p1_perc = count($similar) / count($p1); // 0.66..
$p2_perc = count($similar) / count($p2); // 0.5

Чтобы получить один номер:

$perc = 2 * count($similar) / (count($p1) + count($p2)); // 0.5714..
person Halcyon    schedule 02.01.2013
comment
Спасибо за быстрый ответ, вы рассчитали% сходства каждого массива. Я хочу найти% сходства обоих массивов в одном постоянном числе. Например, UserA имеет 75% сходство с UserB, UserC имеет 10% сходство с User D. Вот так. - person Faizan; 02.01.2013
comment
Просто усредните 2 числа. Вы также можете сделать среднее в квадрате или логарифмическое. Выбранный вами метод будет зависеть от лежащего в его основе математического принципа. Это выше моего понимания. - person Halcyon; 02.01.2013
comment
именно такие ответы делают stackoverflow таким крутым :) спасибо @FritsvanCampen - person pzirkind; 02.01.2013
comment
В среднем по двум числам вы имели в виду усреднение двух процентов? $p1_perc и $p2_perc? - person Faizan; 02.01.2013
comment
Что, если бы вы просто сделали `($p1_perc+$p2_perc)/2? это сработает - person Faizan; 02.01.2013
comment
Что ж, похоже, что 2 * sim / (p1 + p2) не совпадает с avg(sim / p1, sim / p2). Я уверен, что какой-нибудь любитель математики мог бы объяснить, какой из них правильный. - person Halcyon; 02.01.2013