Webを検索しましたが、答えが見つかりませんでした。インデックスがゼロ以外の値から始まるように、マトリックスにベースインデックスを設定するにはどうすればよいですか?例えば:
A(-3:1) // Matlab/fortran equivalent
A.reindex(-3); // boost multi-array equivalent
ありがとう
検索は正しいようです。そのような機能はないようです。
この機能が本当に必要な場合は、マトリックスをサブクラス化し、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>場合は、古いインデックス演算子を使用することになりますので、注意してください。