C++中是否有一个功能可以创建一个像Python的"numpy.bmat"一样简单的块矩阵?

Is there a functionality in C++ to create a block matrix as simple as Python's `numpy.bmat`?

本文关键字:numpy bmat 一样 简单 一个 功能 有一个 是否 C++ 创建 Python      更新时间:2023-10-16

C 中是否有一个功能来创建像numpy.bmat一样简单的块矩阵?

示例:

python

m = np.bmat([[A, B], [C, D]])

c 我知道的唯一方法是使用boost :: numeric :: ublas :: project:

#include <boost/numeric/ublas/matrix.hpp>
boost::numeric::ublas::matrix m;
//...
r1 = boost::numeric::ublas::range(i1, i2);
r2 = boost::numeric::ublas::range(i3, i4);
boost::numeric::ublas::project(m, r1, r2) = A;
// repeat code above for other submatrices, each time calculating the appropriate indices

它更容易使用特征。这是一个示例程序:

#include <eigen3/Eigen/Dense>
#include <iostream>
using Eigen::MatrixXd;
int main()
{
  MatrixXd m(2,2);
  m(0,0) = 3;
  m(1,0) = 2.5;
  m(0,1) = -1;
  m(1,1) = m(1,0) + m(0,1);
  std::cout << m << std::endl;
  MatrixXd mx(4,4);
  mx.block<2,2>(0,0) << m;
  mx.block<2,2>(2,2) << m;
  std::cout << mx << std::endl;
}