[英]Permute Columns of Matrix in 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
如果我对您的理解正确,那么问题的答案就是对您链接的答案的轻微修改
Matrix3i A = Matrix3i::Random();
PermutationMatrix<3, 3> perm;
// Your permutation
perm.indices() = { 1, 2, 0 };
// Permutate rows
A = perm * A;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.