Распараллелить это вложенный цикл в 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 сделает значительное улучшение.

Ответы на вопрос(0)

Ваш ответ на вопрос