例如,如果我有一个4乘4的矩阵。有没有办法创建另一个矩阵(或原始矩阵的视图,甚至更好),这只是原始矩阵的第1行和第3行。
我只看到如何提取行或块,但没有我上面提到的。这是我的代码:
#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
,比如我采用1/5th
的A A'(m/5 X n) * B(n x k)
行就是我所追求的。我不需要A'
本身,这是我追求的产品。
答案 0 :(得分:0)
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);