特征矩阵是不是支持向量索引?

Posted

技术标签:

【中文标题】特征矩阵是不是支持向量索引?【英文标题】: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,所以我真的不知道我在说什么。对不起!) 【参考方案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);

【讨论】:

请多解释一下。链接应该作为答案的帮助,而不是答案本身。

以上是关于特征矩阵是不是支持向量索引?的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB 的 svmtrain :保存支持向量索引而不是支持向量本身

奇异谱分析

使用向量作为矩阵的索引

优雅的索引到向量/矩阵的末尾

Matlab - 使用矩阵作为数组向量的索引

矩阵运算:索引逻辑到数值比较的不对称向量