我读了这个答案Randomly permute rows/columns of a matrix with eigen
但是他们将置换矩阵初始化为恒等矩阵并进行随机混洗。我想知道如何将矩阵初始化为特定的排列。
例如,如果我有一个整数向量,其中每个(索引,值)对都意味着我要将“索引”列移动到“值”列,该怎么做?
Eigen::MatrixXi M = Eigen::MatrixXi::Random(3,3);
std::vector<int> my_perm = {1,2,0};
some_function to return Matrix [M.col(1), M.col(2), M.col(0)]
编辑:dtell请在下面回答我的原始问题。
其他信息:
对于其他正在查看此问题的人来说-如果要对具有未知数量(在编译时)的向量的矩阵进行置换,可以执行以下操作:
Eigen::VectorXi indices(A.cols());
for(long i = 0; i < indices.size(); ++i) {
indices[i] = vector_of_indices[i];
}
Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic> perm;
perm.indices() = indices;
Eigen::MatrixXd A_permute = A * perm; \\ permute the columns
答案 0 :(得分:1)
如果我对您的理解正确,那么问题的答案就是对您链接的答案的轻微修改
Matrix3i A = Matrix3i::Random();
PermutationMatrix<3, 3> perm;
// Your permutation
perm.indices() = { 1, 2, 0 };
// Permutate rows
A = perm * A;