Я имел большой успех в сокращении времени выполнения, используя линейные операторы (из scipy.sparse) вместо матриц / массивов. Тем не менее, я нахожусь на шаге в моем расчете, где я должен возвести в степень такой объект. Примером этого является:
H = LinearOperator((2 ** L, 2 ** L), matvec = f) #Defining the linear operator
psi0 = eigsh(H , k = 1 , which = 'SA')[1] #Obtaining the eigenvector
psi_t = expm_multiply(-1j * dt * H , psi0) #dt is a number
Когда я пытаюсь запустить это, я получаю следующую ошибку:
diag requires an array of at least two dimensions
Кажется, что нужно найти способ увидеть H как массив? Но документация для expm_multiply гласит, что первым аргументом может быть транспонируемый линейный оператор. Помогите! :(