Как суммировать две матрицы spars вместе в c ?

#c #matrix #sparse-matrix

#c #матрица #разреженная матрица

Вопрос:

Я хочу добавить две разреженные матрицы вместе в C ?

Комментарии:

1. как вы их сохраняете? Существует много способов хранения разреженной матрицы, и они более или менее независимы от используемого вами языка.

Ответ №1:

Вы добавляете матрицы в соответствии с этим правилом:

 A[i,j]   B[i, j] = C[i,j]
  

Две добавляемые матрицы должны иметь одинаковое количество строк и столбцов.

То, как вы это делаете для своей схемы хранения, зависит от того, как вы сопоставляете строки и столбцы. Но правила остаются неизменными, потому что именно так работают матрицы.

Комментарии:

1. 1, о наилучшем возможном ответе, учитывая предоставленную информацию. Возможно, стоит отметить, что условием для элемента (i, j), существующего в C, является существование этого элемента либо в A, либо В B, если вы случайно не заметили, что A [i, j] == -B [i, j], учитывая некоторую точность.

Ответ №2:

Если вы используете библиотеку boost::ublas, то вы можете просто сложить их вместе, что-то вроде этого.

 #include <boost/numeric/ublas/matrix_sparse.hpp>
using namespace boost::numeric::ublas;
compressed_matrix<double > A(30000, 100, 30000 ),B(30000, 100, 30000 ),C(30000, 100, 30000 );
A(1,1) = 1.0;
B(99,99) = 10.0;
C = A   B;