如何创建一个boost矩阵数组?

时间:2010-03-23 21:59:23

标签: c++ boost arrays matrix ublas

如何将增强矩阵数组定义为成员变量?

以下都没有奏效。

boost::numeric::ublas::matrix<double> arrayM(1, 3)[arraySize];
boost::numeric::ublas::matrix<double>(1, 3) arrayM[arraySize];
boost::numeric::ublas::matrix<double> arrayM[arraySize](1, 3);

谢谢, 拉维。

4 个答案:

答案 0 :(得分:3)

初始化它的大小与类型无关。因此:

// this makes things easier!
typedef boost::numeric::ublas::matrix<double> matrix_type;

// this is the type (no initialization)
matrix_type arrayM[arraySize];

问题在于初始化阵列。你不能这样做:

TheClass::TheClass() :
arrayM(1, 3) // nope
{}

相反,你必须让它们默认构造,然后将它们全部调整大小:

TheClass::TheClass()
{
    std::fill(arrayM, arrayM + arraySize, matrix_type(1, 3));
}

由于您正在使用boost,请考虑使用boost::array,因为它提供了更好的语法:

typedef boost::numeric::ublas::matrix<double> matrix_type;
typedef boost::array<matrix_type, arraySize> matrix_array;

matrix_array arrayM; // ah

TheClass::TheClass()
{
    arrayM.assign(matrix_type(1, 3));
}

答案 1 :(得分:3)

数组初始化使用默认构造函数。您可以改为使用向量:

class MyClass {
    std::vector<boost::numeric::ublas::matrix<double>> vectorM;
public:
    MyClass() : vectorM(10, boost::numeric::ublas::matrix<double>(5,7)) {
    }
};

答案 2 :(得分:3)

我不清楚你正在尝试初始化什么,但是猜测(带有arraySize条目的数组;数组中的每个条目都用(1,3)初始化),我想出了这个,编译....

const size_t arraySize = 3;
boost::numeric::ublas::matrix<double> arrayM[arraySize] = 
{
    boost::numeric::ublas::matrix<double>(1, 3),
    boost::numeric::ublas::matrix<double>(1, 3),
    boost::numeric::ublas::matrix<double>(1, 3)
};

答案 3 :(得分:1)

怎么样:

// Assume: arraySize is a constant
// Assume: #include <boost/tr1/array.hpp>

typedef boost::numeric::ublas::matrix<double> doubleMatrixT;
std::tr1::array<doubleMatrixT, arraySize> arrayM;
arrayM.assign(doubleMatrixT(1, 3));

std::tr1::array模板是一个(非常)瘦的基本数组包装器,它提供了便利功能。例如,在这里我使用了assign(),它用单个值填充整个数组。