如何創建常量提升矩陣?如何創建const boost矩陣?
下不工作:
const boost::numeric::ublas::matrix<double> arrayM(1, 3) = { {1.0, 2.0, 3.0} };
如何創建常量提升矩陣?如何創建const boost矩陣?
下不工作:
const boost::numeric::ublas::matrix<double> arrayM(1, 3) = { {1.0, 2.0, 3.0} };
通常以一個類似於:
typedef boost::numeric::ublas::matrix<double> matrix_type;
const matrix_type get_matrix(void)
{
matrix_type result(1, 3);
result(0, 0) = 1;
result(0, 1) = 2;
result(0, 2) = 3;
return result;
}
const matrix_type arrayM = get_matrix();
你也可以嘗試這樣的事情(主要是未經測試):
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
template <typename T, typename L = boost::numeric::ublas::row_major,
typename A = boost::numeric::ublas::unbounded_array<T> >
class matrix_builder
{
public:
// types
typedef boost::numeric::ublas::matrix<T, L, A> matrix_type;
typedef typename matrix_type::size_type size_type;
// creation
matrix_builder(size_type pRows, size_type pColumns) :
mMatrix(pRows, pColumns),
mRow(0),
mColumn(0)
{}
matrix_builder& operator()(const T& pValue)
{
mMatrix(mRow, mColumn) = pValue;
if (++mColumn == mMatrix.size2())
{
mColumn = 0;
mRow++;
}
return *this;
}
// access
operator const matrix_type&(void) const
{
return mMatrix;
}
private:
// non copyable
matrix_builder(const matrix_builder&);
matrix_builder& operator=(const matrix_builder&);
// members
matrix_type mMatrix;
size_type mRow;
size_type mColumn;
};
typedef boost::numeric::ublas::matrix<double> matrix_type;
static const matrix_type m1 = matrix_builder<double>(3, 1)
(1)(2)(3);
static const matrix_type m2 = matrix_builder<double>(3, 3)
(1)(2)(3)
(4)(5)(6)
(7)(8)(9);
int main(void)
{
std::cout << m1 << std::endl;
std::cout << m2 << std::endl;
}
相同的想法,更通用。還有一點更直觀,可以很好。
儘管這有效,但我會爲每個需要創建的常量矩陣類型創建一個函數。 – 2010-04-02 22:48:20
@Venkata:我現在寫一個更通用的方法。 – GManNickG 2010-04-02 22:53:07
+1不錯的一個GMan! – StackedCrooked 2010-04-02 23:43:42
它不起作用,因爲您聲明瞭一個常量矩陣,然後嘗試使用可變賦值運算符爲其分配值。以下GMan的解決方案將滿足您的需求。 – 2010-04-02 22:48:09
我應該清楚我的問題: 有沒有一種方法可以用類似的方式創建它,我們創建一個常量數組? 例如: int billy [5] = {16,2,77,40,12071}; – 2010-04-02 22:51:25