【问题标题】:Does Eigen Matrix support indexing by a vector?特征矩阵是否支持向量索引?
【发布时间】:2014-08-15 18:16:30
【问题描述】:

例如,如果我有一个 4 x 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,假设我在A 的行中取1/5th A'(m/5 X n) * B(n x k) 是我所追求的。我不需要A' 本身,它就是我所追求的产品。

【问题讨论】:

  • 那么要创建另一个只有第 1 行和第 3 行的矩阵,难道你不能获取第 1 行和第 3 行并将它们放入一个新的 2x4 矩阵中?
  • @Jashaszun,谢谢。该解决方案的效率如何?
  • 可能非常有效,因为两行只使用 8 个数字(每行 4 个数字)。
  • 在实践中我的矩阵要大得多,也许我需要使用你建议的解决方案,但我也想确保没有方便的内置方法来解决这样的问题.
  • 哦,好的。如果矩阵更大,那么我不知道效率。 (我之前从未使用过eigen,所以我真的不知道我在说什么。对不起!)

标签: c++ c++11 eigen


【解决方案1】:

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

【讨论】:

  • 请多解释一下。链接应该作为答案的帮助,而不是答案本身。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 2020-12-30
  • 2019-04-27
  • 2013-01-07
  • 2018-10-12
  • 1970-01-01
相关资源
最近更新 更多