0
Eigen에서 희소 행렬의 행과 열을 바꾸고 싶습니다. 여기에 코드가 있지만 작동하지 않습니다.Eigen에서 희소 행렬을 바꿔서
#include <iostream>
#include <Eigen/Core>
#include <Eigen/SparseCore>
typedef Eigen::SparseMatrix<double> SpMat;
using namespace Eigen;
using namespace std;
int myrandom (int i) { return std::rand()%i;}
int main() {
PermutationMatrix<Dynamic,Dynamic> perm(5);
MatrixXd x = MatrixXd::Random(5,5);
SpMat y = x.sparseView();
int dim=5;
perm.setIdentity();
for (int i=dim-1; i>0; --i) {
swap (perm.indices()[i],perm.indices()[myrandom(i+1)]);
}
cout << "permutation\n" << perm.indices() << endl << endl;
cout << "original x\n" << y << endl << endl;
cout << "permuted left x \n" << perm * y << endl << endl;
cout << "permuted right x \n" << y * perm << endl << endl;
cout << "permuted both x \n" << perm * y * perm << endl << endl;
}
행을 순차적으로 바꾸고 열을 바꾸지 만 두 가지를 모두 수행하지는 않습니다. 누구든지 어떻게 열과 행을 대체 할 수 있는지 알고 있습니까?
감사합니다.
SpMat z = y.twistedBy(perm);
그렇지 않으면, 당신은 하나를 적용한 다음 다른 :
SpMAt z = (perm * y).eval() * perm;
감사를 – user4440672
나는 그것을 이해했다. 새로운 변수를 만들고 evalTo를 사용할 수 있습니다 :'SpMat k; z.evalTo (k)'. 나는'z.evalTo (y)'를 수행하면 오류가 있는지 궁금합니다. 그리고 이러한 작업 중 어느 것이 얼마나 시간과 메모리면에서 얼마나 효율적인지 알 수 있습니다. 감사. – user4440672