繁体   English   中英

本征库中步幅较大的子矩阵

[英]Submatrix with stride in Eigen Library

我是Eigen的新手,我想创建10个mxn矩阵。 由于某些原因,我使用以下方法进行操作:

Matrix<double, m, n*10>

其中似乎内存分配将类似于以下内容:

 _______________________________________________________________
|M1(1,1)|M2(1,1)|...|M10(1,1)|.....|M1(1,n)|M2(1,n)|...|M10(1,n)|
|  . .                                                          |
|  .                                                            |

现在如何为这10个矩阵中的每一个创建一个参考矩阵(按参考值而不复制数据)?

我建议使用动态分配的矩阵,因为mn可能很大。 同样,您似乎假定矩阵内存是行主的,而默认值是列主的。 在下面的示例中,我明确地使它们成为行专业。

您可以像这样使用一系列Eigen::Map<MatrixXd>

#include <Eigen/Core>
#include <iostream>

using namespace Eigen;

int main(void)
{
    int m = 3;
    int n = 4;
    int x = 6;
    typedef Matrix < double, Dynamic, Dynamic, RowMajor > ourMat;
    ourMat  M1(m, n * x);
    M1.setConstant(9.9);

    for (int i = 0; i < x; i++)
    {
        Eigen::Map<ourMat, 0, Stride<Dynamic, Dynamic>> m_i(M1.data() + i,
                                                            m, n,
                                   Stride<Dynamic, Dynamic>(n*x,x));
        m_i.setConstant(double(i));
        std::cout << m_i << std::endl;
        std::cout << M1 << "\n" << std::endl;

    }

    Eigen::Map<VectorXd> m_i(M1.data(), m * n * x);
    std::cout << m_i.transpose() << std::endl;

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM