通过指针</double,0,80>初始化常量矩阵<double,0,80>(来自Dlib)

时间:2014-10-03 03:33:36

标签: c++

我在工作中使用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的变量。

1 个答案:

答案 0 :(得分:-1)

库中Matrix的格式为Matrix。因此,要生成长度为80的列向量,需要实例化Matrix。因此,请将typedef作为column_vector,然后用以下内容对其进行修改:

typedef matrix<double, 80, 1> column_vector;
...
column_vector* myColumnVector = new column_vector;
相关问题