2017-03-10 13 views
0

Ist es möglich, eine 9x9-Matrix, wo die „Diagonale“ eine andere Matrix zu erstellen und der Rest sind Nullen, wie folgt aus:Eigen: Nullmatrix mit kleineren Matrix als die „Diagonalen“

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 

von einem kleineren 3x3-Matrix wiederholt:

5 5 5 
5 5 5 
5 5 5 

ich bin mir bewusst, der Replicate Funktion aber das wiederholt sie überall in der Matrix und halten nicht die Nullen. Gibt es einen eingebauten Weg, um das zu erreichen, wonach ich suche?

Antwort

1

Eine Möglichkeit, dies zu tun, ist die Verwendung von Blöcken, wobei .block<3,3>(0,0) ein 3x3 Block ist, der bei 0,0 beginnt. (Hinweis: Ihre IDE Macht Flagge dieser Linie als ein Fehler, aber es wird kompiliert und ausgeführt)

for (int x=0, x<3, x++){ 
    zero_matrix.block<3,3>(x*3,x*3) = five_matrix; 
} 
0

können Sie verwenden, um das (nicht unterstützt) Kronecker-Produkt-Modul für die:

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