Распараллелить это вложенный цикл в Python
Я снова изо всех сил пытаюсь улучшить время выполнения этого куска кода. Поскольку вычисления действительно отнимают много времени, я думаю, что лучшим решением было бы распараллеливание кода.
Я впервые работал с картами, как объяснено вэтот вопрос, но затем я попробовал более простой подход, думая, что я мог бы найти лучшее решение. Однако я еще ничего не мог придумать, поэтому, поскольку это другая проблема, я решил опубликовать это как новый вопрос.
Я работаю на платформе Windows, используя Python 3.4.
Вот код:
similarity_matrix = [[0 for x in range(word_count)] for x in range(word_count)]
for i in range(0, word_count):
for j in range(0, word_count):
if i > j:
similarity = calculate_similarity(t_matrix[i], t_matrix[j])
similarity_matrix[i][j] = similarity
similarity_matrix[j][i] = similarity
Этоcalculate_similarity
функция:
def calculate_similarity(array_word1, array_word2):
denominator = sum([array_word1[i] + array_word2[i] for i in range(word_count)])
if denominator == 0:
return 0
numerator = sum([2 * min(array_word1[i], array_word2[i]) for i in range(word_count)])
return numerator / denominator
И объяснение коду:
word_count
общее количество уникальных слов, хранящихся в спискеt_matrix
это матрица, содержащая значение для каждой пары словвыход должен бытьsimilarity_matrix
чье измерениеword_count x word_count
также содержит значение сходства для каждой пары словможно хранить обе матрицы в памятипосле этих вычислений я могу легко найти наиболее похожие слова для каждого слова (или три самых похожих слова, как может потребоваться для задачи)calculate_similarity
принимает два списка с плавающей точкой, каждый для отдельного слова (каждый является строкой в t_matrix)Я работаю со списком из 13 тыс. Слов, и если я правильно рассчитал, время выполнения в моей системе составило бы несколько дней. Так что все, что сделает работу за один день, было бы замечательно!
Может быть, только parellelizing расчетnumerator
а такжеdenominator
вcalculate_similarity
сделает значительное улучшение.