gpt4 book ai didi

c++ - 在特征库中的大矩阵中创建子矩阵

转载 作者:行者123 更新时间:2023-11-30 04:02:18 25 4
gpt4 key购买 nike

我想构造如下矩阵

              A(3x3)              B(3x3N) 
F = [|1 0 0| |0 0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0|;
(6x3+3N) |0 1 0| |0 0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0|;
|0 0 1| |0 0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0|;
------- -----------------------------------
|0 0 0| |0 0 0 1 0 0 0 0 0 0 0 0 ... 0 0 0|;
|0 0 0| |0 0 0 0 1 0 0 0 0 0 0 0 ... 0 0 0|;
|0 0 0| |0 0 0 0 0 1 0 0 0 0 0 0 ... 0 0 0|];
C(3x3) D(3x3N)

B & C 始终为零。 A 是单位矩阵。 D 很棘手。这些是根据索引指定的。例如,如果索引为 0,则 D

                   |1 0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0|;
|0 1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0|;
|0 0 1 0 0 0 0 0 0 0 0 0 ... 0 0 0|;
D(3x3N)

如果索引是1那么D

                   |0 0 0 1 0 0 0 0 0 0 0 0 ... 0 0 0|;
|0 0 0 0 1 0 0 0 0 0 0 0 ... 0 0 0|;
|0 0 0 0 0 1 0 0 0 0 0 0 ... 0 0 0|;
D(3x3N)

如何在 Eigen 库中完成此过程?我知道如何在 Eigen 中创建矩阵,但我不知道如何将它们构建为一个矩阵。

最佳答案

查看页面Advanced initialization在 Eigen 。我认为以下(未经测试的)代码构造了您想要的矩阵:

MatrixXd F(6, 3 + 3 * N);  // you need to specify the size before doing F << ...
F << MatrixXd::Identity(3, 3), // matrix A
MatrixXd::Zero(3, 3 * N), // matrix B
MatrixXd::Zero(3, 3 + 3 * index), // matrix C plus left zero block in D
MatrixXd::Identity(3, 3), // indentity block in D
MatrixXd::Zero(3, 3 * (N - index - 1)); // right zero block in D

关于c++ - 在特征库中的大矩阵中创建子矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25169180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com