У меня есть код, который строит очень большую разреженную матрицу в для 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.
Есть ли способ решить эту проблему и ускорить выполнение кода? Может быть, несколько советов для добавления или назначения?