我读了这个答案 用特征随机排列矩阵的行/列
但是他们将排列矩阵初始化为单位矩阵并进行随机洗牌。我想知道如何将矩阵初始化为特定的排列。
例如,如果我有一个整数向量,其中每个(索引、值(对意味着我想将列"索引"移动到列"值",我该怎么做?
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
如果我理解正确,您问题的答案是对您所链接的答案的轻微修改
Matrix3i A = Matrix3i::Random();
PermutationMatrix<3, 3> perm;
// Your permutation
perm.indices() = { 1, 2, 0 };
// Permutate rows
A = perm * A;