我想扩展和覆盖下面的数组。
示例(阵列A和B):
A= 1 2
4 8
B = -1 -2
-3 -4
结果(从A.row(1)上覆盖A上的B):
C= 1 2
-1 -2
-3 -4
下面的代码定义了Matrix创建之前的大小,不能覆盖另一个矩阵。
#include <iostream>
#include <stdlib.h>
#include <Eigen/Dense>
int main (int argc, char * argv [])
{
MatrixXd m (2, 2);
m << 1, 2, 4, 8;
MatrixXd n (2, 2);
n << -1, -2, -3, -4;
MatrixXd k (4, 2);
k <<
m,
n;
std::cout << k << std::endl;
return EXIT_SUCCESS;
}
有没有办法在没有大小定义的情况下获得结果
(即没有这个:k (4, 2);
)?
答案 0 :(得分:1)
您可以使用block operations执行问题第一部分中的提问。例如,您可以将示例修改为
#include <iostream>
#include <Eigen/Core>
int main ()
{
Eigen::MatrixXd m (2, 2);
m << 1, 2, 4, 8;
Eigen::MatrixXd n (2, 2);
n << -1, -2, -3, -4;
Eigen::MatrixXd c (3, 2);
std::cout << c << "\n\n";
c.topRows(2) = m;
std::cout << c << "\n\n";
c.bottomRows(2) = n;
std::cout << c << "\n\n";
return 0;
}
您可以像我一样使用更通用的block()
或使用specific blocks。
关于是否可以跳过矩阵维度的定义(k (4, 2);
),答案实际上并非如此,除非您指定了正确维度的矩阵,在这种情况下,大小调整是隐含的。