私は std::vector を持っています。
vector<vector<vector> > > mdata;
mdata ベクトルから GSL 関数にデータを渡したい
gsl_spline_init(gsl_spline * spline, const double xa[], const double ya[], size_t size);
あなたのように。私はすでに次のようなことができることを理解しました
gsl_spline_init(spline, &(mgrid.front()), &(mdata[i][j][k].front()), mgrid.size());
固定 i,j の mdata から gsl_spline_init() にデータを渡したい場合は、これで問題ありません。
ただし、ここでは、mdata の最初の次元を渡す必要があるため、j、k を固定します。
任意の 2 つの固定インデックスについて、残りの次元に沿ったすべてのベクトルが同じ長さであることを知っているので、私のベクトルは「通常の立方体」です。したがって、必要なすべての値の間のオフセットは同じでなければなりません。
もちろん、一時的なベクトルを作成することもできます
int j = 123;
int k = 321;
vector<double> tmp;
for (int i = 0: i < mdata.size(); i++)
tmp.push_back(mdata[i][j][k]);
gsl_spline_init(spline, &(mgrid.front()), &(tmp.front()), mgrid.size());
しかし、これは複雑すぎるようです。おそらく、ポインター演算で私の目標を達成する方法はありますか?
どんな助けでも大歓迎です:)