ColMajor 고유 SparseMatrix에서 열을 효율적으로 바꾸는 방법은 무엇입니까?eigen3에서 열을 바꾸는 방법 SparseMatrix
나는 시도 다음과 같은 : 나는 (? 할당 내가 가정 복사가되지 않습니다)이 작동하지 않는 이유는 실제로 이해하지 못하는 정확하지 않은 생각
SparseMatrix<mpz_class,ColMajor> H;
SparseVector<mpz_class> v;
// Somehow initialize H.
v = H.col(i);
H.col(i) = H.col(j);
H.col(j) = v;
예를 들어, 동안 의도 한대로 작동하도록 보인다 다음
v = H.col(i); w = H.col(j);
H.col(i) = s*v + t*w; // s, t are some mpz_class elements.
실제로 작동하는 방법 :
이SparseMatrix<mpz_class,ColMajor> H, H_;
PermutationMatrix<Dynamic,Dynamic> P;
P.setIdentity();
P.applyTranspositionOnTheRight(i,j);
H_ = H; H = H_ * P;
지금은 가정이 전체 행렬 H의 복사본을 만듭니다를? 그래서 나는 첫 번째 방법을 선호 할 것이고, 어떤 경우에는 H *= P
을 효율적으로 사용할 수있다. 또는 swap(H.col(i),H.col(j))
과 같은 것입니다.
고마워요! 그래서 올바르게 이해한다면, 대입은 복사본을 만들고 그 행렬을 읽는 동안 행렬을 조작하기 때문에'H.col (i) = H.col (j);'행에 문제가 있습니까? 그렇다면 'H.col (i) - = H.col (j)'와 같은 내부 조작에도 동일한 문제가 존재합니까? – 1k5