2017-03-10 194 views
0

零矩陣是有可能創造一個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功能,但處處重申其在基質和不保持零。是否有一種內在的方式來實現我所追求的目標?

回答

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; 
} 
0

您可以使用的(不支持)克羅內克積模塊:

#include <unsupported/Eigen/KroneckerProduct> 
int main() 
{ 
    Eigen::MatrixXd A = Eigen::kroneckerProduct(Eigen::Matrix3d::Identity(), Eigen::Matrix3d::Constant(5)); 
    std::cout << A << '\n'; 
}