Я пытаюсь найти лучший способ сравнить большие наборы числовых последовательностей с другими большими наборами, чтобы ранжировать их по каждому Другие. Возможно, следующий пример игрушки поясняет проблему, когда списки a, b и c представляют черепицу размера 3 во временном ряду.хеширование больших последовательностей чисел, создание наборов хэшей, сохранение и сравнение подобия наборов с использованием python
a = [(1,2,3),(2,3,4),(3,4,5)]
b = [(1,2,3),(2,3,4),(3,4,7),(4,7,8)]
c = [(1,2,3),(2,3,5)]
set_a, set_b, set_c = set(a), set(b), set(c)
jaccard_ab = float(len(set_a.intersection(set_b)))/float(len(set_a.union(set_b)))
jaccard_bc = float(len(set_b.intersection(set_c)))/float(len(set_b.union(set_c)))
jaccard_ac = float(len(set_a.intersection(se t_c)))/float(len(set_a.union(set_c)))
Сходство между этими множествами:
jaccard_ab, jaccard_bc, jaccard_ac
(0.4, 0.2, 0.25)
Таким образом, в этом примере, мы можем видеть, что множество а и б наиболее близки со счетом 0,4.
У меня проблема с дизайном: 1) Поскольку каждый набор будет состоять из ~ 1000 черепиц, я получаю скорость, превращая каждую гальку в уникальный хэш, а затем сравнивая хеши? 2) Первоначально у меня есть более 10 000 наборов для сравнения, поэтому я думаю, что мне намного лучше хранить черепицу (или хеши, в зависимости от ответа на 1) в базе данных или травление. Это хороший подход? 3) Поскольку новый набор добавлен к моему рабочему процессу, мне нужно ранжировать его против всех существующих наборов и отображать, скажем, самые 10 самых похожих. Есть ли лучший подход, чем в примере с игрушкой?
Есть ли преимущество использования параллельного модуля для многопроцессорности для этой проблемы? –
@ Сет, спасибо за ваш ответ! –