У меня есть файл, подобный следующему:
A 1
A 1
A 2
A 3
B 2
B 3
C 2
C 3
, который я преобразовал в следующую структуру данных:
s = [set([1, 2, 3]), set([2, 3]), set([2,3])]
Чтобы найти длину пересечения всех 2-комбинаций,Я использую следующее:
from itertools import combinations
for i in combinations(s, 2):
inter = i[0] & i[1]
print len(inter)
Размер s
составляет 300 000 различных наборов, каждый из которых имеет длину около 1000.Есть два узких места:
- Чтение файла
- Вычисление длины пересечения
Возможно, первое неизбежно, но второеможет быть улучшена.У меня есть машина с 64 ядрами, поэтому мне было интересно, как распараллелить эту программу.Есть ли какая-нибудь библиотека сокращения карт, доступная для многоядерного компьютера?