Eigen Matrix是否支持向量索引?

时间:2014-08-15 18:16:30

标签: c++ c++11 eigen

例如,如果我有一个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'本身,这是我追求的产品。

1 个答案:

答案 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);