Python - умножение разреженной строки матрицы на не разреженный вектор по индексу - PullRequest
2 голосов
/ 16 мая 2019

Мой текущий программный проект включает реализацию числового метода для решения линейных систем с помощью Python (так называемый SOR -Method). Это в основном работает так:

Дана линейная система:

ax1 + bx2 + cx3 = b1
dx1 + ex2 + fx3 = b2
gx1 + hx2 + ix3 = b3

Переставить уравнения в:

x1_new = (b1 - (bx2 + cx3)) / a
x2_new = (b2 - (dx1_new + fx3)) / e
x3_new = (b3 - (gx1_new + hx2_new)) / i

Как видите, значения x*_new обновляются с каждой строкой - это печальная причина, по которой я не могу использовать простые векторно-векторные результаты (я также должен делить на диагональный элемент - а не умножать его). Я должен идти элемент за элементом.

Я бы хотел работать с sparse -Матрицами. Но я еще не нашел способ, как проиндексировать разреженную матрицу и как выполнить операцию, описанную выше? Мол, единственное, что я нашел (относительно этого https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html), это использовать A[i].data, который возвращает ненулевые элементы строки i. Но в строке может быть много нулей. А также работа с большим количеством if / else для получения элемента по индексу не очень эффективна с 100.000 x 100.000 матрицей.

Есть идеи?

...