2016-05-04 11 views
0

Zum Beispiel hinzuzufügen habe ich einen 10x10 Dünnbesetzte Matrix A, und ich möchte eine 3x3 Einheitsmatrix an der oberen linken Ecke von A. seinWie ein Blockmatrix auf eine spärliche Matrix in Eigen

A ist bekannt, hinzufügen in diesen 3 Einträgen bereits nicht Null.

Wenn ich die Werte einzeln hinzufügen muss, ist es auch in Ordnung, aber ich habe die Methode nicht gefunden, um Elemente in einer Sparse Matrix in Eigen zu manipulieren.

Habe ich etwas übersehen?

+1

See [diese] (http://stackoverflow.com/questions/35124470/Block-Operationen-auf-Sparse-Matrizen-Eigen-Toolbox-c) Post. Sie können wirklich nicht alle Blockoperationen für dünn besetzte Matrizen verwenden. –

+0

Wie wäre es mit Elementoperationen? Ich habe gesehen, dass es Einfügemethoden gibt, aber kann ich bestimmten Elementen Werte hinzufügen? – CathIAS

+0

Ich folge nicht. Was meinst du mit Elementoperationen und fügst bestimmten Elementen Werte hinzu? Etwas wie 'm (i, j) + = k;'? –

Antwort

0

Wenn alles, was Sie wollen, ist eine Operation auf ein bestimmtes Element zu einem Zeitpunkt anwenden, können Sie coeffRef wie so verwenden:

typedef Eigen::Triplet<double> T; 
std::vector<T> coefficients; 
for (int i = 0; i < 9; i++) coefficients.push_back(T(i, i, (i % 3) + 1)); 

Eigen::SparseMatrix<double> A(10, 10); 
A.setFromTriplets(coefficients.begin(), coefficients.end()); 

std::cout << A << "\n\n"; 

for (int i = 0; i < 3; i++) A.coeffRef(i,i) += 1; 
std::cout << A << "\n\n"; 
Verwandte Themen