我在工作中使用Dlib库。 http://dlib.net/ 我可以运行这个例子。(http://dlib.net/optimization_ex.cpp.html)
在这个例子中,有一个功能。
typedef matrix<double,0,1> column_vector;
// This is a helper function used while optimizing the rosen() function.
const column_vector rosen_derivative (const column_vector& m)
/*!
ensures
- returns the gradient vector for the rosen function
!*/
{
const double x = m(0);
const double y = m(1);
// make us a column vector of length 2
column_vector res(2);
// now compute the gradient vector
res(0) = -400*x*(y-x*x) - 2*(1-x); // derivative of rosen() with respect to x
res(1) = 200*(y-x*x); // derivative of rosen() with respect to y
return res;
}
我是C ++的初学者。我遇到问题typedef matrix<double,0,1> column_vector;
我只是模仿如何使用它。我看看如何使用`matrix&#39;形成链接http://dlib.net/matrix_ex.cpp.html。
问题在于我定义typedef matrix<double,0,80> column_vector;
。我有,
double * ptr=(double *) ptr(80*sizeof(double)).
我通过一些复杂的计算初始化ptr [i](i = 0 ... 79)。但我不知道如何使用ptr
来初始化column_vector
。有一些错误。错误意味着column_vector
是常量,但ptr
不是。
为了便于说明我的问题,我说我定义了typedef matrix<double,0,80> column_vector;
。实际上,它有点复杂。以下是我的代码。
const lbfgs_para form_para_d( float * dcof, float * dtheta)
{
const lbfgs_para para_d;
#pragma omp parallel for
for(long col = 0;col < kernel_num;col++)
for(long row = 0;row < kernel_num;row++)
{
para_d(row+col*kernel_num)=dcof[row*kernel_num+col] ;
}
#pragma omp parallel for
for(int col = 0;col < kernel_num;col++)
{
para_d(col+kernel_num*kernel_num)=dtheta[col];
}
return para_d;
}
错误发生在
para_d(row+col*kernel_num)=dcof[row*kernel_num+col] ;
和para_d(col+kernel_num*kernel_num)=dtheta[col];
。这是错误c3892,你不能分配给const的变量。
答案 0 :(得分:-1)
库中Matrix的格式为Matrix。因此,要生成长度为80的列向量,需要实例化Matrix。因此,请将typedef作为column_vector,然后用以下内容对其进行修改:
typedef matrix<double, 80, 1> column_vector;
...
column_vector* myColumnVector = new column_vector;