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