0

Webを検索しましたが、答えが見つかりませんでした。インデックスがゼロ以外の値から始まるように、マトリックスにベースインデックスを設定するにはどうすればよいですか?例えば:

A(-3:1) // Matlab/fortran equivalent
A.reindex(-3); // boost multi-array equivalent

ありがとう

4

2 に答える 2

0

検索は正しいようです。そのような機能はないようです。

于 2010-01-20T22:31:07.407 に答える
0

この機能が本当に必要な場合は、マトリックスをサブクラス化し、operator()をオーバーライドしてインデックスをいじることを検討できます。例えば:

using namespace boost::numeric::ublas;

template<typename T>
class Reindexable : public matrix<T>
{
public:
    Reindexable() : m_offset(0) {}

    void reindex(int offset) { m_offset = offset; }

    T& operator()(int i) { return matrix<T>::operator()(i + m_offset); }

    /* Probably more implementation needed here ... */

private:
    int m_offset;
}

私は最近VB.NET(ughh!)とC#でプログラミングしているので、C ++構文に少し錆びていて、おそらく上記でいくつかの間違いを犯しましたが、一般的な考え方はうまくいくはずです。マトリックスをサブクラス化して、インデックスの再作成操作を提供し、括弧演算子をオーバーライドして、新しいインデックスオフセットを認識できるようにします。もちろん、実際の実装では、行列の各次元にオフセットが必要になります。

また、への参照またはポインタがReindexableあり、参照/ポインタのタイプがであるmatrix<T>場合は、古いインデックス演算子を使用することになりますので、注意してください。

于 2010-01-20T22:44:40.600 に答える