Я думаю, что я путаюсь с созданием экземпляров объектов ... ну .. не совсем правильно, потому что операторы new
делают ошибку компиляции.Мой опыт работы в Python и Java, и я застрял перед C ++ способом создания объектов, которые не являются классами.
Я перевожу алгоритм из 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