特征:具有较小矩阵的零矩阵作为"对角线"

时间:2017-03-10 15:42:27

标签: c++ eigen eigen3

是否可以创建一个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函数,但它在矩阵中的任何地方重复它并且不会保持零。是否有内在的方法来实现我之后的目标?

2 个答案:

答案 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';
}