узкое место производительности Python с lil_matrix - PullRequest
0 голосов
/ 25 августа 2018

В настоящее время я работаю с разреженной матрицей в Python. Я решил использовать lil_matrix для моей проблемы, потому что, как объяснено в документации, lil_matrix предназначен для использования для построения разреженной матрицы. Моя разреженная матрица имеет размеры 2500x2500

У меня есть два куска кода внутри двух циклов (которые повторяются в элементах матрицы), которые имеют разное время выполнения, и я хочу понять, почему. Первый -

current = lil_matrix_A[i,j]
lil_matrix_A[i, j] = current + 1
lil_matrix_A[j, i] = current + 1

По сути, просто берём каждый элемент матрицы и увеличиваем его значение на единицу. А второй, как показано ниже

value = lil_matrix_A[i, j]
temp = (value * 10000) / (dictionary[listA[i]] * dictionary[listB[j]])
lil_matrix_A[i, j] = temp
lil_matrix_A[j, i] = temp

В основном, беря значение, вычисляя формулу и вставляя это новое значение в матрицу. Первый код выполняется примерно за 0,4 секунды, а второй фрагмент кода - около 32 секунд. Я понимаю, что у второго есть дополнительный расчет в середине, но разница во времени, на мой взгляд, не имеет смысла. Индексирование по словарю и списку имеет сложность O (1), поэтому это не должно быть проблемой. Есть ли какие-либо предположения, что вызывает эту разницу во времени выполнения?

Примечание: количество элементов в списке и словаре также составляет 2500.

...