2017-03-10 2 views
0

私は偉大なマトリックスサブモジュールのおかげでDlibを使用しています。私はそれが非常に完全で有用な高速科学アルゴリズムを行うことがわかります。いくつかのカスタム操作を追加し、どのように動作するか全体的な考えを得ることができました。dlibからmatrix_expをstd :: vectorに割り当てることができないのはなぜですか?

しかし、かなりの時間以来私を気にする質問があります。 std::vectorに任意の種類の行列式を割り当てることが不可能と思われる特別な理由はありますか?

編集:ここでは

は、典型的なDLIB機能である:

template <typename EXP> 
const matrix_op<op_trans<EXP> > trans(const matrix_exp<EXP>& m) { 
    typedef op_trans<EXP> op; 
    return matrix_op<op>(op(m.ref()); 
} 

そして私が受け取り、代わりにstd::vectorを返し、対応する機能を実装したい場合、私は私がすると思う:

template <typename EXP> 
const std::vector<matrix_op<op_trans<EXP> > > trans(const std::vector<matrix_exp<EXP> >& ms) { 
    std::vector<matrix_op<op_trans<EXP> > > out(ms.size()); 
    typedef op_resize_bilinear<EXP> op; 
    for (int i = 0; i < ms.size(); ++i) 
    out[i] = matrix_op<op>(op(ms.ref())); 
    return out; 
} 

しかし、それが動作すると、matrix_expmatrix,matrix_op,matrix_add_exp ...しかし、これはstd::vector<matrix_exp>と真実ではありません。

‘const std::vector<smu::matrix<float> >’ is not derived from ‘const std::vector<smu::matrix_exp<EXP> >’

は、私はちょうどそれのために何らかの理由がある場合は、それが必要とするいくつかのアルゴリズムで有用である可能性があるので、これはDLIBから意図的であるかどうかを知りたいです一度にいくつかの行列を処理するには...

+1

_ "std :: vectorにどのような種類の行列式をも割り当てることができないようです" _:詳細を記してください。 _最小限の完全かつ検証可能なサンプルを作成する方法を参照_:http://stackoverflow.com/help/mcve –

+1

この機能を実装した理由を図書館のメンテナに尋ねる必要がありますか? – Borgleader

+0

ええ、それはなぜ彼らがライブラリ自体でこの機能を得なかったのかです。私は大きな問題は自分では見えませんが、私はテンプレート表現テクニックには新しいので、そのために大きな理由があったら、私は知りたいと思っていました。私はインターネット上で同様の質問を見つけませんでした... – baptiste

答えて

1

(免責事項:初めてdlibを見ていますが、ここでは暗闇の中で撮影していて、どのようにdlib/itsマトリックスクラスは実際に動作します)。

A dlib::matrix...

...レイアウトがrow_major_layoutの場合は行のメジャー順に、レイアウトがcolumn_major_layoutの場合は列の主な順序で繰り返します。 std::vectorに割り当て

は、このように非常に簡単に行うことができます。

dlib::matrix<...> mat; 
// fill the matrix, do operations on it etc.  
std::vector<mat::type> vec(mat.begin(), mat.end()); 

それはあなたが探しているあなたは本当に私たちに教えていなかったので、私は、知っていないものであるかどうか。 ;-)

+0

私は 'matrix_exp'ではなく' matrix'を求めていることを知りました。最もよく動作するC++のデータコンテナのように、 'begin()'と 'end()'もあります。* "行の主要な順序で行列の要素を繰り返します。 – DevSolar

関連する問題