我觉得我很困惑实例化对象..以及..不正确的对象,因为new
语句会产生编译错误。我的背景是在Python和Java中,我被困在C++创建不是类对象的方式之前。实例化boost :: multi_array的std :: vector :: cpp guru的大脑融化?
我正在翻译从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
什么是“观察”? 'states'? 'symbols'? [SSCCE](http://sscce.org/)。无论如何,你在写入'epsilon'和'gamma'时都没有首先确定'vectors'的大小,所以这至少是一个明显的错误,但可能不是导致你所看到的异常的错误。 – ildjarn
顺便说一句,我编辑了 – nkint