new
ステートメントでコンパイルエラーが発生するため、私はオブジェクトのインスタンス化と混乱していると思います。私の背景はPythonとJavaであり、クラスではないオブジェクトを作成するC++の方法の前で立ち往生しています。boost :: multi_arrayのstd :: vectorをインスタンス化する... cppの教祖の脳を溶かす?
私はC#と機械学習のアルゴリズムを翻訳しており、多次元配列の配列を使用しています。
C#コード:
public double Learn(int[][] observations, int symbols, int states, ...
// ...
double[][, ,] epsilon = new double[N][, ,]; // also referred as ksi or psi
double[][,] gamma = new double[N][,];
for (int i = 0; i < N; i++)
{
int T = observations[i].Length;
epsilon[i] = new double[T, States, States];
gamma[i] = new double[T, States];
}
私は、多次元配列のためのBoostライブラリを使用することを決めた、と私は持っている:
typedef boost::multi_array<double, 2> matrix2D;
typedef boost::multi_array<double, 3> matrix3D;
vector<matrix3D> epsilon;
vector<matrix2D> gamma;
cout << "HMM::learn >> before" << endl;
for (int i = 0; i < N; i++)
{
int T = observations[i].size();
epsilon[i] = matrix3D(boost::extents[T][states][symbols]);
gamma[i] = matrix2D(boost::extents[T][states]);
}
と私は、このランタイムエラーを取得:
HMM::learn >> before
std::bad_alloc' what(): std::bad_alloc
'observations'とは何ですか? '状態'? 'シンボル'? [SSCCE](http://sscce.org/)。いずれにしても、最初に 'vectors'をサイジングせずに' epsilon'と 'gamma'に書き込んでいるので、あなたは見ている例外を引き起こすものではありません。 – ildjarn
btw、私は編集しました – nkint