Scipy spsolve на порядок медленнее, чем matlab mldivide - PullRequest
0 голосов
/ 12 мая 2019

Хорошо, у меня есть линейная система. A разрежен 29791 на 29791 с 202771 сохраненными элементами B - 29791 на 1 с 4561 сохраненными элементами.

Я попытался решить эту систему, сохранив A как csr_matrix и csc_matrix, а B как обычный массив numpy. Матрицы csr и csc занимают около минуты. Затем я попытался сохранить триплеты (строки, столбцы, данные) в формате csv, импортировать их в matlab и затем выполнить:

Asp = sparse(data(:, 1), data(:, 2), data(:, 3))
P = Asp\b

Это займет около секунды, если не меньше. Почему Matlab почти на 2 порядка быстрее, чем Scipy, и как я могу ускорить это вычисление? Даже Matlab Mldivide занимает менее 2 секунд.

A = csc_matrix((data, (np.asarray(rows), np.asarray(cols))), shape=A_shape)
P = spsolve(A, csc_matrix(B))

Я ожидаю, что scipy spsolve будет на максимуме в два раза медленнее, чем обратная косая черта Matlab, но это не так.

...