是否可以创建一个9x9矩阵,其中"对角线"是另一个矩阵,其余的是零,如下:
5 5 5 0 0 0 0 0 0
5 5 5 0 0 0 0 0 0
5 5 5 0 0 0 0 0 0
0 0 0 5 5 5 0 0 0
0 0 0 5 5 5 0 0 0
0 0 0 5 5 5 0 0 0
0 0 0 0 0 0 5 5 5
0 0 0 0 0 0 5 5 5
0 0 0 0 0 0 5 5 5
从较小的3x3矩阵重复:
5 5 5
5 5 5
5 5 5
我知道Replicate
函数,但它在矩阵中的任何地方重复它并且不会保持零。是否有内在的方法来实现我之后的目标?
答案 0 :(得分:1)
执行此操作的一种方法是使用块.block<3,3>(0,0)
是从3x3
开始的0,0
块。 (注意:您的IDE可能会将此行标记为错误,但会编译并运行)
for (int x=0, x<3, x++){
zero_matrix.block<3,3>(x*3,x*3) = five_matrix;
}
答案 1 :(得分:0)
您可以使用(不支持的)KroneckerProduct模块:
#include <unsupported/Eigen/KroneckerProduct>
int main()
{
Eigen::MatrixXd A = Eigen::kroneckerProduct(Eigen::Matrix3d::Identity(), Eigen::Matrix3d::Constant(5));
std::cout << A << '\n';
}