例如,如果我有一个 4 x 4 矩阵。有没有办法创建另一个矩阵(或原始矩阵的 View ,甚至更好),它只是原始矩阵的第 1 行和第 3 行。
我只看到如何提取一行或一个 block ,但没有看到我上面提到的内容。这是我的代码:
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
int main()
{
Matrix4f m = Matrix4f::Random();
std::cout << "Matrix : " << std::endl;
std::cout << m << std::endl;
std::cout << "row" << std::endl;
std::cout << m.row(1) << std::endl;
std::cout << "block : " << std::endl;
std::cout << m.block(1,0,2,4) << std::endl;
return 0;
}
一个潜在的解决方案是用一个 1 和 0 的矩阵预乘我的矩阵,
z = ([[ 0., 1., 0., 0.],
[ 0., 0., 0., 1.]])
z * m 会给我我想要的,但有没有更好的解决方案。
编辑:
我想做的事情的可能应用:
假设我有矩阵 A(m x n)
和 B(n x k)
。我想从 A
中采样并乘以 B
,假设我取 A 行的 1/5
A'(m/5 X n) * B(n x k)
是我所追求的。我不需要 A'
本身,它就是我所追求的产品。
最佳答案
Eigen 的置换矩阵可能就是您正在寻找的:
Randomly permute rows/columns of a matrix with eigen
using Eigen;
Matrix4f m = Matrix4f::Random();
PermutationMatrix<Dynamic,Dynamic> P(4);
perm.indices()[0] = 1;
perm.indices()[1] = 3;
MatrixXf B = (m * P).leftCols(2);
关于c++ - Eigen 矩阵是否支持 vector 索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25331875/