特征矩阵是不是支持向量索引?
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);
【讨论】:
请多解释一下。链接应该作为答案的帮助,而不是答案本身。以上是关于特征矩阵是不是支持向量索引?的主要内容,如果未能解决你的问题,请参考以下文章