J'ai un J'ai besoin de soustraire à la diagonale de la première matrice la valeur des éléments de la deuxième matrice. p> exemple: p> Comment puis-je faire? p> p> Eigen :: matrixxd code> et j'ai besoin de modifier la valeur des éléments dans sa diagonale. En particulier, j'ai un autre
Eigen :: matrixxd code> avec une seule colonne et le même nombre de lignes de la première matrice.
4 Réponses :
for(int i = 0; i < matrix1.rows(); ++i) matrix1(i, i) -= matrix2(i, 0); This code iterates over each row of the matrix (matrix1.rows()) and subtracts the corresponding value of matrix2 (matrix2(i, 0)) from the diagonals in matrix1 (matrix1(i, i)).
Bien que ce code puisse répondre à la question, fournissant un contexte supplémentaire concernant la raison et / ou la manière dont ce code répond à la question améliore sa valeur à long terme.
Cela fonctionne pour moi:
A_2=A-B.asDiagonal();
manipulation matricielle dans Pour votre problème indiqué, la solution est donnée ci-dessous. p> Cependant, j'utiliserais matrix3d et vector3d pour la première et la deuxième matrice, respectivement. P> p> Eigen code> Très similaire à celui des tableaux. L'indexation commence de zéro et il est majeur de la ligne. La documentation ( Eigen: la classe matricielle est bien écrite et peut vous aider à résoudre les problèmes futurs .
Il est probablement préférable d'utiliser matb.Rows () code> au lieu d'un numéro codé dur
3 code>, comme fait dans la réponse par @ otah007
Le moyen le plus simple et le plus rapide de faire est: bien sûr, mieux utiliser le type vectoriel code> pour les vecteurs (ici pour
B < / Code>), et enfin si
B code> est constant, vous pouvez utiliser des installations de réseau: p>
Comment est-ce plus simple et plus rapide que a - b.asdiagonal () code>?
Peut-être parce qu'il évite de créer B en tant que matrice diagonale et ne doit-il faire que des calculs A2.Rows () plutôt que A2.SIZE? Bien que je suppose que l'Eigen est assez intelligent quand il sait que B.ASDIAGONAL () est diagonale.
Soustrayez une diagonale arbitraire? Ou est-ce toujours 1 (en d'autres termes soustrayez-vous toujours le Matrice d'identité )
@Corykramer diagonale arbitraire