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;
}