Добавление разреженной матрицы замедляется в цикле for - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть код, который строит очень большую разреженную матрицу в для l oop, как указано, где ядро ​​- это массив 39x39, а row_number и column_number - это размер ядра:

for i in np.arange(0,row_number):
    for j in np.arange(0,col_number):
        (x,y) = (i-midx,j-midy)
        diagmat = diagmat + diags([kernel[i,j]],(x*Ny-y),shape = (N,N))

Когда размер ядра и N малы, этот код работает достаточно быстро. Однако в некоторых случаях, например, когда размер ядра составляет 39x39, а N = 600, этот код работает очень медленно. И время работы увеличивается по мере прохождения циклов for. Например, в то время как самый внутренний для l oop работает на 0,02 se c в первой итерации, на последних итерациях это время увеличивается до 3 секунд.

Я думаю, что проблема заключается в том, что diagmat становится более плотным на протяжении итераций, поэтому сложение требует времени. Кстати, тип разреженных матриц csr.

Есть ли способ решить эту проблему и ускорить выполнение кода? Может быть, несколько советов для добавления или назначения?

...