【发布时间】: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,所以我真的不知道我在说什么。对不起!)