eigen 实现 meshgrid

void meshgrid(const Eigen::ArrayXd & x, const Eigen::ArrayXd & y, Eigen::ArrayXXd &xx, Eigen::ArrayXXd &yy)
{
    Eigen::MatrixXd m_x = x.matrix();
    Eigen::MatrixXd m_y = y.matrix();
    int Nx = m_x.rows();
    int Ny = m_y.rows();
    m_x.transposeInPlace();
    Eigen::MatrixXd m_xx = m_x.replicate(Ny, 1);
    Eigen::MatrixXd m_yy = m_y.replicate(1, Nx);
    xx = m_xx.array();
    yy = m_yy.array();
}

测试代码:

#include <iostream>
#include <Eigen/Dense>

void meshgrid(const Eigen::ArrayXd & x, const Eigen::ArrayXd & y, Eigen::ArrayXXd &xx, Eigen::ArrayXXd &yy)
{
    Eigen::MatrixXd m_x = x.matrix();
    Eigen::MatrixXd m_y = y.matrix();
    int Nx = m_x.rows();
    int Ny = m_y.rows();
    m_x.transposeInPlace();
    Eigen::MatrixXd m_xx = m_x.replicate(Ny, 1);
    Eigen::MatrixXd m_yy = m_y.replicate(1, Nx);
    xx = m_xx.array();
    yy = m_yy.array();
}

int main()
{
    Eigen::ArrayXd X(3);
    Eigen::ArrayXd Y(2);
    X << 0, 1, 2;
    Y << 3, 4;
    Eigen::ArrayXXd XX, YY;
    meshgrid(X, Y, XX, YY);
    std::cout << "XX = \n" << XX << std::endl;
    std::cout << "YY = \n" << YY << std::endl;

    return 0;
}

输出结果:

XX = 
0 1 2
0 1 2
YY = 
3 3 3
4 4 4
posted @ 2022-02-21 12:20  Wreng  阅读(224)  评论(2编辑  收藏  举报